Merge with master.

This commit is contained in:
Nicholas Staples
2016-01-22 11:38:16 +00:00
6 changed files with 45 additions and 27 deletions

View File

@@ -28,6 +28,12 @@
} }
.banner-info {
@extend .banner;
background: $govuk-blue;
color: $white;
}
.banner-dangerous { .banner-dangerous {
@extend .banner; @extend .banner;

View File

@@ -15,7 +15,7 @@ class UserApiClient(BaseAPIClient):
self.base_url = app.config['API_HOST_NAME'] self.base_url = app.config['API_HOST_NAME']
self.client_id = app.config['ADMIN_CLIENT_USER_NAME'] self.client_id = app.config['ADMIN_CLIENT_USER_NAME']
self.secret = app.config['ADMIN_CLIENT_SECRET'] 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): def register_user(self, name, email_address, mobile_number, password):
data = { data = {
@@ -25,26 +25,25 @@ class UserApiClient(BaseAPIClient):
"password": password "password": password
} }
user_data = self.post("/user", data) 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): def get_user(self, id):
url = "/user/{}".format(id) url = "/user/{}".format(id)
user_data = self.get(url) 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): def get_users(self):
url = "/user".format() users_data = self.get("/user")['data']
users_data = self.get(url)['data']
users = [] users = []
for user in users_data: 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 return users
def update_user(self, user): def update_user(self, user):
data = user.serialize() data = user.serialize()
url = "/user/{}".format(user.id) url = "/user/{}".format(user.id)
user_data = self.put(url, data=data) 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): def verify_password(self, user, password):
try: try:
@@ -76,6 +75,7 @@ class User(object):
def __init__(self, fields, max_failed_login_count=3): def __init__(self, fields, max_failed_login_count=3):
self.fields = fields self.fields = fields
self.max_failed_login_count = max_failed_login_count self.max_failed_login_count = max_failed_login_count
self._failed_login_count = 0
@property @property
def id(self): def id(self):
@@ -114,11 +114,19 @@ class User(object):
def state(self, state): def state(self, state):
self.fields['state'] = 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): def is_anonymous(self):
return False return False
def is_locked(self): 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): def serialize(self):
return self.fields return self.fields

View File

@@ -53,11 +53,11 @@
<div class="column-half"> <div class="column-half">
<details class="dropdown"> <details class="dropdown">
<summary class="dropdown-toggle"> <summary class="dropdown-toggle">
Service name Current service
</summary> </summary>
<div> <div>
<a href="#">Switch to A N Other service</a> <a href="{{ url_for('main.choose_service') }}">Switch service</a>
<a href="{{ url_for('main.add_service') }}">Add a new service to GOV.UK Notify</a> <a href="{{ url_for('.add_service') }}">Add a new service to GOV.UK Notify</a>
</div> </div>
</details> </details>
</div> </div>

View File

@@ -1,5 +1,5 @@
{% macro banner(body, with_tick=False) %} {% macro banner(body, type=None, with_tick=False) %}
<div class='banner{% if with_tick %}-with-tick{% endif %}'> <div class='banner{% if type %}-{{ type }}{% endif %}{% if with_tick %}-with-tick{% endif %}'>
{{ body }} {{ body }}
</div> </div>
{% endmacro %} {% endmacro %}

View File

@@ -3,14 +3,14 @@
<li><a href="{{ url_for('.service_dashboard', service_id=service_id) }}">Dashboard</a></li> <li><a href="{{ url_for('.service_dashboard', service_id=service_id) }}">Dashboard</a></li>
</ul> </ul>
<ul> <ul>
<li><a href="{{ url_for('.send_sms', service_id=service_id) }}">Send text messages</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('.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('.view_jobs', service_id=service_id) }}">Activity</a></li>-->
<li><a href="{{ url_for('.manage_service_templates', service_id=service_id) }}">Templates</a></li> <li><a href="{{ url_for('.manage_service_templates', service_id=service_id) }}">Templates</a></li>
</ul> </ul>
<ul> <ul>
<li><a href="{{ url_for('.api_keys', service_id=123) }}">API keys</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=123) }}">Developer documentation</a></li> <li><a href="{{ url_for('.documentation', service_id=service_id) }}">Developer documentation</a></li>
</ul> </ul>
<ul> <ul>
<li><a href="{{ url_for('.manage_users', service_id=service_id) }}">Manage users</a></li> <li><a href="{{ url_for('.manage_users', service_id=service_id) }}">Manage users</a></li>

View File

@@ -1,13 +1,17 @@
{% extends "admin_template.html" %} {% extends "admin_template.html" %}
{% from "main_nav.html" import main_nav with context %} {% from "components/banner.html" import banner %}
{% block fullwidth_content %} {% block fullwidth_content %}
<div class="grid-row"> <div class="grid-row">
<div class="column-one-quarter"> <div class="column-one-quarter">
{% include "main_nav.html" %} {% include "main_nav.html" %}
</div> </div>
<div class="column-three-quarters"> <div class="column-three-quarters">
{% block maincolumn_content %}{% endblock %} {{ banner(
</div> 'You are in restricted mode. You can only send notifications to yourself.',
</div> 'info'
) }}
{% block maincolumn_content %}{% endblock %}
</div>
</div>
{% endblock %} {% endblock %}