add oauth flow for github and gitlab
This commit is contained in:
parent
7deb001f08
commit
3707469eed
14 changed files with 359 additions and 22 deletions
|
@ -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})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue