def get(context, request, username=None): """Plone users route """ # Don't allow anonymous users to query a user other than themselves if api.is_anonymous(): username = "******" # query all users if no username was given if username is None: users = api.get_users() elif username == "current": users = [api.get_current_user()] else: users = [api.get_user(username)] # Prepare batch size = req.get_batch_size() start = req.get_batch_start() batch = api.make_batch(users, size, start) # get the user info for the user ids in the current batch users = map(get_user_info, batch.get_batch()) return { "pagesize": batch.get_pagesize(), "next": batch.make_next_url(), "previous": batch.make_prev_url(), "page": batch.get_pagenumber(), "pages": batch.get_numpages(), "count": batch.get_sequence_length(), "items": users, }
def get_user_info(user): """Get the user information """ user = api.get_user(user) current = api.get_current_user() if api.is_anonymous(): return { "username": current.getUserName(), "authenticated": False, "roles": current.getRoles(), "api_url": api.url_for("plone.jsonapi.routes.users", username="******"), } # nothing to do if user is None: logger.warn("No user found for {}".format(user)) return None # plone user pu = user.getUser() info = { "username": user.getUserName(), "roles": user.getRoles(), "groups": pu.getGroups(), "authenticated": current == user, "api_url": api.url_for("plone.jsonapi.routes.users", username=user.getId()), } for k, v in api.get_user_properties(user).items(): if api.is_date(v): v = api.to_iso_date(v) if not api.is_json_serializable(v): logger.warn( "User property '{}' is not JSON serializable".format(k)) continue info[k] = v return info
def get_user_info(user): """Get the user information """ user = api.get_user(user) current = api.get_current_user() if api.is_anonymous(): return { "username": current.getUserName(), "authenticated": False, "roles": current.getRoles(), "api_url": api.url_for("plone.jsonapi.routes.users", username="******"), } # nothing to do if user is None: logger.warn("No user found for {}".format(user)) return None # plone user pu = user.getUser() info = { "username": user.getUserName(), "roles": user.getRoles(), "groups": pu.getGroups(), "authenticated": current == user, "api_url": api.url_for("plone.jsonapi.routes.users", username=user.getId()), } for k, v in api.get_user_properties(user).items(): if api.is_date(v): v = api.to_iso_date(v) if not api.is_json_serializable(v): logger.warn("User property '{}' is not JSON serializable".format(k)) continue info[k] = v return info
def test_get_current_user(self): user = api.get_current_user() self.assertEqual(user.id, TEST_USER_ID)