Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
aa.gusti
/
opensipkd-base
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 0f6b8659
authored
Jun 20, 2022
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
perbaikan registrasi
1 parent
4b730411
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
121 additions
and
30 deletions
opensipkd/base/views/base_views.py
opensipkd/base/views/register.py
opensipkd/base/views/user_login.py
opensipkd/base/views/base_views.py
View file @
0f6b865
...
@@ -351,6 +351,10 @@ def need_captcha():
...
@@ -351,6 +351,10 @@ def need_captcha():
is_captcha
=
get_params
(
"reg_captcha"
)
is_captcha
=
get_params
(
"reg_captcha"
)
return
is_captcha
==
'1'
or
is_captcha
==
"True"
or
is_captcha
==
"true"
or
is_captcha
==
True
return
is_captcha
==
'1'
or
is_captcha
==
"True"
or
is_captcha
==
"true"
or
is_captcha
==
True
def
need_verify
():
result
=
get_params
(
"reg_verify"
)
return
result
==
'1'
or
result
==
"True"
or
result
==
"true"
or
result
==
True
def
get_url_captcha
(
request
):
def
get_url_captcha
(
request
):
captcha
=
get_captcha
(
request
)
captcha
=
get_captcha
(
request
)
...
...
opensipkd/base/views/register.py
View file @
0f6b865
...
@@ -37,10 +37,11 @@ from pyramid.view import view_config
...
@@ -37,10 +37,11 @@ from pyramid.view import view_config
from
ziggurat_foundations.models.services.user
import
UserService
from
ziggurat_foundations.models.services.user
import
UserService
from
opensipkd.base
import
get_params
from
opensipkd.base
import
get_params
from
opensipkd.base.views.user
import
email_validator
from
opensipkd.base.views.user
import
email_validator
,
add_member_count
from
.
import
widget_os
from
.
import
widget_os
from
.base_views
import
store
,
image_validator
,
need_captcha
,
get_url_captcha
from
.base_views
import
store
,
image_validator
,
need_captcha
,
need_verify
,
get_url_captcha
from
..models
import
User
,
DBSession
,
Partner
from
.user_login
import
regenerate_security_code
,
get_login_headers
,
send_email_security_code
,
send_email_pending
from
..models
import
User
,
DBSession
,
Partner
,
Group
,
UserGroup
,
ExternalIdentity
from
..views
import
BaseView
from
..views
import
BaseView
_
=
TranslationStringFactory
(
'user'
)
_
=
TranslationStringFactory
(
'user'
)
...
@@ -75,6 +76,10 @@ class AddSchema(colander.Schema):
...
@@ -75,6 +76,10 @@ class AddSchema(colander.Schema):
def
after_bind
(
self
,
schema
,
kw
):
def
after_bind
(
self
,
schema
,
kw
):
request
=
kw
.
get
(
"request"
)
request
=
kw
.
get
(
"request"
)
is_id_card
=
get_params
(
'reg_idcard'
)
is_id_card
=
get_params
(
'reg_idcard'
)
if
"id_info"
in
request
.
session
:
self
[
"email"
]
.
widget
=
widget
.
TextInputWidget
(
readonly
=
True
)
self
[
"email"
]
.
missing
=
colander
.
drop
if
is_id_card
==
'1'
or
is_id_card
==
"True"
or
is_id_card
==
"true"
:
if
is_id_card
==
'1'
or
is_id_card
==
"True"
or
is_id_card
==
"true"
:
self
[
"kode"
]
=
colander
.
SchemaNode
(
self
[
"kode"
]
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
...
@@ -138,7 +143,6 @@ def reg_buttons():
...
@@ -138,7 +143,6 @@ def reg_buttons():
class
Registrasi
(
BaseView
):
class
Registrasi
(
BaseView
):
def
__init__
(
self
,
request
):
def
__init__
(
self
,
request
):
print
(
"********* init start"
,
request
.
session
)
super
(
Registrasi
,
self
)
.
__init__
(
request
)
super
(
Registrasi
,
self
)
.
__init__
(
request
)
self
.
autocomplete
=
"off"
self
.
autocomplete
=
"off"
self
.
buttons
=
reg_buttons
()
self
.
buttons
=
reg_buttons
()
...
@@ -146,7 +150,6 @@ class Registrasi(BaseView):
...
@@ -146,7 +150,6 @@ class Registrasi(BaseView):
self
.
edit_schema
=
EditSchema
self
.
edit_schema
=
EditSchema
self
.
table
=
User
self
.
table
=
User
self
.
list_route
=
"home"
self
.
list_route
=
"home"
print
(
"********* init finish"
,
self
.
ses
)
def
form_validator
(
self
,
form
,
value
):
def
form_validator
(
self
,
form
,
value
):
"""
"""
...
@@ -161,10 +164,11 @@ class Registrasi(BaseView):
...
@@ -161,10 +164,11 @@ class Registrasi(BaseView):
"""
"""
form_exc
=
colander
.
Invalid
(
form
,
''
)
form_exc
=
colander
.
Invalid
(
form
,
''
)
request
=
form
.
request
request
=
form
.
request
session
=
request
.
session
def
err_captcha
():
def
err_captcha
():
msg
=
'Captcha berbeda'
msg
=
'Captcha berbeda'
# form_exc.add(colander.Invalid(form['captcha'], msg))
form_exc
[
'captcha'
]
=
msg
form_exc
[
'captcha'
]
=
msg
raise
form_exc
raise
form_exc
def
err_email
():
def
err_email
():
...
@@ -189,17 +193,14 @@ class Registrasi(BaseView):
...
@@ -189,17 +193,14 @@ class Registrasi(BaseView):
form
[
"password"
],
'User atau Password tidak sesuai'
)
form
[
"password"
],
'User atau Password tidak sesuai'
)
if
not
request
.
user
and
need_captcha
():
if
not
request
.
user
and
need_captcha
():
# Check Captcha jika registrasi
print
(
"*************** validate"
,
request
.
session
)
captcha
=
'captcha'
in
value
and
value
[
'captcha'
]
.
upper
()
or
None
captcha
=
'captcha'
in
value
and
value
[
'captcha'
]
.
upper
()
or
None
ses_captcha
=
request
.
session
.
pop
(
'captcha'
)
ses_captcha
=
request
.
session
.
pop
(
'captcha'
)
if
captcha
!=
ses_captcha
:
if
captcha
!=
ses_captcha
:
err_captcha
()
err_captcha
()
is_logged
=
form
.
request
.
user
is_logged
=
form
.
request
.
user
email
=
value
[
"email"
]
if
not
"email"
in
value
and
"id_info"
in
session
:
if
"user_name"
not
in
value
or
not
value
[
"user_name"
]:
value
[
"email"
]
=
session
[
"id_info"
][
"email"
]
value
[
"user_name"
]
=
value
[
"mobile"
]
if
'user_name'
in
value
:
if
'user_name'
in
value
:
user_name
=
value
[
"user_name"
]
user_name
=
value
[
"user_name"
]
...
@@ -210,7 +211,10 @@ class Registrasi(BaseView):
...
@@ -210,7 +211,10 @@ class Registrasi(BaseView):
if
user
and
is_logged
:
if
user
and
is_logged
:
if
user
.
id
!=
is_logged
.
id
:
if
user
.
id
!=
is_logged
.
id
:
err_user
()
err_user
()
if
"user_name"
not
in
value
or
not
value
[
"user_name"
]:
value
[
"user_name"
]
=
value
[
"mobile"
]
email
=
value
[
"email"
]
user
=
user_found
(
email
)
user
=
user_found
(
email
)
if
user
and
not
is_logged
:
if
user
and
not
is_logged
:
err_email
()
err_email
()
...
@@ -250,11 +254,13 @@ class Registrasi(BaseView):
...
@@ -250,11 +254,13 @@ class Registrasi(BaseView):
err_login
()
err_login
()
def
before_add
(
self
):
def
before_add
(
self
):
result
=
{}
if
"id_info"
in
self
.
ses
and
self
.
ses
[
'id_info'
]:
result
=
self
.
ses
[
"id_info"
]
result
.
update
(
dict
(
nama
=
" "
.
join
([
result
[
"given_name"
],
result
[
"family_name"
]])))
if
need_captcha
():
if
need_captcha
():
result
=
dict
(
captcha
=
get_url_captcha
(
self
.
req
))
result
.
update
(
dict
(
captcha
=
get_url_captcha
(
self
.
req
)))
print
(
"*************** before_add"
,
self
.
ses
)
return
result
return
result
return
def
before_save
(
self
,
row
,
values
):
def
before_save
(
self
,
row
,
values
):
if
"doc_id_card"
not
in
values
or
not
values
[
"doc_id_card"
]:
if
"doc_id_card"
not
in
values
or
not
values
[
"doc_id_card"
]:
...
@@ -270,6 +276,63 @@ class Registrasi(BaseView):
...
@@ -270,6 +276,63 @@ class Registrasi(BaseView):
return
row
return
row
def
after_save
(
self
,
row
,
values
):
def
after_save
(
self
,
row
,
values
):
if
not
self
.
req
.
user
:
# User Baru
if
'groups'
in
values
and
values
[
'groups'
]:
gr
=
Group
.
query_group_name
(
values
[
'groups'
])
.
first
()
ug
=
UserGroup
()
ug
.
user_id
=
row
.
id
ug
.
group_id
=
gr
.
id
DBSession
.
add
(
ug
)
add_member_count
(
gr
.
id
)
DBSession
.
flush
()
data
=
dict
(
email
=
row
.
email
)
if
'id_info'
in
self
.
ses
and
self
.
ses
[
'id_info'
]:
id_info
=
self
.
ses
[
"id_info"
]
values
[
'email'
]
=
id_info
[
'email'
]
values
[
'external_id'
]
=
id_info
[
'sub'
]
values
[
'external_user_name'
]
=
id_info
[
"name"
]
values
[
'external_email'
]
=
id_info
[
"email"
]
values
[
'provider_name'
]
=
id_info
[
"iss"
]
# todo: what is this????
# values['access_token']
# values['alt_token']
# values['token_secret']
values
[
"local_user_id"
]
=
row
.
id
external
=
ExternalIdentity
()
external
.
from_dict
(
values
)
DBSession
.
add
(
external
)
DBSession
.
flush
()
if
need_verify
():
send_email_pending
(
self
.
req
,
row
,
'Welcome new user'
,
'email-new-user'
,
'email-pending.tpl'
)
ts
=
_
(
'user-added'
,
default
=
'${email} berhasil ditambahkan tunggu hasil verifikasi data '
,
mapping
=
data
)
else
:
row
.
status
=
1
DBSession
.
add
(
row
)
self
.
ses
.
flash
(
'Registrasi Sukses.'
)
DBSession
.
flush
()
self
.
headers
=
get_login_headers
(
self
.
req
,
row
)
ts
=
_
(
'user-added'
,
default
=
'${email} berhasil ditambahkan '
,
mapping
=
data
)
else
:
# Kirim email validasi
remain
=
regenerate_security_code
(
row
)
send_email_security_code
(
self
.
req
,
row
,
remain
,
'Welcome new user'
,
'email-new-user'
,
'email-new-user.tpl'
)
ts
=
_
(
'user-added'
,
default
=
'${email} berhasil ditambahkan dan email untuk ubah '
\
'kata kunci sudah dikirim.'
,
mapping
=
data
)
self
.
ses
.
flash
(
ts
)
if
"old_email"
in
self
.
ses
and
self
.
ses
[
"old_email"
]:
if
"old_email"
in
self
.
ses
and
self
.
ses
[
"old_email"
]:
email
=
self
.
ses
[
"old_email"
]
email
=
self
.
ses
[
"old_email"
]
del
self
.
ses
[
"old_email"
]
del
self
.
ses
[
"old_email"
]
...
@@ -290,7 +353,6 @@ class Registrasi(BaseView):
...
@@ -290,7 +353,6 @@ class Registrasi(BaseView):
@view_config
(
route_name
=
'register'
,
renderer
=
'templates/form_input.pt'
)
@view_config
(
route_name
=
'register'
,
renderer
=
'templates/form_input.pt'
)
def
view_register
(
self
):
def
view_register
(
self
):
print
(
"*************** init"
,
self
.
ses
)
request
=
self
.
req
request
=
self
.
req
reg_form
=
get_params
(
"reg_form"
)
reg_form
=
get_params
(
"reg_form"
)
if
reg_form
:
if
reg_form
:
...
...
opensipkd/base/views/user_login.py
View file @
0f6b865
...
@@ -61,6 +61,9 @@ def get_login_headers(request, user):
...
@@ -61,6 +61,9 @@ def get_login_headers(request, user):
@view_config
(
route_name
=
'login'
,
renderer
=
'templates/login.pt'
)
@view_config
(
route_name
=
'login'
,
renderer
=
'templates/login.pt'
)
def
view_login
(
request
):
def
view_login
(
request
):
if
"g_state"
in
request
.
session
:
z
del
request
.
session
[
"g_state"
]
next_url
=
request
.
params
.
get
(
'next'
,
request
.
referrer
)
next_url
=
request
.
params
.
get
(
'next'
,
request
.
referrer
)
login_tpl
=
get_params
(
'login_tpl'
,
'templates/login.pt'
)
login_tpl
=
get_params
(
'login_tpl'
,
'templates/login.pt'
)
if
not
next_url
:
if
not
next_url
:
...
@@ -72,6 +75,7 @@ def view_login(request):
...
@@ -72,6 +75,7 @@ def view_login(request):
schema
=
Login
(
validator
=
login_validator
)
schema
=
Login
(
validator
=
login_validator
)
form
=
Form
(
schema
,
buttons
=
(
'login'
,))
form
=
Form
(
schema
,
buttons
=
(
'login'
,))
message
=
""
if
'login'
in
request
.
POST
:
if
'login'
in
request
.
POST
:
identity
=
request
.
POST
.
get
(
'username'
)
identity
=
request
.
POST
.
get
(
'username'
)
user
=
schema
.
user
=
User
.
get_by_identity
(
identity
)
user
=
schema
.
user
=
User
.
get_by_identity
(
identity
)
...
@@ -127,14 +131,8 @@ def view_login(request):
...
@@ -127,14 +131,8 @@ def view_login(request):
if
provider_name
==
"google"
:
if
provider_name
==
"google"
:
from
.base_google
import
googlesignin
from
.base_google
import
googlesignin
# user = googlesignin(request)
id_info
=
googlesignin
(
request
)
id_info
=
googlesignin
(
request
)
request
.
session
[
"id_info"
]
=
id_info
request
.
session
[
"id_info"
]
=
id_info
try
:
pass
except
ValueError
as
e
:
request
.
session
.
flash
(
e
,
'error'
)
raise
HTTPNotFound
else
:
else
:
id_info
=
None
id_info
=
None
...
@@ -142,12 +140,14 @@ def view_login(request):
...
@@ -142,12 +140,14 @@ def view_login(request):
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'
)
register_form
=
get_params
(
"register_form"
,
'register
-external
'
)
register_form
=
get_params
(
"register_form"
,
'register'
)
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
,
_query
=
id_info
),
detail
=
id_info
)
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
)
)
if
user
:
if
user
and
user
.
status
==
1
:
return
redirect_login
(
request
,
user
)
return
redirect_login
(
request
,
user
)
message
=
""
else
:
message
=
"User anda masih menunggu verifikasi atau lagi di blokir"
request
.
session
.
flash
(
message
,
"error"
)
login
=
""
login
=
""
return
render_to_response
(
login_tpl
,
return
render_to_response
(
login_tpl
,
dict
(
form
=
form
.
render
(),
dict
(
form
=
form
.
render
(),
...
@@ -299,9 +299,6 @@ def send_email_security_code(
...
@@ -299,9 +299,6 @@ def send_email_security_code(
or
'mail.username'
not
in
settings
:
or
'mail.username'
not
in
settings
:
return
return
# if 'base_url' not in settings:
# return
url
=
'{}password/{}'
.
format
(
url
=
'{}password/{}'
.
format
(
request
.
route_url
(
'home'
),
user
.
security_code
)
request
.
route_url
(
'home'
),
user
.
security_code
)
minutes
=
int
(
time_remain
.
seconds
/
60
)
minutes
=
int
(
time_remain
.
seconds
/
60
)
...
@@ -311,6 +308,19 @@ def send_email_security_code(
...
@@ -311,6 +308,19 @@ def send_email_security_code(
with
open
(
body_file
)
as
f
:
with
open
(
body_file
)
as
f
:
body_tpl
=
f
.
read
()
body_tpl
=
f
.
read
()
body
=
_
(
body_msg_id
,
default
=
body_tpl
,
mapping
=
data
)
body
=
_
(
body_msg_id
,
default
=
body_tpl
,
mapping
=
data
)
# body = request.localizer.translate(body)
# sender = '{} <{}>'.format(
# settings['mail.sender_name'], settings['mail.username'])
# subject = request.localizer.translate(_(subject))
# message = Message(
# subject=subject, sender=sender, recipients=[user.email], body=body)
# mailer = request.registry['mailer']
# mailer.send(message)
sending_mail
(
request
,
user
,
subject
,
body
)
def
sending_mail
(
request
,
user
,
subject
,
body
):
settings
=
get_settings
()
body
=
request
.
localizer
.
translate
(
body
)
body
=
request
.
localizer
.
translate
(
body
)
sender
=
'{} <{}>'
.
format
(
sender
=
'{} <{}>'
.
format
(
settings
[
'mail.sender_name'
],
settings
[
'mail.username'
])
settings
[
'mail.sender_name'
],
settings
[
'mail.username'
])
...
@@ -321,6 +331,21 @@ def send_email_security_code(
...
@@ -321,6 +331,21 @@ def send_email_security_code(
mailer
.
send
(
message
)
mailer
.
send
(
message
)
def
send_email_pending
(
request
,
user
,
subject
,
body_msg_id
,
body_default_file
):
settings
=
get_settings
()
if
'mail.sender_name'
not
in
settings
\
or
'mail.username'
not
in
settings
:
return
here
=
os
.
path
.
abspath
(
os
.
path
.
dirname
(
__file__
))
body_file
=
os
.
path
.
join
(
here
,
body_default_file
)
with
open
(
body_file
)
as
f
:
body_tpl
=
f
.
read
()
body
=
_
(
body_msg_id
,
default
=
body_tpl
)
sending_mail
(
request
,
user
,
subject
,
body
)
def
regenerate_security_code
(
user
):
def
regenerate_security_code
(
user
):
age
=
security_code_age
(
user
)
age
=
security_code_age
(
user
)
remain
=
one_hour
-
age
remain
=
one_hour
-
age
...
...
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