mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-05 10:53:28 -05:00
Merge with master.
This commit is contained in:
@@ -28,6 +28,12 @@
|
||||
|
||||
}
|
||||
|
||||
.banner-info {
|
||||
@extend .banner;
|
||||
background: $govuk-blue;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.banner-dangerous {
|
||||
|
||||
@extend .banner;
|
||||
|
||||
@@ -15,7 +15,7 @@ class UserApiClient(BaseAPIClient):
|
||||
self.base_url = app.config['API_HOST_NAME']
|
||||
self.client_id = app.config['ADMIN_CLIENT_USER_NAME']
|
||||
self.secret = app.config['ADMIN_CLIENT_SECRET']
|
||||
self.failed_login_count = app.config["MAX_FAILED_LOGIN_COUNT"]
|
||||
self.max_failed_login_count = app.config["MAX_FAILED_LOGIN_COUNT"]
|
||||
|
||||
def register_user(self, name, email_address, mobile_number, password):
|
||||
data = {
|
||||
@@ -25,26 +25,25 @@ class UserApiClient(BaseAPIClient):
|
||||
"password": password
|
||||
}
|
||||
user_data = self.post("/user", data)
|
||||
return User(user_data['data'], max_failed_login_count=self.failed_login_count)
|
||||
return User(user_data['data'], max_failed_login_count=self.max_failed_login_count)
|
||||
|
||||
def get_user(self, id):
|
||||
url = "/user/{}".format(id)
|
||||
user_data = self.get(url)
|
||||
return User(user_data['data'], max_failed_login_count=self.failed_login_count)
|
||||
return User(user_data['data'], max_failed_login_count=self.max_failed_login_count)
|
||||
|
||||
def get_users(self):
|
||||
url = "/user".format()
|
||||
users_data = self.get(url)['data']
|
||||
users_data = self.get("/user")['data']
|
||||
users = []
|
||||
for user in users_data:
|
||||
users.append(User(user, max_failed_login_count=self.failed_login_count))
|
||||
users.append(User(user, max_failed_login_count=self.max_failed_login_count))
|
||||
return users
|
||||
|
||||
def update_user(self, user):
|
||||
data = user.serialize()
|
||||
url = "/user/{}".format(user.id)
|
||||
user_data = self.put(url, data=data)
|
||||
return User(user_data['data'], max_failed_login_count=self.failed_login_count)
|
||||
return User(user_data['data'], max_failed_login_count=self.max_failed_login_count)
|
||||
|
||||
def verify_password(self, user, password):
|
||||
try:
|
||||
@@ -76,6 +75,7 @@ class User(object):
|
||||
def __init__(self, fields, max_failed_login_count=3):
|
||||
self.fields = fields
|
||||
self.max_failed_login_count = max_failed_login_count
|
||||
self._failed_login_count = 0
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
@@ -114,11 +114,19 @@ class User(object):
|
||||
def state(self, state):
|
||||
self.fields['state'] = state
|
||||
|
||||
@property
|
||||
def failed_login_count(self):
|
||||
return self._failed_login_count
|
||||
|
||||
@failed_login_count.setter
|
||||
def failed_login_count(self, num):
|
||||
self._failed_login_count += num
|
||||
|
||||
def is_anonymous(self):
|
||||
return False
|
||||
|
||||
def is_locked(self):
|
||||
return self.fields.get('failed_login_count') > self.max_failed_login_count
|
||||
return self.failed_login_count > self.max_failed_login_count
|
||||
|
||||
def serialize(self):
|
||||
return self.fields
|
||||
|
||||
@@ -53,11 +53,11 @@
|
||||
<div class="column-half">
|
||||
<details class="dropdown">
|
||||
<summary class="dropdown-toggle">
|
||||
Service name
|
||||
Current service
|
||||
</summary>
|
||||
<div>
|
||||
<a href="#">Switch to A N Other service</a>
|
||||
<a href="{{ url_for('main.add_service') }}">Add a new service to GOV.UK Notify</a>
|
||||
<a href="{{ url_for('main.choose_service') }}">Switch service</a>
|
||||
<a href="{{ url_for('.add_service') }}">Add a new service to GOV.UK Notify</a>
|
||||
</div>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% macro banner(body, with_tick=False) %}
|
||||
<div class='banner{% if with_tick %}-with-tick{% endif %}'>
|
||||
{% macro banner(body, type=None, with_tick=False) %}
|
||||
<div class='banner{% if type %}-{{ type }}{% endif %}{% if with_tick %}-with-tick{% endif %}'>
|
||||
{{ body }}
|
||||
</div>
|
||||
{% endmacro %}
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
<li><a href="{{ url_for('.service_dashboard', service_id=service_id) }}">Dashboard</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="{{ url_for('.send_sms', service_id=service_id) }}">Send text messages</a></li>
|
||||
<li><a href="{{ url_for('.send_email', service_id=service_id) }}">Send emails</a></li>
|
||||
<li><a href="{{ url_for('.view_jobs', service_id=service_id) }}">Activity</a></li>
|
||||
<!--<li><a href="{{ url_for('.send_sms', service_id=service_id) }}">Send text messages</a></li>-->
|
||||
<!--<li><a href="{{ url_for('.send_email', service_id=service_id) }}">Send emails</a></li>-->
|
||||
<!--<li><a href="{{ url_for('.view_jobs', service_id=service_id) }}">Activity</a></li>-->
|
||||
<li><a href="{{ url_for('.manage_service_templates', service_id=service_id) }}">Templates</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="{{ url_for('.api_keys', service_id=123) }}">API keys</a></li>
|
||||
<li><a href="{{ url_for('.documentation', service_id=123) }}">Developer documentation</a></li>
|
||||
<li><a href="{{ url_for('.api_keys', service_id=service_id) }}">API keys</a></li>
|
||||
<li><a href="{{ url_for('.documentation', service_id=service_id) }}">Developer documentation</a></li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="{{ url_for('.manage_users', service_id=service_id) }}">Manage users</a></li>
|
||||
|
||||
@@ -1,13 +1,17 @@
|
||||
{% extends "admin_template.html" %}
|
||||
{% from "main_nav.html" import main_nav with context %}
|
||||
{% from "components/banner.html" import banner %}
|
||||
|
||||
{% block fullwidth_content %}
|
||||
<div class="grid-row">
|
||||
<div class="column-one-quarter">
|
||||
{% include "main_nav.html" %}
|
||||
</div>
|
||||
<div class="column-three-quarters">
|
||||
{% block maincolumn_content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="grid-row">
|
||||
<div class="column-one-quarter">
|
||||
{% include "main_nav.html" %}
|
||||
</div>
|
||||
<div class="column-three-quarters">
|
||||
{{ banner(
|
||||
'You are in restricted mode. You can only send notifications to yourself.',
|
||||
'info'
|
||||
) }}
|
||||
{% block maincolumn_content %}{% endblock %}
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user