1
2 import base64
3 import datetime
4 import functools
5 from logging import getLogger
6
7 from flask import url_for
8 import flask
9
10 from ..logic.users_logic import UsersLogic
11 from ..logic.builds_logic import BuildsLogic
12 from ..logic.coprs_logic import CoprsLogic
13 from ..rest_api.schemas import BuildTaskSchema
14 from ..rest_api.util import mm_serialize_one, get_one_safe
15
16 from .exceptions import AuthFailed
17 from .schemas import CoprChrootSchema, BuildSchema, ProjectSchema
18 from .util import mm_serialize_one
19 from coprs import app
20
21 log = getLogger(__name__)
34
47
50 """
51 :param Copr project:
52 """
53 if self_params is None:
54 self_params = {}
55
56 return {
57 "project": mm_serialize_one(ProjectSchema, project),
58 "_links": {
59 "self": {"href": url_for(".projectr", project_id=project.id, **self_params)},
60 "builds": {"href": url_for(".buildlistr", project_id=project.id)},
61 "chroots": {"href": url_for(".projectchrootlistr", project_id=project.id)},
62 "build_tasks": {"href":url_for(".buildtasklistr", project_id=project.id) }
63 },
64 }
65
81
84
85 @functools.wraps(f)
86 def decorated_function(*args, **kwargs):
87 token = None
88 api_login = None
89 try:
90 if "Authorization" in flask.request.headers:
91 base64string = flask.request.headers["Authorization"]
92 base64string = base64string.split()[1].strip()
93 userstring = base64.b64decode(base64string)
94 (api_login, token) = userstring.decode("utf-8").split(":")
95 except Exception:
96 log.exception("Failed to get auth token from headers")
97 api_login = token = None
98
99 token_auth = False
100 if token and api_login:
101 user = UsersLogic.get_by_api_login(api_login).first()
102 if (user and user.api_token == token and
103 user.api_token_expiration >= datetime.date.today()):
104
105 token_auth = True
106 flask.g.user = user
107 if not token_auth:
108 message = (
109 "Login invalid/expired. "
110 "Please visit {0}/api "
111 "get or renew your API token.")
112
113 raise AuthFailed(message.format(app.config["PUBLIC_COPR_HOSTNAME"]))
114 return f(*args, **kwargs)
115 return decorated_function
116
128
140
152