""" Authorize repository to send e-mail notifications. """ import logging from flask import request, abort from endpoints.api import (resource, nickname, require_repo_admin, RepositoryParamResource, log_action, validate_json_request, internal_only, path_param, show_if) from endpoints.api.repoemail_models_pre_oci import pre_oci_model as model from endpoints.exception import NotFound from app import tf from data.database import db from util.useremails import send_repo_authorization_email import features logger = logging.getLogger(__name__) @internal_only @resource('/v1/repository//authorizedemail/') @show_if(features.MAILING) @path_param('repository', 'The full path of the repository. e.g. namespace/name') @path_param('email', 'The e-mail address') class RepositoryAuthorizedEmail(RepositoryParamResource): """ Resource for checking and authorizing e-mail addresses to receive repo notifications. """ @require_repo_admin @nickname('checkRepoEmailAuthorized') def get(self, namespace, repository, email): """ Checks to see if the given e-mail address is authorized on this repository. """ record = model.get_email_authorized_for_repo(namespace, repository, email) if not record: abort(404) return record.to_dict() @require_repo_admin @nickname('sendAuthorizeRepoEmail') def post(self, namespace, repository, email): """ Starts the authorization process for an e-mail address on a repository. """ with tf(db): record = model.get_email_authorized_for_repo(namespace, repository, email) if record and record.confirmed: return record.to_dict() if not record: record = model.create_email_authorization_for_repo(namespace, repository, email) send_repo_authorization_email(namespace, repository, email, record.code) return record.to_dict()