server/endpoints/preferences.py (51 lines of code) (raw):

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import plugins.basetypes import plugins.session ADMIN_ADDITIONAL_PROJECTS = ["infrastructure", "members", "board", "foundation"] EXEC_ADDITIONAL_PROJECTS = ["members", "board", "foundation"] """ Generic preferences endpoint for Boxer""" async def process( server: plugins.basetypes.Server, session: plugins.session.SessionObject, indata: dict ) -> dict: github_data = None in_github_org = False if session.credentials and session.credentials.github_login in server.data.mfa: in_github_org = True if session.credentials: for p in server.data.people: if p.asf_id == session.credentials.uid: github_data = { "repositories": [x.filename for x in p.repositories if x.filename in server.data.github_repos], "private": [x.filename for x in p.repositories if x.private and x.filename in server.data.github_repos], "metadata": {repo.filename: {"archived": repo.archived, "description": repo.description} for repo in p.repositories if repo.filename in server.data.github_repos}, "mfa": p.github_mfa, "login": p.github_login, } break pmcs = [] all_projects = set(server.data.pmcs.keys()) if session.credentials: for project, data in server.data.pmcs.items(): if session.credentials.uid in data: pmcs.append(project) if session.credentials.admin: all_projects.update(ADMIN_ADDITIONAL_PROJECTS) elif session.credentials.member: all_projects.update(EXEC_ADDITIONAL_PROJECTS) pmcs.extend(EXEC_ADDITIONAL_PROJECTS) pmcs = list(sorted(pmcs)) prefs: dict = {"credentials": {}, "github": github_data, "pmcs": pmcs, "all_projects": list(sorted(all_projects)), "podlings": server.data.podlings} if session and session.credentials: prefs['credentials'] = { "admin": session.credentials.admin, "uid": session.credentials.uid, "email": session.credentials.email, "fullname": session.credentials.name, "github_login": session.credentials.github_login, "github_org_member": in_github_org, } # Logging out?? if indata.get('logout'): # Remove session from memory if session.cookie in server.data.sessions: del server.data.sessions[session.cookie] session.credentials = None return prefs def register(server: plugins.basetypes.Server): return plugins.basetypes.Endpoint(process)