api: export all role attributes with user info (#8397)

This commit is contained in:
Frédéric Péters 2015-09-28 13:55:08 +02:00
parent 558c4df65e
commit a58fcf4cae
3 changed files with 31 additions and 10 deletions

View File

@ -202,6 +202,22 @@ def test_sign_url(local_user):
url = signed_url[len('http://example.net'):]
output = get_app(pub).get(url, status=403)
def test_get_user(local_user):
Role.wipe()
role = Role(name='Foo bar')
role.store()
local_user.roles = [role.id]
local_user.store()
signed_url = sign_url(
'http://example.net/api/user/?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email),
'1234'
)
url = signed_url[len('http://example.net'):]
output = get_app(pub).get(url)
assert output.json['user_display_name'] == u'Jean Darmette'
assert [x['name'] for x in output.json['user_roles']] == ['Foo bar']
assert [x['slug'] for x in output.json['user_roles']] == ['foo-bar']
def test_get_user_compat_endpoint(local_user):
signed_url = sign_url(
'http://example.net/user?format=json&orig=coucou&email=%s' % urllib.quote(local_user.email),

View File

@ -360,9 +360,8 @@ class ApiUserDirectory(Directory):
raise AccessForbiddenError('no user specified')
user_info = user.get_substitution_variables(prefix='')
del user_info['user']
user_info['user_roles'] = []
for role_id in user.roles or []:
user_info['user_roles'].append(Role.get(role_id).name)
user_info['user_roles'] = [
Role.get(x).get_json_export_dict() for x in user.roles or []]
return json.dumps(user_info)
def get_user_forms(self, user):
@ -505,12 +504,6 @@ class ApiDirectory(Directory):
list_roles = []
charset = get_publisher().site_charset
for role in Role.select():
list_roles.append({'text': unicode(role.name, charset),
'allows_backoffice_access': role.allows_backoffice_access,
'emails': [unicode(email, charset) for email in role.emails or []],
'details': unicode(role.details or '', charset),
'emails_to_members': role.emails_to_members,
'slug': unicode(role.slug, charset),
'id': role.id})
list_roles.append(role.get_json_export_dict())
get_response().set_content_type('application/json')
return json.dumps({'data': list_roles})

View File

@ -78,6 +78,18 @@ class Role(StorableObject):
data[prefix + 'emails'] = ', '.join(self.emails)
return data
def get_json_export_dict(self):
charset = get_publisher().site_charset
return {
'name': unicode(self.name, charset),
'text': unicode(self.name, charset), # generic key
'allows_backoffice_access': self.allows_backoffice_access,
'emails': [unicode(email, charset) for email in self.emails or []],
'details': unicode(self.details or '', charset),
'emails_to_members': self.emails_to_members,
'slug': unicode(self.slug, charset),
'id': self.id}
def logged_users_role():
volatile_role = Role.volatile()