-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
52 lines (38 loc) · 1.48 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import logging
from flask import Flask, jsonify, request
from prometheus_flask_exporter import PrometheusMetrics
from werkzeug.exceptions import BadRequest
import oauthlib
import requests_oauthlib
app = Flask(__name__)
metrics = PrometheusMetrics(app)
logger = logging.getLogger(__name__)
TOKEN_URL = "https://services.sentinel-hub.com/oauth/token"
if __name__ != "__main__":
gunicorn_logger = logging.getLogger("gunicorn.error")
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
@app.route("/headers")
def headers():
return jsonify(dict(request.headers))
SH_CLIENT_ID_HEADER = "X-SH-CLIENT-ID"
SH_CLIENT_SECRET_HEADER = "X-SH-CLIENT-SECRET"
@app.route("/token", methods=["POST"])
def retrieve_token():
origin = request.headers.get("ORIGIN")
logger.info("Retrieving token for %s", origin)
try:
sh_client_id = request.headers[SH_CLIENT_ID_HEADER]
sh_client_secret = request.headers[SH_CLIENT_SECRET_HEADER]
except KeyError:
raise BadRequest(
f"Please specify the headers {SH_CLIENT_ID_HEADER} and "
f"{SH_CLIENT_SECRET_HEADER}"
)
client = oauthlib.oauth2.BackendApplicationClient(client_id=sh_client_id)
session = requests_oauthlib.OAuth2Session(client=client)
token = session.fetch_token(
token_url=TOKEN_URL, client_id=sh_client_id, client_secret=sh_client_secret
)
logger.info("Token successfully retrieved for %s", origin)
return token