Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
irul
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 0d5e7327
authored
Jun 14, 2022
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
penyesuaian google client
1 parent
2b1eaed2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
35 additions
and
21 deletions
opensipkd/base/__init__.py
opensipkd/base/views/base_google.py
opensipkd/base/views/register_external.py
opensipkd/base/views/templates/base3.1.pt
opensipkd/base/views/templates/form_input.pt
opensipkd/base/views/templates/login.pt
opensipkd/base/views/templates/register.pt
opensipkd/base/views/user.py
opensipkd/base/views/user_login.py
opensipkd/base/__init__.py
View file @
0d5e732
...
...
@@ -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
)
...
...
opensipkd/base/views/base_google.py
View file @
0d5e732
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
opensipkd/base/views/register_external.py
View file @
0d5e732
...
...
@@ -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'
)
...
...
opensipkd/base/views/templates/base3.1.pt
View file @
0d5e732
This diff is collapsed.
Click to expand it.
opensipkd/base/views/templates/form_input.pt
View file @
0d5e732
...
...
@@ -22,9 +22,8 @@
$
{
structure
:
scripts
}
});
</script>
<div
metal:define-slot=
"scripts"
>
</div>
<div
metal:define-slot=
"scripts"
></div>
</div>
</html>
opensipkd/base/views/templates/login.pt
View file @
0d5e732
This diff is collapsed.
Click to expand it.
opensipkd/base/views/templates/register.pt
View file @
0d5e732
<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>
...
...
opensipkd/base/views/user.py
View file @
0d5e732
...
...
@@ -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
...
...
opensipkd/base/views/user_login.py
View file @
0d5e732
...
...
@@ -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'
))
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment