def post(self, request, *args, **kwargs): action = self.request.POST.get('action', None) name = self.request.POST.get('name', None) value = self.request.POST.get('value', None) user = self.request.user if action == 'delete': if name is None: return HttpResponse('Invalid request', status=400) r = list(paged_query('get', 'userattribute', params={'user': user.username, 'attribute': name})) if len(r) > 1: LOG.error('User has duplicate attributes', extra={'data': {'user': user.username, 'attribute': name}}) return HttpResponse('Multiple attributes error', status=500) elif len(r) == 0: return HttpResponse(status=404) attribute_id = r[0]['id'] roledb_client('delete', 'userattribute/{id}'.format(id=attribute_id)) return HttpResponse('OK') if action == 'add': # get attribute # if not existing, create new attribute # add attribute with value # TODO: auth-data sets UserAttributes always for request.user pass else: return HttpResponse('Invalid action', status=400)
def get_context_data(self, **kwargs): context = super(ProfileView, self).get_context_data(**kwargs) try: user_data = roledb_client("get", "query/{username}".format(username=self.request.user.username)) context["attributes"] = user_data.get("attributes", None) except APIResponse: context["attributes"] = [] return context
def associate(self, user, attr_name, attr_value): if not self.user == user: LOG.warning('AuthAssociationToken.associate() called by user not owning the token', extra={'data': {'request.user': user, 'self.user': self.user}}) return False data = { 'user': self.user.username, 'attribute': attr_name, 'value': attr_value, } try: r = roledb_client('post', 'userattribute', data=data) except APIResponse as e: LOG.error('AuthAssocionToken.associate() failed', extra={'data': {'authdatapayload': data, 'authdataresponse_code': e.r.status_code, 'authdataresponse_text': e.r.text}}) return False self.is_used = True self.save() return True
def register(self, user, eppn=None, auth_method=None): if self.user != user: return False print 'REGISTRATION', self.pk, repr(self.user.username) # TODO Push the data to RoleDB data = { 'user': self.user.username, 'attribute': auth_method, 'value': eppn, # 'invitator': self.issuer_oid, # 'invitator_auth_method': self.issuer_auth_method, # 'invited_at': self.issued_at, } r = roledb_client('post', 'userattribute', data=data) self.is_used = True self.save() return True