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
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
63 additions
and
65 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
This diff is collapsed.
Click to expand it.
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