Commit 0d5e7327 by aagusti

penyesuaian google client

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