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 91d58e76
authored
Jun 17, 2022
by
aagusti
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
captcha berubah nama file jadi png
1 parent
b7afeeb8
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
173 additions
and
353 deletions
activate
opensipkd/base/views/__init__.py
opensipkd/base/views/base_views.py
opensipkd/base/views/register.py
opensipkd/base/views/register_external.py
opensipkd/base/views/templates/base.pt
opensipkd/base/views/templates/register.pt
opensipkd/base/views/user_login.py
opensipkd/base/views/widget_os.py
opensipkd/base/views/widgets/captcha.pt
activate
0 → 120000
View file @
91d58e7
env_base/bin/activate
\ No newline at end of file
\ No newline at end of file
opensipkd/base/views/__init__.py
View file @
91d58e7
...
@@ -9,6 +9,7 @@ from pyramid.httpexceptions import (
...
@@ -9,6 +9,7 @@ from pyramid.httpexceptions import (
HTTPSeeOther
)
HTTPSeeOther
)
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.interfaces
import
IRoutesMapper
from
pyramid.interfaces
import
IRoutesMapper
from
pyramid.response
import
Response
from
pyramid.view
import
view_config
from
pyramid.view
import
view_config
from
opensipkd.base
import
get_params
from
opensipkd.base
import
get_params
...
@@ -42,7 +43,7 @@ def not_found(request):
...
@@ -42,7 +43,7 @@ def not_found(request):
@view_config
(
context
=
HTTPInternalServerError
,
renderer
=
'templates/500.pt'
)
@view_config
(
context
=
HTTPInternalServerError
,
renderer
=
'templates/500.pt'
)
def
internal_server_error
(
request
):
def
internal_server_error
(
request
):
return
{}
return
{}
# response = Response('
Internal error
')
# response = Response('
Terjadi kesahala
')
# response.status_int = 500
# response.status_int = 500
# return response
# return response
...
...
opensipkd/base/views/base_views.py
View file @
91d58e7
import
os
import
re
from
datetime
import
datetime
from
datetime
import
datetime
from
dateutil.relativedelta
import
relativedelta
from
dateutil.relativedelta
import
relativedelta
from
opensipkd.tools.captcha
import
get_captcha
from
pyramid.httpexceptions
import
HTTPFound
from
pyramid.httpexceptions
import
HTTPFound
from
..
import
DBSession
,
get_params
from
..
import
DBSession
,
get_params
from
opensipkd.tools
import
dmy
,
dmy_to_date
,
get_settings
from
opensipkd.tools
import
dmy
,
dmy_to_date
,
get_settings
,
get_ext
import
colander
import
colander
from
deform
import
(
widget
,
Form
,
ValidationFailure
,
)
from
deform
import
(
widget
,
Form
,
ValidationFailure
,
)
from
email.utils
import
parseaddr
from
email.utils
import
parseaddr
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
,
btn_close
,
btn_delete
from
opensipkd.tools.buttons
import
btn_save
,
btn_cancel
,
btn_close
,
btn_delete
from
..models
import
User
class
BaseView
(
object
):
class
BaseView
(
object
):
def
__init__
(
self
,
request
):
def
__init__
(
self
,
request
):
...
@@ -94,7 +99,7 @@ class BaseView(object):
...
@@ -94,7 +99,7 @@ class BaseView(object):
self
.
jenis
=
'jenis'
in
self
.
params
and
self
.
params
[
self
.
jenis
=
'jenis'
in
self
.
params
and
self
.
params
[
'jenis'
]
or
self
.
jenis
'jenis'
]
or
self
.
jenis
self
.
ses
[
'jenis'
]
=
self
.
jenis
self
.
ses
[
'jenis'
]
=
self
.
jenis
self
.
list_route
=
''
self
.
list_route
=
'
home
'
self
.
list_col_defs
=
""
self
.
list_col_defs
=
""
self
.
list_cols
=
""
self
.
list_cols
=
""
self
.
list_buttons
=
'btn_view, btn_add, btn_edit, btn_delete, '
\
self
.
list_buttons
=
'btn_view, btn_add, btn_edit, btn_delete, '
\
...
@@ -114,7 +119,9 @@ class BaseView(object):
...
@@ -114,7 +119,9 @@ class BaseView(object):
self
.
home
=
self
.
req
.
route_url
(
'home'
)[:
-
1
]
self
.
home
=
self
.
req
.
route_url
(
'home'
)[:
-
1
]
self
.
buttons
=
None
self
.
buttons
=
None
self
.
headers
=
None
self
.
headers
=
None
self
.
bindings
=
None
self
.
bindings
=
{}
self
.
autocomplete
=
'on'
# self.captcha = ""
def
route_list
(
self
,
msg
=
None
,
error
=
""
):
def
route_list
(
self
,
msg
=
None
,
error
=
""
):
if
msg
:
if
msg
:
...
@@ -133,12 +140,12 @@ class BaseView(object):
...
@@ -133,12 +140,12 @@ class BaseView(object):
def
get_form
(
self
,
class_form
,
row
=
None
,
buttons
=
(
btn_save
,
btn_cancel
),
**
bindings
):
def
get_form
(
self
,
class_form
,
row
=
None
,
buttons
=
(
btn_save
,
btn_cancel
),
**
bindings
):
buttons
=
self
.
buttons
and
self
.
buttons
or
buttons
buttons
=
self
.
buttons
and
self
.
buttons
or
buttons
bindings
=
self
.
bindings
and
self
.
bindings
or
bindings
bindings
=
self
.
bindings
and
self
.
bindings
or
bindings
schema
=
class_form
(
validator
=
self
.
form_validator
)
schema
=
class_form
(
validator
=
self
.
form_validator
)
#
schema
=
schema
.
bind
(
request
=
self
.
req
,
**
bindings
)
schema
=
schema
.
bind
(
request
=
self
.
req
,
**
bindings
)
schema
.
request
=
self
.
req
schema
.
request
=
self
.
req
if
row
:
if
row
:
schema
.
deserialize
(
row
)
schema
.
deserialize
(
row
)
return
Form
(
schema
,
buttons
=
buttons
)
return
Form
(
schema
,
buttons
=
buttons
,
autocomplete
=
self
.
autocomplete
)
def
session_failed
(
self
,
session_name
):
def
session_failed
(
self
,
session_name
):
r
=
dict
(
form
=
self
.
req
.
session
[
session_name
])
r
=
dict
(
form
=
self
.
req
.
session
[
session_name
])
...
@@ -187,7 +194,8 @@ class BaseView(object):
...
@@ -187,7 +194,8 @@ class BaseView(object):
return
self
.
route_list
()
return
self
.
route_list
()
form
=
self
.
before_add
(
form
)
form
=
self
.
before_add
(
form
)
table
=
self
.
get_item_table
()
table
=
self
.
get_item_table
()
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
return
dict
(
form
=
form
.
render
(),
table
=
table
and
table
.
render
()
or
None
,
scripts
=
self
.
form_scripts
)
def
before_save
(
self
,
row
,
values
):
def
before_save
(
self
,
row
,
values
):
return
row
return
row
...
@@ -196,6 +204,7 @@ class BaseView(object):
...
@@ -196,6 +204,7 @@ class BaseView(object):
pass
pass
def
save
(
self
,
values
,
user
,
row
=
None
):
def
save
(
self
,
values
,
user
,
row
=
None
):
self
.
ses
[
"old_email"
]
=
user
and
user
.
email
or
None
if
not
row
:
if
not
row
:
row
=
self
.
table
()
row
=
self
.
table
()
row
.
created
=
datetime
.
now
()
row
.
created
=
datetime
.
now
()
...
@@ -246,7 +255,6 @@ class BaseView(object):
...
@@ -246,7 +255,6 @@ class BaseView(object):
row
=
self
.
query_id
()
.
first
()
row
=
self
.
query_id
()
.
first
()
if
not
row
:
if
not
row
:
return
self
.
id_not_found
()
return
self
.
id_not_found
()
form
=
self
.
get_form
(
self
.
edit_schema
)
form
=
self
.
get_form
(
self
.
edit_schema
)
if
request
.
POST
:
if
request
.
POST
:
if
'save'
in
request
.
POST
:
if
'save'
in
request
.
POST
:
...
@@ -301,3 +309,36 @@ def email_validator(node, value):
...
@@ -301,3 +309,36 @@ def email_validator(node, value):
name
,
email
=
parseaddr
(
value
)
name
,
email
=
parseaddr
(
value
)
if
not
email
or
email
.
find
(
'@'
)
<
0
:
if
not
email
or
email
.
find
(
'@'
)
<
0
:
raise
colander
.
Invalid
(
node
,
'Invalid email format'
)
raise
colander
.
Invalid
(
node
,
'Invalid email format'
)
class
Store
(
dict
):
def
preview_url
(
self
,
name
):
return
""
store
=
Store
()
reg_exts
=
[
'.png'
,
'.jpg'
,
'.pdf'
,
'.jpeg'
]
def
image_validator
(
node
,
value
):
ext
=
get_ext
(
value
[
"filename"
])
if
ext
not
in
reg_exts
:
raise
colander
.
Invalid
(
node
,
f
'Extension harus salahsatu dari {reg_exts}'
)
username_re
=
re
.
compile
(
'^[a-z0-9_]{6,16}$'
,
re
.
IGNORECASE
)
def
user_name_validator
(
node
,
value
):
if
not
username_re
.
match
(
value
):
raise
colander
.
Invalid
(
node
,
'Value must be between 6 and 16 characters and can only contain uppercase and lowercase alphanumeric characters or an underscore'
)
def
need_captcha
():
is_captcha
=
get_params
(
"reg_captcha"
)
return
is_captcha
==
'1'
or
is_captcha
==
"True"
or
is_captcha
==
"true"
or
is_captcha
==
True
def
get_url_captcha
(
request
):
captcha
=
get_captcha
(
request
)
return
os
.
path
.
join
(
request
.
route_url
(
'home'
),
'captcha'
,
captcha
)
\ No newline at end of file
\ No newline at end of file
opensipkd/base/views/register.py
View file @
91d58e7
...
@@ -27,36 +27,29 @@ Link dalam module registrasi:
...
@@ -27,36 +27,29 @@ Link dalam module registrasi:
5. Form Upload template
5. Form Upload template
"""
"""
import
os
import
os
import
re
from
email.utils
import
parseaddr
from
email.utils
import
parseaddr
import
colander
import
colander
from
deform
import
(
Form
,
widget
,
ValidationFailure
,
Button
,
FileData
)
from
deform
import
(
widget
,
ValidationFailure
,
Button
,
FileData
)
from
opensipkd.base
import
get_params
from
opensipkd.tools
import
Upload
from
opensipkd.tools
import
get_settings
,
get_ext
,
Upload
from
opensipkd.tools.captcha
import
get_captcha
from
opensipkd.tools.captcha
import
get_captcha
from
pyramid.httpexceptions
import
HTTPFound
from
pyramid.httpexceptions
import
HTTPFound
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.i18n
import
TranslationStringFactory
from
pyramid.view
import
view_config
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.views.user
import
insert
as
save_user
from
opensipkd.base
import
get_params
from
opensipkd.base.views.user
import
insert
as
save_user
,
email_validator
from
opensipkd.base.views.user_login
import
send_email_security_code
from
opensipkd.base.views.user_login
import
send_email_security_code
from
.user_group
import
save
as
save_groups
from
.
import
widget_os
from
..models
import
User
,
DBSession
,
Partner
,
Group
,
UserGroup
from
.base_views
import
store
,
image_validator
,
need_captcha
,
get_url_captcha
from
..models
import
User
,
DBSession
,
Partner
,
UserGroup
from
..views
import
BaseView
from
..views
import
BaseView
_
=
TranslationStringFactory
(
'user'
)
_
=
TranslationStringFactory
(
'user'
)
def
email_validator
(
node
,
value
):
class
AddSchema
(
colander
.
Schema
):
name
,
email
=
parseaddr
(
value
)
if
not
email
or
email
.
find
(
'@'
)
<
0
:
raise
colander
.
Invalid
(
node
,
'Invalid email format'
)
class
NamaSchema
(
colander
.
Schema
):
nama
=
colander
.
SchemaNode
(
nama
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
oid
=
"nama"
)
oid
=
"nama"
)
...
@@ -78,109 +71,37 @@ class NamaSchema(colander.Schema):
...
@@ -78,109 +71,37 @@ class NamaSchema(colander.Schema):
validator
=
email_validator
,
validator
=
email_validator
,
oid
=
"email"
)
oid
=
"email"
)
def
after_bind
(
self
,
schema
,
kw
):
class
Store
(
dict
):
request
=
kw
.
get
(
"request"
)
def
preview_url
(
self
,
name
):
is_id_card
=
get_params
(
'reg_idcard'
)
return
""
if
is_id_card
==
'1'
or
is_id_card
==
"True"
or
is_id_card
==
"true"
:
self
[
"kode"
]
=
colander
.
SchemaNode
(
store
=
Store
()
reg_exts
=
[
'.png'
,
'.jpg'
,
'.pdf'
,
'.jpeg'
]
username_re
=
re
.
compile
(
'^[a-z0-9_]{6,16}$'
,
re
.
IGNORECASE
)
def
user_name_validator
(
node
,
value
):
if
not
username_re
.
match
(
value
):
raise
colander
.
Invalid
(
node
,
'Value must be between 6 and 16 characters and can only contain uppercase and lowercase alphanumeric characters or an underscore'
)
def
id_card_validator
(
node
,
value
):
ext
=
get_ext
(
value
[
"filename"
])
if
ext
not
in
reg_exts
:
raise
colander
.
Invalid
(
node
,
f
'Extension harus salahsatu dari {reg_exts}'
)
class
RegSchema
(
colander
.
Schema
):
user_name
=
colander
.
SchemaNode
(
colander
.
String
(),
validator
=
user_name_validator
,
# colander.Length(max=16, max_err='Maximum ${max} Digit',
# min=6, min_err='Minimimum ${min} Digit'),
oid
=
"user_name"
)
kode
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
validator
=
colander
.
Length
(
max
=
18
,
max_err
=
'Maximum ${max} Digit'
,
widget
=
widget
.
TextInputWidget
(),
min
=
15
,
min_err
=
'Minimimum ${min} Digit'
),
title
=
"No.Identitas/NIK"
,
title
=
"No.Identitas/NIK"
,
# missing=colander.drop,
oid
=
"kode"
)
oid
=
"kode"
)
self
[
"doc_id_card"
]
=
colander
.
SchemaNode
(
detail
=
NamaSchema
()
doc_id_card
=
colander
.
SchemaNode
(
FileData
(),
FileData
(),
widget
=
widget
.
FileUploadWidget
(
store
),
widget
=
widget
.
FileUploadWidget
(
store
),
validator
=
id_card_validator
)
title
=
"Photo Identitas"
,
validator
=
image_validator
)
# captcha = colander.SchemaNode(
if
not
request
.
user
and
need_captcha
():
# colander.String(),
self
[
"captcha"
]
=
colander
.
SchemaNode
(
# oid="captcha")
def
after_bin
(
self
,
schema
,
kwargs
):
request
=
kwargs
[
"request"
]
if
get_params
(
'reg_idcard'
)
!=
'1'
:
del
self
[
"doc_id_card"
]
if
get_params
(
'reg_captcha'
)
!=
'1'
:
del
self
[
"captcha"
]
class
RegEditSchema
(
colander
.
Schema
):
user_name
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
widget
=
widget
.
TextInputWidget
(
readonly
=
True
),
widget
=
widget_os
.
CaptchaWidget
(
url
=
get_url_captcha
(
request
)),
missing
=
colander
.
drop
,
oid
=
"captcha"
,
title
=
"Captcha"
)
oid
=
"user_name"
)
kode
=
colander
.
SchemaNode
(
if
request
.
user
and
request
.
user
.
id
:
colander
.
String
(),
self
[
"password"
]
=
colander
.
SchemaNode
(
widget
=
widget
.
TextInputWidget
(
readonly
=
True
),
title
=
"No.Identitas/NIK"
,
missing
=
colander
.
drop
,
oid
=
"kode"
)
detail
=
NamaSchema
()
password
=
colander
.
SchemaNode
(
colander
.
String
(),
colander
.
String
(),
widget
=
widget
.
PasswordWidget
(
size
=
20
),
widget
=
widget
.
PasswordWidget
()
# validator = user_name_validator,
,
oid
=
"password"
,
title
=
"Password"
)
title
=
"Password"
,
oid
=
"password"
)
id
=
colander
.
SchemaNode
(
colander
.
Integer
(),
missing
=
colander
.
drop
,
widget
=
widget
.
HiddenWidget
(
readonly
=
True
),
)
# doc_id_card = colander.SchemaNode(
# FileData(),
# widget=widget.String())
def
after_bin
(
self
,
schema
,
kwargs
):
request
=
kwargs
[
"request"
]
self
.
kode
[
"widget"
]
=
widget
.
TextInputWidget
(
readonly
=
True
)
if
"kode"
not
in
request
.
params
:
self
.
kode
[
"widget"
]
=
widget
.
TextInputWidget
()
if
"email"
in
request
.
params
:
self
.
detail
.
email
[
"widget"
]
=
widget
.
TextInputWidget
(
readonly
=
True
)
self
.
detail
.
email
[
"missing"
]
=
colander
.
drop
if
request
.
get_params
(
'reg_id_card'
)
!=
'0'
:
class
EditSchema
(
AddSchema
):
del
self
[
"doc_id_card"
]
pass
# def user_name(user_name):
# return User.get_by_identity(email)
def
user_found
(
identity
):
def
user_found
(
identity
):
...
@@ -213,16 +134,32 @@ def show_error(request, msg):
...
@@ -213,16 +134,32 @@ def show_error(request, msg):
# 3. Cek NIK (kode) pada Partner jika ada dan Partner.id beda reject
# 3. Cek NIK (kode) pada Partner jika ada dan Partner.id beda reject
def
form_validator
(
form
,
value
):
def
reg_buttons
():
value
.
update
(
value
[
'detail'
])
btn_register
=
Button
(
name
=
'save'
,
css_class
=
'btn-success'
,
type
=
"submit"
,
title
=
"Register"
)
btn_cancel
=
Button
(
name
=
'batal'
,
css_class
=
'btn-primary'
,
type
=
"submit"
)
return
btn_cancel
,
btn_register
class
Registrasi
(
BaseView
):
def
__init__
(
self
,
request
):
super
(
Registrasi
,
self
)
.
__init__
(
request
)
self
.
autocomplete
=
"off"
self
.
buttons
=
reg_buttons
()
self
.
add_schema
=
AddSchema
self
.
edit_schema
=
EditSchema
self
.
table
=
User
self
.
list_route
=
"home"
def
form_validator
(
self
,
form
,
value
):
form_exc
=
colander
.
Invalid
(
form
,
''
)
form_exc
=
colander
.
Invalid
(
form
,
''
)
def
err_captcha
():
def
err_captcha
():
msg
=
'Captcha harus diisi'
msg
=
'Captcha harus diisi'
raise
colander
.
Invalid
(
form
[
'captcha'
],
msg
)
raise
colander
.
Invalid
(
form
[
'captcha'
],
msg
)
def
err_email
():
def
err_email
():
exc
=
colander
.
Invalid
(
exc
=
colander
.
Invalid
(
form
[
'detail'
]
[
'email'
],
'e-mail
%
s sudah ada yang menggunakan'
%
value
[
'email'
])
form
[
'email'
],
'e-mail
%
s sudah ada yang menggunakan'
%
value
[
'email'
])
raise
exc
raise
exc
def
err_user
():
def
err_user
():
...
@@ -230,21 +167,26 @@ def form_validator(form, value):
...
@@ -230,21 +167,26 @@ def form_validator(form, value):
form
[
'user_name'
],
'User name
%
s sudah ada yang menggunakan'
%
value
[
'user_name'
])
form
[
'user_name'
],
'User name
%
s sudah ada yang menggunakan'
%
value
[
'user_name'
])
def
err_nik
():
def
err_nik
():
if
"kode"
in
form
:
raise
colander
.
Invalid
(
raise
colander
.
Invalid
(
form
[
'kode'
],
'NIK
%
s sudah ada yang menggunakan'
%
value
[
'kode'
])
form
[
'kode'
],
'NIK
%
s sudah ada yang menggunakan'
%
value
[
'kode'
])
else
:
raise
colander
.
Invalid
(
form
[
'mobile'
],
'Mobile
%
s sudah ada yang menggunakan'
%
value
[
'kode'
])
def
err_login
():
def
err_login
():
raise
colander
.
Invalid
(
raise
colander
.
Invalid
(
form
,
'User atau Password tidak sesuai'
)
form
[
"password"
]
,
'User atau Password tidak sesuai'
)
request
=
form
.
request
request
=
form
.
request
# Check user_name
detail
=
value
[
'detail'
]
email
=
detail
[
'email'
]
is_logged
=
form
.
request
.
user
is_logged
=
form
.
request
.
user
email
=
value
[
"email"
]
if
"user_name"
not
in
value
or
not
value
[
"user_name"
]:
value
[
"user_name"
]
=
value
[
"mobile"
]
if
'user_name'
in
value
:
if
'user_name'
in
value
:
user_name
=
value
[
"user_name"
]
# Check Data User
# Check Data User
user_name
=
value
[
"user_name"
]
user
=
user_found
(
user_name
)
user
=
user_found
(
user_name
)
if
user
and
not
is_logged
:
if
user
and
not
is_logged
:
err_user
()
err_user
()
...
@@ -256,14 +198,14 @@ def form_validator(form, value):
...
@@ -256,14 +198,14 @@ def form_validator(form, value):
user
=
user_found
(
email
)
user
=
user_found
(
email
)
if
user
and
not
is_logged
:
if
user
and
not
is_logged
:
err_email
()
err_email
()
if
user
and
is_logged
:
if
user
and
is_logged
:
if
user
.
id
!=
is_logged
.
id
:
if
user
.
id
!=
is_logged
.
id
:
err_email
()
err_email
()
# Check Data Partner
# Check Data Partner
if
'id'
in
request
.
matchdict
:
if
request
.
user
:
uid
=
request
.
matchdict
[
'id'
]
q
=
DBSession
.
query
(
Partner
)
.
filter_by
(
email
=
request
.
user
.
email
)
q
=
DBSession
.
query
(
Partner
)
.
filter_by
(
id
=
uid
)
partner
=
q
.
first
()
partner
=
q
.
first
()
else
:
else
:
partner
=
None
partner
=
None
...
@@ -275,7 +217,9 @@ def form_validator(form, value):
...
@@ -275,7 +217,9 @@ def form_validator(form, value):
elif
found
:
elif
found
:
err_email
()
err_email
()
# CEK NIK apakah Sudah Ada di tabel Partner?
if
"kode"
not
in
value
or
not
value
[
"kode"
]:
value
[
"kode"
]
=
value
[
"mobile"
]
if
'kode'
in
value
:
if
'kode'
in
value
:
found_nik
=
nik_found
(
value
[
'kode'
])
found_nik
=
nik_found
(
value
[
'kode'
])
if
partner
:
if
partner
:
...
@@ -285,209 +229,87 @@ def form_validator(form, value):
...
@@ -285,209 +229,87 @@ def form_validator(form, value):
err_nik
()
err_nik
()
# Check Captcha jika registrasi
# Check Captcha jika registrasi
if
not
request
.
user
:
if
not
request
.
user
and
need_captcha
():
if
get_params
(
"reg_captcha"
)
==
'1'
:
if
'captcha'
not
in
value
or
not
value
[
'captcha'
]
\
if
'captcha'
not
in
value
or
not
value
[
'captcha'
]
\
or
'captcha'
not
in
request
.
session
or
not
request
.
session
[
'captcha'
]:
or
'captcha'
not
in
request
.
session
or
not
request
.
session
[
'captcha'
]:
err_captcha
()
err_captcha
()
captcha
=
'captcha'
in
value
and
value
[
'captcha'
]
.
upper
()
or
None
captcha
=
'captcha'
in
value
and
value
[
'captcha'
]
.
upper
()
or
None
if
not
captcha
or
captcha
!=
request
.
session
[
'captcha'
]:
if
not
captcha
or
captcha
!=
request
.
session
[
'captcha'
]:
del
request
.
session
[
"captcha"
]
err_captcha
()
err_captcha
()
# Cek Old Password
if
'password'
in
value
:
if
'password'
in
value
:
user
=
form
.
request
.
user
user
=
form
.
request
.
user
if
not
user
or
not
UserService
.
check_password
(
user
,
value
[
'password'
]):
if
not
user
or
not
UserService
.
check_password
(
user
,
value
[
'password'
]):
err_login
()
err_login
()
def
before_save
(
self
,
row
,
values
):
if
"doc_id_card"
not
in
values
or
not
values
[
"doc_id_card"
]:
return
row
def
get_form
(
request
,
class_form
,
buttons
=
(
'batal'
,
'simpan'
),
path
=
get_params
(
'reg_folder'
,
'/tmp/registrasi'
)
validator
=
form_validator
):
if
not
os
.
path
.
exists
(
path
):
schema
=
class_form
(
validator
=
validator
)
os
.
makedirs
(
path
)
schema
=
schema
.
bind
(
request
=
request
)
schema
.
request
=
request
return
Form
(
schema
,
buttons
=
buttons
)
def
save_partner
(
values
,
row
=
None
):
upload
=
Upload
(
path
)
if
not
row
:
values
[
"doc_id_card"
]
=
upload
.
save
(
self
.
req
,
'upload'
)
row
=
Partner
()
row
.
doc_id_card
=
values
[
"doc_id_card"
]
row
.
is_vendor
=
0
row
.
is_customer
=
1
row
.
status
=
0
row
.
from_dict
(
values
)
DBSession
.
add
(
row
)
DBSession
.
flush
()
return
row
return
row
def
before_edit
(
self
,
form
):
partner
=
DBSession
.
query
(
Partner
)
.
\
join
(
User
,
Partner
.
email
==
User
.
email
)
.
\
filter
(
User
.
id
==
self
.
req
.
user
.
id
)
.
first
()
if
partner
:
values
=
{}
for
f
in
[
"nama"
,
"alamat_1"
,
"alamat_2"
,
"mobile"
,
"email"
]:
values
[
f
]
=
hasattr
(
partner
,
f
)
and
getattr
(
partner
,
f
)
or
""
form
.
set_appstruct
(
values
)
return
form
def
save_request
(
values
,
request
,
row
=
None
):
def
after_save
(
self
,
row
,
values
):
values
.
update
(
values
[
'detail'
])
if
"old_email"
in
self
.
ses
and
self
.
ses
[
"old_email"
]:
# disini yang di cek id partner
email
=
self
.
ses
[
"old_email"
]
if
'id'
in
request
.
matchdict
:
del
self
.
ses
[
"old_email"
]
values
[
'id'
]
=
request
.
matchdict
[
'id'
]
else
:
email
=
row
.
email
# Check registrant apakah sudah punya user atau belum
partner
=
Partner
.
query_email
(
email
)
.
first
()
if
request
.
user
:
if
not
partner
:
# Jika sudah punya user masukan ke group esppt
partner
=
Partner
()
user
=
request
.
user
partner
.
is_vendor
=
0
user_group
=
UserGroup
.
get_by_user
(
user
)
partner
.
is_customer
=
1
partner
.
status
=
0
if
user
.
email
!=
values
[
'email'
]:
partner
.
from_dict
(
values
)
user
.
email
=
values
[
'email'
]
DBSession
.
add
(
partner
)
DBSession
.
add
(
user
)
DBSession
.
flush
()
DBSession
.
flush
()
values
[
'status'
]
=
1
else
:
# Jika Tidak Tambahkan User dan Kirim Email
user_
=
dict
(
user_name
=
values
[
'user_name'
],
email
=
values
[
'email'
])
user
,
remain
=
save_user
(
request
,
user_
)
# if not external identity send security code
if
'external'
not
in
request
.
session
or
not
request
.
session
[
'external'
]:
send_email_security_code
(
request
,
user
,
remain
,
'Welcome new user'
,
'email-new-user'
,
'email-new-user.tpl'
)
data
=
dict
(
email
=
user
.
email
)
ts
=
_
(
'user-added'
,
default
=
'${email} berhasil ditambahkan dan email untuk ubah '
\
'kata kunci sudah dikirim.'
,
mapping
=
data
)
request
.
session
.
flash
(
ts
)
if
row
:
if
row
.
email
==
row
.
kode
:
values
[
'kode'
]
=
values
[
'email'
]
else
:
if
'kode'
not
in
values
and
not
values
[
'kode'
]:
values
[
'kode'
]
=
values
[
'email'
]
values
[
'user_id'
]
=
user
.
id
row
=
save_partner
(
values
,
row
)
##Untuk SIMKEL##
# settings = get_settings()
# if 'default_group' in settings:
# groups = settings['default_group'].split(',')
# for group in groups:
# group_data = Group.query_group_name(group).first()
# if not group_data:
# raise custom_error(-1, "Group Not Found.")
# data = dict(group_id=group_data.id,
# user_id=user.id)
# save_groups(data, None)
return
row
return
row
@view_config
(
route_name
=
'register'
,
renderer
=
'templates/form_input.pt'
)
def
route_list
(
request
):
return
HTTPFound
(
location
=
request
.
route_url
(
'home'
))
def
reg_buttons
():
btn_register
=
Button
(
name
=
'register'
,
css_class
=
'btn-success'
,
type
=
"submit"
)
btn_cancel
=
Button
(
name
=
'batal'
,
css_class
=
'btn-primary'
,
type
=
"submit"
)
return
btn_cancel
,
btn_register
class
RegistrasiAdd
(
BaseView
):
@view_config
(
route_name
=
'register'
,
renderer
=
'templates/register.pt'
)
def
view_add
(
self
):
def
view_add
(
self
):
request
=
self
.
req
request
=
self
.
req
self
.
bindings
=
dict
(
user
=
None
)
if
request
.
user
:
if
request
.
user
:
return
HTTPFound
(
location
=
request
.
route_url
(
"profile"
))
return
HTTPFound
(
location
=
request
.
route_url
(
"profile"
))
form
=
get_form
(
request
,
RegSchema
,
reg_buttons
())
# self.captcha = need_captcha() and get_captcha(request) or ""
captcha
=
get_params
(
"reg_captcha"
)
and
get_captcha
(
request
)
or
None
return
super
(
Registrasi
,
self
)
.
view_add
()
if
request
.
POST
:
if
'register'
in
request
.
POST
:
# input_file = request.POST['upload'].file
# filename = request.POST['upload'].filename.lower()
# ext = get_ext(filename).lower()
# raise ext
controls
=
request
.
POST
.
items
()
try
:
controls
=
form
.
validate
(
controls
)
except
ValidationFailure
as
e
:
form
.
set_appstruct
(
e
.
cstruct
)
return
dict
(
form
=
form
.
render
(),
captcha
=
captcha
,
scripts
=
""
)
values
=
dict
(
controls
)
path
=
get_params
(
'reg_folder'
,
'/tmp/registrasi'
)
@view_config
(
route_name
=
'profile'
,
renderer
=
'templates/form_input.pt'
,
if
not
os
.
path
.
exists
(
path
):
os
.
makedirs
(
path
)
upload
=
Upload
(
path
)
values
[
"doc_id_card"
]
=
upload
.
save
(
request
,
'upload'
)
save_request
(
values
,
request
)
request
.
session
.
flash
(
'Registrasi Sukses.'
)
if
'captcha'
in
request
.
session
:
del
(
request
.
session
[
'captcha'
])
return
route_list
(
request
)
values
=
{}
if
request
.
user
:
values
[
'email'
]
=
request
.
user
.
email
form
.
set_appstruct
(
values
)
return
dict
(
form
=
form
.
render
(),
captcha
=
get_captcha
(
request
),
scripts
=
""
)
@view_config
(
route_name
=
'profile'
,
renderer
=
'templates/register.pt'
,
permission
=
'view'
)
permission
=
'view'
)
def
es_reg_edt
(
self
):
def
es_reg_edt
(
self
):
request
=
self
.
req
request
=
self
.
req
register_form
=
get_params
(
"register_form"
)
register_form
=
get_params
(
"register_form"
)
self
.
bindings
=
dict
(
user
=
self
.
req
.
user
)
if
register_form
:
if
register_form
:
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
))
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
))
return
super
(
Registrasi
,
self
)
.
view_edit
()
ses
=
request
.
session
def
query_id
(
self
):
query
=
query_id
(
request
)
return
DBSession
.
query
(
User
)
.
\
row
=
query
.
first
()
filter
(
User
.
id
==
self
.
req
.
user
.
id
)
form
=
get_form
(
request
,
RegEditSchema
)
if
request
.
POST
:
if
'simpan'
in
request
.
POST
:
controls
=
request
.
POST
.
items
()
try
:
controls
=
form
.
validate
(
controls
)
except
ValidationFailure
as
e
:
values
=
e
.
cstruct
values
[
'kode'
]
=
row
.
kode
form
.
set_appstruct
(
values
)
return
dict
(
form
=
form
)
save_request
(
dict
(
controls
),
request
,
row
)
request
.
session
.
flash
(
'Sukses Update Profile.'
)
return
route_list
(
request
)
if
row
:
values
=
row
.
to_dict
()
values
[
'detail'
]
=
row
.
to_dict
()
else
:
values
=
dict
(
detail
=
dict
(
email
=
request
.
user
.
email
))
form
.
set_appstruct
(
values
)
return
dict
(
form
=
form
.
render
(),
captcha
=
get_captcha
(
request
),
scripts
=
""
)
########
# Edit #
########
def
query_id
(
request
):
return
DBSession
.
query
(
Partner
)
.
\
join
(
User
,
Partner
.
email
==
User
.
email
)
.
\
filter
(
User
.
id
==
request
.
user
.
id
)
def
id_not_found
(
request
):
def
id_not_found
(
self
):
msg
=
'Register ID
%
s Tidak Ditemukan.'
%
request
.
matchdict
[
'id'
]
return
request
.
session
.
flash
(
msg
,
'error'
)
return
route_list
(
request
)
opensipkd/base/views/register_external.py
View file @
91d58e7
...
@@ -12,7 +12,7 @@ from pyramid.view import view_config
...
@@ -12,7 +12,7 @@ from pyramid.view import view_config
from
ziggurat_foundations.models.services.user
import
UserService
from
ziggurat_foundations.models.services.user
import
UserService
# from . import get_login_headers
# from . import get_login_headers
from
.register
import
mobile_found_partner
,
save_partner
,
nik_found
#
from .register import mobile_found_partner, save_partner, nik_found
from
.user_group
import
save
as
save_groups
from
.user_group
import
save
as
save_groups
from
..models
import
DBSession
,
Partner
,
Group
,
ExternalIdentity
,
User
,
ExternalIdentityService
from
..models
import
DBSession
,
Partner
,
Group
,
ExternalIdentity
,
User
,
ExternalIdentityService
from
opensipkd.tools
import
get_settings
from
opensipkd.tools
import
get_settings
...
...
opensipkd/base/views/templates/base.pt
View file @
91d58e7
...
@@ -105,6 +105,7 @@
...
@@ -105,6 +105,7 @@
<a
href=
"#"
class=
"dropdown-toggle txt-color-white"
data-toggle=
"dropdown"
>
My Account
<b
class=
"caret"
></b></a>
<a
href=
"#"
class=
"dropdown-toggle txt-color-white"
data-toggle=
"dropdown"
>
My Account
<b
class=
"caret"
></b></a>
<ul
class=
"dropdown-menu"
>
<ul
class=
"dropdown-menu"
>
<li><a
style=
"text-transform:capitalize"
href=
"${home}logout"
>
${request.user.nice_username()} Logout
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${home}logout"
>
${request.user.nice_username()} Logout
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${home}profile"
>
Profile
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${home}password"
>
Ubah password
</a></li>
<li><a
style=
"text-transform:capitalize"
href=
"${home}password"
>
Ubah password
</a></li>
<li
tal:condition=
"request.user.api_key"
>
<li
tal:condition=
"request.user.api_key"
>
<a
style=
"text-transform:capitalize"
href=
"${home}recreate-api-key"
>
<a
style=
"text-transform:capitalize"
href=
"${home}recreate-api-key"
>
...
...
opensipkd/base/views/templates/register.pt
View file @
91d58e7
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
tal:define=
"home request.route_url('home')[:-1];"
>
tal:define=
"home request.route_url('home')[:-1];"
>
<div
metal:fill-slot=
"scripts"
>
<div
metal:fill-slot=
"scripts"
>
<script>
<script
tal:condition=
"${captcha}"
>
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
$
(
"#captcha"
).
parent
().
prepend
(
'<img style="height:30px; width:auto; margin-bottom:5px;'
+
$
(
"#captcha"
).
parent
().
prepend
(
'<img style="height:30px; width:auto; margin-bottom:5px;'
+
'" src="${home}/captcha/${captcha}.png">'
)
'" src="${home}/captcha/${captcha}.png">'
)
...
@@ -14,7 +14,6 @@ tal:define="home request.route_url('home')[:-1];">
...
@@ -14,7 +14,6 @@ tal:define="home request.route_url('home')[:-1];">
});
});
});
});
</script>
</script>
</div>
</div>
</html>
</html>
opensipkd/base/views/user_login.py
View file @
91d58e7
...
@@ -114,7 +114,7 @@ def view_login(request):
...
@@ -114,7 +114,7 @@ def view_login(request):
return
redirect_login
(
request
,
user
)
return
redirect_login
(
request
,
user
)
elif
'register'
in
request
.
POST
:
elif
'register'
in
request
.
POST
:
register_form
=
get_params
(
"register_form"
,
'register
-external
'
)
register_form
=
get_params
(
"register_form"
,
'register'
)
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
))
return
HTTPFound
(
location
=
request
.
route_url
(
register_form
))
elif
'login failed'
in
request
.
session
:
elif
'login failed'
in
request
.
session
:
...
...
opensipkd/base/views/widget_os.py
View file @
91d58e7
...
@@ -247,55 +247,23 @@ class CaptchaWidget(Widget):
...
@@ -247,55 +247,23 @@ class CaptchaWidget(Widget):
If true, during deserialization, strip the value of leading
If true, during deserialization, strip the value of leading
and trailing whitespace (default ``True``).
and trailing whitespace (default ``True``).
mask
A :term:`jquery.maskedinput` input mask, as a string.
a - Represents an alpha character (A-Z,a-z)
9 - Represents a numeric character (0-9)
* - Represents an alphanumeric character (A-Z,a-z,0-9)
All other characters in the mask will be considered mask
literals.
Example masks:
Date: 99/99/9999
US Phone: (999) 999-9999
US SSN: 999-99-9999
When this option is used, the :term:`jquery.maskedinput`
library must be loaded into the page serving the form for the
mask argument to have any effect. See :ref:`masked_input`.
mask_placeholder
The placeholder for required nonliteral elements when a mask
is used. Default: ``_`` (underscore).
"""
"""
template
=
"opensipkd.base:views/widgets/captcha"
template
=
"opensipkd.base:views/widgets/captcha
.pt
"
readonly_template
=
"
opensipkd.base:views/widgets/captcha
"
readonly_template
=
"
textinput
"
strip
=
True
strip
=
True
# mask = None
# mask_placeholder = "_"
requirements
=
()
requirements
=
()
# def __init__(self, **kw):
def
__init__
(
self
,
**
kw
):
# super(CaptchaWidget, self).__init__(**kw)
super
(
CaptchaWidget
,
self
)
.
__init__
(
**
kw
)
# if getattr(self, "mask", False):
# self.requirements = tuple(
# list(self.requirements) + [("jquery.maskedinput", None)]
# )
def
serialize
(
self
,
field
,
cstruct
,
**
kw
):
def
serialize
(
self
,
field
,
cstruct
,
**
kw
):
if
cstruct
in
(
null
,
None
):
if
cstruct
in
(
null
,
None
):
cstruct
=
""
cstruct
=
""
readonly
=
kw
.
get
(
"readonly"
,
self
.
readonly
)
readonly
=
kw
.
get
(
"readonly"
,
self
.
readonly
)
template
=
readonly
and
self
.
readonly_template
or
self
.
template
template
=
readonly
and
self
.
readonly_template
or
self
.
template
#
values = self.get_template_values(field, cstruct, kw)
values
=
self
.
get_template_values
(
field
,
cstruct
,
kw
)
return
field
.
renderer
(
template
,
None
)
return
field
.
renderer
(
template
,
**
values
)
def
deserialize
(
self
,
field
,
pstruct
):
def
deserialize
(
self
,
field
,
pstruct
):
if
pstruct
is
null
:
if
pstruct
is
null
:
...
...
opensipkd/base/views/widgets/captcha.pt
View file @
91d58e7
<span tal:define="name name|field.name;
<span tal:define="name name|field.name;
css_class css_class|field.widget.css_class;
css_class css_class|field.widget.css_class;
oid oid|field.oid;
oid oid|field.oid;
captcha captcha|field.widget.captcha;
style style|field.widget.style;
style style|field.widget.style;
url url|field.widget.url;
"
"
tal:omit-tag="">
tal:omit-tag="">
<img style="height:30px; width:auto; margin-bottom:5px;" src="${url}">
<input type="text" name="${name}" value="${cstruct}"
<input type="text" name="${name}" value="${cstruct}"
tal:attributes="class string: form-control ${css_class or ''};
tal:attributes="class string: form-control ${css_class or ''};
style style;
style style;
attributes|field.widget.attributes|{};"
attributes|field.widget.attributes|{};"
id="${oid}"/>
id="${oid}"/>
<script type="text/javascript">
deform.addCallback(
'${oid}',
function (oid) {
$("#" + oid).parent().prepend('<img style="height:30px; width:auto; margin-bottom:5px;' +
'" src="${home}/captcha/${captcha}.png">')
$('#'+oid).on('input', function (evt) {
$(this).val(function (_, val) {
return val.toUpperCase();
});
});
});
</script>
</span>
</span>
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