add oauth flow for github and gitlab

This commit is contained in:
Laura Klünder 2016-09-29 16:33:45 +02:00
parent 7deb001f08
commit 3707469eed
14 changed files with 359 additions and 22 deletions

View file

@ -2,12 +2,12 @@ from django.conf import settings
from django.core import signing
from django.core.exceptions import PermissionDenied
from django.http.response import Http404
from django.shortcuts import get_object_or_404, render
from django.shortcuts import get_object_or_404, redirect, render
from django.utils.translation import ugettext_lazy as _
from django.views.decorators.http import require_POST
from c3nav.editor.forms import FeatureForm
from c3nav.editor.hosters import get_hoster_for_package
from c3nav.editor.hosters import get_hoster_for_package, hosters
from c3nav.mapdata.models.feature import FEATURE_TYPES, Feature
from c3nav.mapdata.models.package import Package
from c3nav.mapdata.packageio.write import json_encode
@ -106,17 +106,62 @@ def finalize(request):
'title': _('Missing data.'),
'description': _('Edit data is missing.')
}, status=400)
data = request.POST['data']
package_name, file_path, file_contents = signing.loads(request.POST['data'])
package_name, file_path, file_contents = signing.loads(data)
package = Package.objects.filter(name=package_name).first()
hoster = None
if package is not None:
hoster = get_hoster_for_package(package)
if request.POST.get('check'):
hoster.check_state(request)
hoster_state = hoster.get_state(request)
hoster_error = hoster.get_error(request) if hoster_state == 'logged_out' else None
return render(request, 'editor/finalize.html', {
'data': data,
'package_name': package_name,
'hoster': hoster,
'hoster_state': hoster_state,
'hoster_error': hoster_error,
'file_path': file_path,
'file_contents': file_contents
})
@require_POST
def finalize_oauth_progress(request):
pass
@require_POST
def finalize_oauth_redirect(request):
if 'data' not in request.POST:
return render(request, 'editor/error.html', {
'title': _('Missing data.'),
'description': _('Edit data is missing.')
}, status=400)
data = request.POST['data']
package_name, file_path, file_contents = signing.loads(data)
package = Package.objects.filter(name=package_name).first()
hoster = None
if package is not None:
hoster = get_hoster_for_package(package)
hoster.set_tmp_data(request, data)
return redirect(hoster.get_auth_uri(request))
def finalize_oauth_callback(request, hoster):
hoster = hosters.get(hoster)
if hoster is None:
raise Http404
data = hoster.get_tmp_data(request)
hoster.handle_callback_request(request)
return render(request, 'editor/finalize_oauth_callback.html', {'data': data})