32 lines
1015 B
Python
32 lines
1015 B
Python
import logging
|
|
|
|
from pyramid.httpexceptions import HTTPUnauthorized
|
|
from pyramid.security import forget, Authenticated
|
|
from pyramid.view import view_config, forbidden_view_config
|
|
from bifrost.digital_ocean import update_domain
|
|
|
|
log = logging.getLogger('bifrost.updater')
|
|
api_url_base = 'https://api.digitalocean.com/v2'
|
|
api_token = None
|
|
|
|
|
|
@view_config(route_name='update', request_param='domain', renderer='json', permission=Authenticated)
|
|
def update_view(request):
|
|
current_ip = request.GET.get('ip', None)
|
|
if current_ip is None:
|
|
if 'X-Forwarded-For' in request.headers:
|
|
current_ip = request.headers['X-Forwarded-For']
|
|
else:
|
|
current_ip = request.remote_addr
|
|
|
|
name, domain = request.GET['domain'].split('.', maxsplit=1)
|
|
update_domain(domain, name, current_ip, api_url_base, api_token, log)
|
|
return {}
|
|
|
|
|
|
@forbidden_view_config()
|
|
def basic_challenge(request):
|
|
response = HTTPUnauthorized()
|
|
response.headers.update(forget(request))
|
|
return response
|