blob: c37b0957487be81620399b8b5578ba5458222657 [file] [log] [blame]
#!/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)