Commit 689efbb1 by aa.gusti

perbaikan registrasi

1 parent cd4afcc7
import os import os
import re
from email.utils import parseaddr from email.utils import parseaddr
import colander import colander
...@@ -58,19 +59,42 @@ class Store(dict): ...@@ -58,19 +59,42 @@ class Store(dict):
store = Store() store = Store()
reg_exts = ['.png', '.jpg', '.pdf', '.jpeg'] 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): 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( kode = colander.SchemaNode(
colander.String(), colander.String(),
validator=colander.Length(max=18, max_err='Maximum ${max} Digit', validator=colander.Length(max=18, max_err='Maximum ${max} Digit',
min=15, min_err='Minimimum ${min} Digit'), min=15, min_err='Minimimum ${min} Digit'),
title="No.Identitas/NIK", title="No.Identitas/NIK",
oid="kode") oid="kode")
detail = NamaSchema() detail = NamaSchema()
doc_id_card = colander.SchemaNode( doc_id_card = colander.SchemaNode(
FileData(), FileData(),
widget=widget.FileUploadWidget(store)) widget=widget.FileUploadWidget(store),
validator=id_card_validator)
# captcha = colander.SchemaNode( # captcha = colander.SchemaNode(
# colander.String(), # colander.String(),
...@@ -119,8 +143,12 @@ class RegEditSchema(colander.Schema): ...@@ -119,8 +143,12 @@ class RegEditSchema(colander.Schema):
del self["doc_id_card"] del self["doc_id_card"]
def email_found_user(email): # def user_name(user_name):
return User.get_by_identity(email) # return User.get_by_identity(email)
def user_found(identity):
return User.get_by_identity(identity)
def mobile_found_partner(mobile): def mobile_found_partner(mobile):
...@@ -151,14 +179,20 @@ def show_error(request, msg): ...@@ -151,14 +179,20 @@ def show_error(request, msg):
def form_validator(form, value): def form_validator(form, value):
value.update(value['detail']) value.update(value['detail'])
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():
raise colander.Invalid( exc = colander.Invalid(
form['detail']['email'], 'e-mail %s sudah ada yang menggunakan' % value['email']) form['detail']['email'], 'e-mail %s sudah ada yang menggunakan' % value['email'])
raise exc
def err_user():
raise colander.Invalid(
form['user_name'], 'User name %s sudah ada yang menggunakan' % value['user_name'])
def err_nik(): def err_nik():
raise colander.Invalid( raise colander.Invalid(
...@@ -168,27 +202,31 @@ def form_validator(form, value): ...@@ -168,27 +202,31 @@ def form_validator(form, value):
raise colander.Invalid( raise colander.Invalid(
form, 'User atau Password tidak sesuai') form, 'User atau Password tidak sesuai')
def err_file():
raise colander.Invalid(form, f'Extension harus salahsatu dari {reg_exts}')
request = form.request request = form.request
# Cek Login # Check user_name
if 'password' in value: user_name = value["user_name"]
user = form.request.user
if not user or not UserService.check_password(user, value['password']):
err_login()
if not request.user: detail = value['detail']
if get_params("reg_captcha") == '1': email = detail['email']
if 'captcha' not in value or not value['captcha'] \
or 'captcha' not in request.session or not request.session['captcha']:
err_captcha()
captcha = 'captcha' in value and value['captcha'].upper() or None # Check Data User
is_logged = form.request.user
user = user_found(user_name)
if user and not is_logged:
err_user()
if not captcha or captcha != request.session['captcha']: if user and is_logged:
err_captcha() if user.id != is_logged.id:
err_user()
user = user_found(email)
if user and not is_logged:
err_email()
if user and is_logged:
if user.id != is_logged.id:
err_email()
# Check Data Partner
if 'id' in request.matchdict: if 'id' in request.matchdict:
uid = request.matchdict['id'] uid = request.matchdict['id']
q = DBSession.query(Partner).filter_by(id=uid) q = DBSession.query(Partner).filter_by(id=uid)
...@@ -196,9 +234,6 @@ def form_validator(form, value): ...@@ -196,9 +234,6 @@ def form_validator(form, value):
else: else:
partner = None partner = None
detail = value['detail']
email = detail['email']
found = email_found_partner(email) found = email_found_partner(email)
if partner: if partner:
if found and found.id != partner.id: if found and found.id != partner.id:
...@@ -207,27 +242,30 @@ def form_validator(form, value): ...@@ -207,27 +242,30 @@ def form_validator(form, value):
err_email() err_email()
# CEK NIK apakah Sudah Ada di tabel Partner? # CEK NIK apakah Sudah Ada di tabel Partner?
if not partner: found_nik = nik_found(value['kode'])
found_nik = nik_found(value['kode']) if partner:
if partner: if found_nik and found_nik.id != partner.id:
if found_nik and found_nik.id != partner.id:
err_nik()
elif found_nik:
err_nik() err_nik()
elif found_nik:
err_nik()
user = email_found_user(email) # Check Captcha jika registrasi
# jika ada user dan statusnya register di buat error if not request.user:
if user and not form.request.user: if get_params("reg_captcha") == '1':
err_email() if 'captcha' not in value or not value['captcha'] \
or 'captcha' not in request.session or not request.session['captcha']:
err_captcha()
# jika update periksa apakah email digunakan oleh user lain captcha = 'captcha' in value and value['captcha'].upper() or None
if user and form.request.user:
if user.id != form.request.user.id: if not captcha or captcha != request.session['captcha']:
err_email() err_captcha()
if 'doc_id_card' in value:
ext = get_ext(value["doc_id_card"]["filename"]) # Cek Old Password
if ext not in reg_exts: if 'password' in value:
err_file() user = form.request.user
if not user or not UserService.check_password(user, value['password']):
err_login()
def get_form(request, class_form, buttons=('batal', 'simpan'), def get_form(request, class_form, buttons=('batal', 'simpan'),
...@@ -270,7 +308,7 @@ def save_request(values, request, row=None): ...@@ -270,7 +308,7 @@ def save_request(values, request, row=None):
else: else:
# Jika Tidak Tambahkan User dan Kirim Email # Jika Tidak Tambahkan User dan Kirim Email
user_ = dict(user_name=values['nama'], user_ = dict(user_name=values['user_name'],
email=values['email']) email=values['email'])
user, remain = save_user(request, user_) user, remain = save_user(request, user_)
# if not external identity send security code # if not external identity send security code
...@@ -296,16 +334,16 @@ def save_request(values, request, row=None): ...@@ -296,16 +334,16 @@ def save_request(values, request, row=None):
values['user_id'] = user.id values['user_id'] = user.id
row = save_partner(values, row) row = save_partner(values, row)
##Untuk SIMKEL## ##Untuk SIMKEL##
settings = get_settings() # settings = get_settings()
if 'default_group' in settings: # if 'default_group' in settings:
groups = settings['default_group'].split(',') # groups = settings['default_group'].split(',')
for group in groups: # for group in groups:
group_data = Group.query_group_name(group).first() # group_data = Group.query_group_name(group).first()
if not group_data: # if not group_data:
raise custom_error(-1, "Group Not Found.") # raise custom_error(-1, "Group Not Found.")
data = dict(group_id=group_data.id, # data = dict(group_id=group_data.id,
user_id=user.id) # user_id=user.id)
save_groups(data, None) # save_groups(data, None)
return row return row
......
<html> <html tal:define="home request.route_url('home')[:-1];">
<body> <body>
<div class="well"> <div class="well">
<h3>Forbidden</h3> <h3>Forbidden</h3>
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
</div> </div>
<!-- Error session flash --> <!-- Error session flash -->
<p><img src="${request._host}/static/img/logo.png" class="img-float img-thumbnail"/></p> <p><img src="${home}/static/img/logo.png" class="img-float img-thumbnail"/></p>
Anda tidak berhak mengakses halaman ${url}<br> Anda tidak berhak mengakses halaman <span style="color:red;">${url}</span><br>
<a href="${request.referer}">Kembali ke Halaman Sebelumnya</a> <b>Silahkan Hubungi Administrator</b><br>
<a href="${request.referer}" tal:condition=request.referer >Kembali ke Halaman Sebelumnya</a>
<a href="${home}/" tal:condition="not request.referer" >Kembali ke Halaman Utama</a>
</div> </div>
</body> </body>
......
<html> <html tal:define="home request.route_url('home')[:-1];">
<body> <body>
<div class="well"> <div class="well">
<h2>${request.app_name}</h2> <h2>${request.app_name}</h2>
...@@ -13,9 +13,11 @@ ...@@ -13,9 +13,11 @@
</div> </div>
<!-- Error session flash --> <!-- Error session flash -->
<p><img src="${request._host}/static/img/logo.png" class="img-float img-thumbnail"/></p> <p><img src="${home}/static/img/logo.png" class="img-float img-thumbnail"/></p>
Halaman yang anda cari tidak ada (${request.url}) Halaman yang anda cari tidak ada <span style="color:red;">${request.url}</span><br>
<a href="${request.referer}" tal:condition=request.referer >Kembali ke Halaman Sebelumnya</a>
<a href="${home}/" tal:condition="not request.referer" >Kembali ke Halaman Utama</a>
</div> </div>
</body> </body>
</html> </html>
...@@ -310,7 +310,7 @@ def update(request, user, values): ...@@ -310,7 +310,7 @@ def update(request, user, values):
user.api_key = generate_api_key() user.api_key = generate_api_key()
if 'password' in values: if 'password' in values:
UserService.set_password(user, values['password']) UserService.set_password(user, values['password'])
company_id = request.user.company_id or values["company_id"] company_id = request.user.company_id or 'company_id' in values and values["company_id"] or None
user.company_id = company_id user.company_id = company_id
DBSession.add(user) DBSession.add(user)
existing = user_group_set(user) existing = user_group_set(user)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!