mirror of
https://github.com/lucaspalomodevelop/indico-plugins.git
synced 2026-03-12 23:27:22 +00:00
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
# This file is part of the Indico plugins.
|
|
# Copyright (C) 2002 - 2020 CERN
|
|
#
|
|
# The Indico plugins are free software; you can redistribute
|
|
# them and/or modify them under the terms of the MIT License;
|
|
# see the LICENSE file for more details.
|
|
|
|
|
|
import json
|
|
import posixpath
|
|
|
|
import requests
|
|
from werkzeug.exceptions import ServiceUnavailable
|
|
|
|
|
|
def _get_settings():
|
|
from indico_ursh.plugin import UrshPlugin
|
|
api_key = UrshPlugin.settings.get('api_key')
|
|
api_host = UrshPlugin.settings.get('api_host')
|
|
|
|
if not api_key or not api_host:
|
|
raise ServiceUnavailable('Not configured')
|
|
|
|
return api_key, api_host
|
|
|
|
|
|
def is_configured():
|
|
"""Check whether the plugin is properly configured."""
|
|
from indico_ursh.plugin import UrshPlugin
|
|
api_key = UrshPlugin.settings.get('api_key')
|
|
api_host = UrshPlugin.settings.get('api_host')
|
|
return bool(api_key and api_host)
|
|
|
|
|
|
def request_short_url(original_url):
|
|
from indico_ursh.plugin import UrshPlugin
|
|
api_key, api_host = _get_settings()
|
|
headers = {'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'}
|
|
url = posixpath.join(api_host, 'api/urls/')
|
|
|
|
response = requests.post(url, data=json.dumps({'url': original_url, 'allow_reuse': True}), headers=headers)
|
|
response.raise_for_status()
|
|
data = response.json()
|
|
UrshPlugin.logger.info('Shortcut created: %s -> %s', data['shortcut'], original_url)
|
|
return data['short_url']
|
|
|
|
|
|
def register_shortcut(original_url, shortcut, user):
|
|
from indico_ursh.plugin import UrshPlugin
|
|
api_key, api_host = _get_settings()
|
|
headers = {'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json'}
|
|
url = posixpath.join(api_host, 'api/urls', shortcut)
|
|
data = {'url': original_url, 'allow_reuse': True, 'meta': {'indico.user': user.id}}
|
|
|
|
response = requests.put(url, data=json.dumps(data), headers=headers)
|
|
if not (400 <= response.status_code < 500):
|
|
response.raise_for_status()
|
|
|
|
data = response.json()
|
|
if not data.get('error'):
|
|
UrshPlugin.logger.info('Shortcut created: %s -> %s', data['shortcut'], original_url)
|
|
return data
|
|
|
|
|
|
def strip_end(text, suffix):
|
|
if not text.endswith(suffix):
|
|
return text
|
|
return text[:len(text) - len(suffix)]
|