diff --git a/rowers/templates/rower_exportsettings.html b/rowers/templates/rower_exportsettings.html index a62ad6a2..5d1180f8 100644 --- a/rowers/templates/rower_exportsettings.html +++ b/rowers/templates/rower_exportsettings.html @@ -89,6 +89,10 @@

connect with Rojabo

+{% if user.is_staff %} +

iDoklad authorize

+{% endif %} + {% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index 18b28d66..5691b5c3 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -745,6 +745,7 @@ urlpatterns = [ views.rower_prefs_view, name='rower_prefs_view'), re_path(r'^me/prefs/user/(?P\d+)/$', views.rower_simpleprefs_view, name='rower_simpleprefs_view'), + re_path(r'^me/idokladauthorize/$', views.rower_idoklad_authorize, name='rower_idoklad_authorize'), re_path(r'^me/rojaboauthorize/$', views.rower_rojabo_authorize, name='rower_rojabo_authorize'), re_path(r'^me/polarauthorize/$', views.rower_polar_authorize, diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py index 6efb02d8..f69942b0 100644 --- a/rowers/views/paymentviews.py +++ b/rowers/views/paymentviews.py @@ -9,7 +9,7 @@ from django.core.mail import EmailMessage from rowers import credits @login_required() -def rower_idoklad_auth(request): +def rower_idoklad_authorize(request): state=str(uuid4()) params = { @@ -23,6 +23,7 @@ def rower_idoklad_auth(request): return HttpResponseRedirect(url) +@login_required() def process_idokladcallback(request): dologging('idoklad.log',' /rowers/idokladcallback/') @@ -33,9 +34,45 @@ def process_idokladcallback(request): messages.error(request,error) return HttpResponseRedirect(reverse('workouts_view')) - - - return HttpResponse('') + post_data = { + 'grant_type': "authorization_code", + 'client_id': IDOKLAD_CLIENT_ID, + 'client_secret': IDOKLAD_CLIENT_SECRET, + 'scope': 'idoklad_api offline_access', + 'code': code, + 'redirect_uri': IDOKLAD_REDIRECT_URI, + } + + headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + } + + base_url = 'https://identity.idoklad.cz/server/connect/token' + + response = requests.post(base_url, data=post_data, headers=headers) + + if response.status_code == 200: + result = response.json() + try: + t = iDokladToken.objects.get(id=1) + t.acces_token = result['access_token'], + t.refresh_token = result['refresh_token'] + t.expires_in = result['expires_in'] + t.save() + except iDokladToken.DoesNotExist: + t = iDokladToken( + access_token = result['access_token'], + refresh_token = result['refresh_token'], + expires_in = result['expires_in'], + ) + t.save() + messages.info(request,"Token refreshed and stored") + else: + messages.error(request,"Error") + + url = reverse('rower_exportsettings_view') + + return HttpResponseRedirect(url) @csrf_exempt def braintree_webhook_view(request): diff --git a/rowers/views/statements.py b/rowers/views/statements.py index d134013d..d4b675f0 100644 --- a/rowers/views/statements.py +++ b/rowers/views/statements.py @@ -178,7 +178,7 @@ from rowers.models import ( RowerPowerForm, RowerHRZonesForm, SimpleRowerPowerFo IndoorVirtualRaceForm, PlannedSessionCommentForm, Alert, Condition, StaticChartRowerForm, FollowerForm, VirtualRaceAthleteForm, InstantPlanForm, DataRowerForm, - StepEditorForm, ) + StepEditorForm, iDokladToken ) from rowers.models import ( FavoriteForm, BaseFavoriteFormSet, SiteAnnouncement, BasePlannedSessionFormSet, get_course_timezone, BaseConditionFormSet, @@ -225,6 +225,7 @@ from rowsandall_app.settings import ( RECAPTCHA_SITE_KEY, RECAPTCHA_SITE_SECRET, NK_REDIRECT_URI, NK_CLIENT_ID, NK_CLIENT_SECRET, ROJABO_REDIRECT_URI, ROJABO_CLIENT_ID, ROJABO_CLIENT_SECRET, + IDOKLAD_REDIRECT_URI, IDOKLAD_CLIENT_ID, IDOKLAD_CLIENT_SECRET, ) from django.contrib import messages diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index e3fe4e50..7cbfe5dc 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -97,6 +97,8 @@ AUTHENTICATION_BACKENDS = ( #'rules.permissions.ObjectPermissionBackend', ) +CSRF_TRUSTED_ORIGINS = ['https://rowsandall.com', 'https://www.rowsandall.com', 'http://localhost', 'https://dunav.ngrok.io'] + MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.common.BrokenLinkEmailsMiddleware', @@ -600,9 +602,11 @@ except KeyError: # pragma: no cover try: IDOKLAD_CLIENT_ID = CFG['idoklad_client_id'] IDOKLAD_CLIENT_SECRET = CFG['idoklad_client_secret'] + IDOKLAD_REDIRECT_URI = CFG['idoklad_redirect_uri'] except KeyError: # pragma: no cover IDOKLAD_CLIENT_ID = '' IDOKLAD_CLIENT_SECRET = '' + IDOKLAD_REDIRECT_URI = '' # ID obfuscation