Commit 0d5e7327 by aagusti

penyesuaian google client

1 parent 2b1eaed2
......@@ -116,16 +116,19 @@ def add_global(event):
event['get_params'] = get_params
def get_params(params, alternate=None):
def get_params(params, alternate=None, settings=None):
"""
Digunakan untuk mengambil nilai dari konfigurasi sesuai params yang disebut
:param params: variable
:param alternate: default apabila tidak ditemukan data/params
:param settings: default settings
:return: value
contoh penggunaan:
get_params('devel', False)
"""
settings = get_settings()
if not settings:
settings = get_settings()
result = settings and params in settings and settings[params].strip() or None
if not result:
row = Parameter.query_kode(params).first()
......@@ -425,7 +428,8 @@ def main(global_config, **settings):
config.add_static_view('deform_static', 'deform:static')
# config.add_static_view('files', get_params('static_files'))
# Captcha
captcha_files = get_params('captcha_files', '/tmp/captcha')
captcha_files = get_params('captcha_files', settings=settings,alternate="/tmp/captcha")
if not os.path.exists(captcha_files):
os.makedirs(captcha_files)
config.add_static_view('captcha', captcha_files)
......
from google.auth.transport import requests
from google.oauth2 import id_token
from opensipkd.base import get_params
from pyramid.view import (view_config, )
from ..models import User
from opensipkd.tools import get_settings
import json
def validate_user(request, idinfo):
......@@ -51,16 +53,21 @@ def googlesignin(request):
# (Receive token by HTTPS POST)
# ...
CLIENT_IDS = request.google_signin_client_ids
# CLIENT_IDS = get_params('google-signin-client-id')
KEY = get_params('google-signin-client-secret')
# Specify the CLIENT_ID of the app that accesses the backend:
# idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)
# Or, if multiple clients access the backend server:
gtoken = request.params['id_token']
idinfo = id_token.verify_oauth2_token(gtoken, requests.Request())
gtoken = json.loads(request.params['id_token'])
import jwt
idinfo = jwt.decode(gtoken["credential"], options={"verify_signature": False}) # KEY, algorithms=["RS256"]) #
# idinfo = id_token.verify_oauth2_token(gtoken, requests.Request())
if idinfo['aud'] not in CLIENT_IDS:
raise ValueError('Could not verify audience.')
if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
raise ValueError('Wrong issuer.')
return idinfo
......@@ -180,7 +180,7 @@ def get_form(request, class_form, buttons=None, validator=form_validator):
return Form(schema, buttons=('batal', 'simpan'))
def save(values, user=None, row=None):
def save(values, user=None, row=None, request=None):
"""
Digunakan untuk menyimpan User External
:param values: dictionary of
......@@ -198,7 +198,7 @@ def save(values, user=None, row=None):
if not user:
user_ = dict(user_name=values['external_user_name'],
email=values['external_email'])
user, remail = save_user(user_)
user, remail = save_user(request, user_)
if not row:
row = ExternalIdentity()
......@@ -222,9 +222,9 @@ def save_request(values, request, row=None):
user = ExternalIdentityService.user_by_external_id_and_provider(
id_info['sub'], id_info['iss'])
if not user:
user = save(values, user, row)
user = save(values, user, row, request)
partner = Partner.query_user_id(user.id).first()
partner = Partner.query_email(id_info['email']).first()
# if not partner:
values['email'] = id_info['email']
if 'kode' not in values and not values['kode']:
......@@ -280,7 +280,7 @@ class RegistrasiExternal(BaseView):
values['primari']['email'] = id_info['email']
# values['detail']['captcha']
form.set_appstruct(values)
return dict(form=form, captcha=get_captcha(request))
return dict(form=form, captcha=get_captcha(request), scripts="")
dicts = dict(controls)
values = dicts['primari']
......@@ -317,7 +317,9 @@ class RegistrasiExternal(BaseView):
values['secondari'].update(partner.to_dict())
form.set_appstruct(values)
return dict(form=form, captcha=get_captcha(request))
# return dict()
# return dict(captcha=get_captcha(request))
return dict(form=form.render(), captcha=get_captcha(request), scripts="")
@view_config(route_name='profile-external', renderer='templates/register.pt',
permission='view')
......
......@@ -22,9 +22,8 @@
${structure:scripts}
});
</script>
<div metal:define-slot="scripts">
</div>
<div metal:define-slot="scripts"></div>
</div>
</html>
<html metal:use-macro="load: form_input.pt">
<html metal:use-macro="load: form_input.pt"
tal:define="home request.route_url('home')[:-1];">
<div metal:fill-slot="scripts">
<script>
$(document).ready(function () {
......@@ -11,7 +13,6 @@
});
});
});
</script>
</div>
......
......@@ -6,6 +6,7 @@ import transaction
from datatables import (ColumnDT, DataTables, )
from deform import (Form, widget, ValidationFailure, Button, )
# from sqlalchemy.exc import IntegrityErrortpl
from sqlalchemy.exc import IntegrityError
from opensipkd.tools import create_now
from opensipkd.tools.buttons import btn_cancel, btn_save, btn_close
......
......@@ -122,23 +122,23 @@ def view_login(request):
return r
elif "provider_name" in request.params and request.params["provider_name"]:
# checking jika mengggunakan openid seperti google atau facebook
provider_name = request.params["provider_name"]
if provider_name == "google":
from .base_google import googlesignin
# user = googlesignin(request)
id_info = googlesignin(request)
request.session["id_info"] = id_info
try:
id_info = googlesignin(request)
request.session["id_info"] = id_info
pass
except ValueError as e:
request.session.flash(e, 'error')
raise HTTPNotFound
else:
id_info = None
user = id_info and ExternalIdentityService. \
user_by_external_id_and_provider(id_info['sub'], id_info['iss'])
if id_info and not user:
request.session.flash('Silahkan Melakukan Registrasi')
return HTTPFound(location=request.route_url('register-external'))
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!