Commit 4b730411 by aagusti

session error

1 parent 91d58e76
...@@ -18,6 +18,12 @@ from ..models import User ...@@ -18,6 +18,12 @@ from ..models import User
class BaseView(object): class BaseView(object):
def __init__(self, request): def __init__(self, request):
if not "test" in request.session:
request.session["test"]='TEST'
print("********8 Session test not found")
else:
print("********9 Session", request.session["test"])
self.req = request self.req = request
self.ses = self.req.session self.ses = self.req.session
self.params = self.req.params self.params = self.req.params
...@@ -173,26 +179,32 @@ class BaseView(object): ...@@ -173,26 +179,32 @@ class BaseView(object):
return dict(form=form.render(readonly=True), table=table and table.render() or None, return dict(form=form.render(readonly=True), table=table and table.render() or None,
scripts=self.form_scripts) scripts=self.form_scripts)
def before_add(self, form): def before_add(self):
return form return
def validation_failure(self, value): def validation_failure(self, value):
return value return value
def view_add(self): def view_add(self):
print("*************** view_add", self.ses)
form = self.get_form(self.add_schema) form = self.get_form(self.add_schema)
if self.req.POST: if self.req.POST:
print("*************** view_add_pos", self.ses)
if 'save' in self.req.POST: if 'save' in self.req.POST:
controls = self.req.POST.items() controls = self.req.POST.items()
try: try:
controls = form.validate(controls) controls = form.validate(controls)
except ValidationFailure as e: except ValidationFailure as e:
value = self.validation_failure(e.cstruct) value = self.validation_failure(e.cstruct)
value.update(self.before_add())
print("*************** on error", self.ses)
form.render(appstruct=value) form.render(appstruct=value)
return dict(form=form.render(), scripts=self.form_scripts) return dict(form=form.render(), scripts=self.form_scripts)
self.save_request(dict(controls)) self.save_request(dict(controls))
return self.route_list() return self.route_list()
form = self.before_add(form) values = self.before_add()
print("*************** on view", self.ses)
form.set_appstruct(values)
table = self.get_item_table() table = self.get_item_table()
return dict(form=form.render(), table=table and table.render() or None, return dict(form=form.render(), table=table and table.render() or None,
scripts=self.form_scripts) scripts=self.form_scripts)
...@@ -337,8 +349,9 @@ def user_name_validator(node, value): ...@@ -337,8 +349,9 @@ def user_name_validator(node, value):
def need_captcha(): 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 get_url_captcha(request): def get_url_captcha(request):
captcha = get_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
return os.path.join(request.route_url('home'), 'captcha', captcha)
...@@ -21,29 +21,26 @@ File template tersebut dapat diunggah ...@@ -21,29 +21,26 @@ File template tersebut dapat diunggah
Link dalam module registrasi: Link dalam module registrasi:
1. Form registrasi http://server/register 1. Form registrasi http://server/register
2. List User yang melakukan registrasi yangu statusn=0 http://server/register/list 2. List User yang melakukan registrasi yang statusn=0 http://server/register/list
3. Form Verifikasi http://server/register/{uid}/verifikasi 3. Form Verifikasi http://server/register/{uid}/verifikasi
4. Form edit registrasi http://server/register/{uid}/edit 4. Form edit registrasi http://server/register/{uid}/edit
5. Form Upload template 5. Form Upload template
""" """
import os import os
from email.utils import parseaddr
import colander import colander
from deform import (widget, ValidationFailure, Button, FileData) from deform import (widget, Button, FileData)
from opensipkd.tools import Upload from opensipkd.tools import Upload
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 import get_params from opensipkd.base import get_params
from opensipkd.base.views.user import insert as save_user, email_validator from opensipkd.base.views.user import email_validator
from opensipkd.base.views.user_login import send_email_security_code
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, get_url_captcha
from ..models import User, DBSession, Partner, UserGroup from ..models import User, DBSession, Partner
from ..views import BaseView from ..views import BaseView
_ = TranslationStringFactory('user') _ = TranslationStringFactory('user')
...@@ -52,10 +49,12 @@ _ = TranslationStringFactory('user') ...@@ -52,10 +49,12 @@ _ = TranslationStringFactory('user')
class AddSchema(colander.Schema): class AddSchema(colander.Schema):
nama = colander.SchemaNode( nama = colander.SchemaNode(
colander.String(), colander.String(),
oid="nama") oid="nama",
title=_("Name"),
)
alamat_1 = colander.SchemaNode( alamat_1 = colander.SchemaNode(
colander.String(), colander.String(),
title="Alamat", title=_("Address"),
oid="alamat_1") oid="alamat_1")
alamat_2 = colander.SchemaNode( alamat_2 = colander.SchemaNode(
colander.String(), colander.String(),
...@@ -64,10 +63,12 @@ class AddSchema(colander.Schema): ...@@ -64,10 +63,12 @@ class AddSchema(colander.Schema):
oid="alamat_2") oid="alamat_2")
mobile = colander.SchemaNode( mobile = colander.SchemaNode(
colander.String(), colander.String(),
oid="no_hp") oid="no_hp",
title=_("Mobile")
)
email = colander.SchemaNode( email = colander.SchemaNode(
colander.String(), colander.String(),
title="E-mail", title=_("E-mail"),
validator=email_validator, validator=email_validator,
oid="email") oid="email")
...@@ -78,26 +79,26 @@ class AddSchema(colander.Schema): ...@@ -78,26 +79,26 @@ class AddSchema(colander.Schema):
self["kode"] = colander.SchemaNode( self["kode"] = colander.SchemaNode(
colander.String(), colander.String(),
widget=widget.TextInputWidget(), widget=widget.TextInputWidget(),
title="No.Identitas/NIK", title=_("ID Number"),
# missing=colander.drop, # missing=colander.drop,
oid="kode") oid="kode")
self["doc_id_card"] = colander.SchemaNode( self["doc_id_card"] = colander.SchemaNode(
FileData(), FileData(),
widget=widget.FileUploadWidget(store), widget=widget.FileUploadWidget(store),
title="Photo Identitas", title=_("ID Card"),
validator=image_validator) validator=image_validator)
if not request.user and need_captcha(): if not request.user and need_captcha():
self["captcha"] = colander.SchemaNode( self["captcha"] = colander.SchemaNode(
colander.String(), colander.String(),
widget=widget_os.CaptchaWidget(url=get_url_captcha(request)),
oid="captcha", title="Captcha")
widget=widget_os.CaptchaWidget(),
oid="captcha", title=_("Captcha"))
if request.user and request.user.id: if request.user and request.user.id:
self["password"] = colander.SchemaNode( self["password"] = colander.SchemaNode(
colander.String(), colander.String(),
widget=widget.PasswordWidget() widget=widget.PasswordWidget(),
, oid="password", title="Password") oid="password", title=_("Password")
)
class EditSchema(AddSchema): class EditSchema(AddSchema):
...@@ -128,11 +129,6 @@ def show_error(request, msg): ...@@ -128,11 +129,6 @@ def show_error(request, msg):
_show_error(request, msg) _show_error(request, msg)
return HTTPFound(location=request.route_url('home')) return HTTPFound(location=request.route_url('home'))
# Validasi saat Register
# 1. Cek email pada Users jika ada dan Users.id beda reject
# 2. Cek email pada Partner jika ada dan Partner.id beda reject
# 3. Cek NIK (kode) pada Partner jika ada dan Partner.id beda reject
def reg_buttons(): def reg_buttons():
btn_register = Button(name='save', css_class='btn-success', type="submit", title="Register") btn_register = Button(name='save', css_class='btn-success', type="submit", title="Register")
...@@ -142,6 +138,7 @@ def reg_buttons(): ...@@ -142,6 +138,7 @@ 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()
...@@ -149,13 +146,26 @@ class Registrasi(BaseView): ...@@ -149,13 +146,26 @@ 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):
"""
Default "value"
user_name = mobile
kode = mobile
Validasi saat Register
1. Cek email pada Users jika ada dan Users.id beda reject
2. Cek email pada Partner jika ada dan Partner.id beda reject
3. Cek kode pada Partner jika ada dan Partner.id beda reject
4. Cek mobile pada Partner jika ada dan Users.id beda reject
"""
form_exc = colander.Invalid(form, '') form_exc = colander.Invalid(form, '')
request = form.request
def err_captcha(): def err_captcha():
msg = 'Captcha harus diisi' msg = 'Captcha berbeda'
raise colander.Invalid(form['captcha'], msg) # form_exc.add(colander.Invalid(form['captcha'], msg))
form_exc['captcha']=msg
raise form_exc
def err_email(): def err_email():
exc = colander.Invalid( exc = colander.Invalid(
...@@ -178,14 +188,20 @@ class Registrasi(BaseView): ...@@ -178,14 +188,20 @@ class Registrasi(BaseView):
raise colander.Invalid( raise colander.Invalid(
form["password"], 'User atau Password tidak sesuai') form["password"], 'User atau Password tidak sesuai')
request = form.request 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
ses_captcha = request.session.pop('captcha')
if captcha != ses_captcha:
err_captcha()
is_logged = form.request.user is_logged = form.request.user
email = value["email"] email = value["email"]
if "user_name" not in value or not value["user_name"]: if "user_name" not in value or not value["user_name"]:
value["user_name"] = value["mobile"] value["user_name"] = value["mobile"]
if 'user_name' in value: if 'user_name' in value:
# Check Data User
user_name = value["user_name"] 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:
...@@ -228,22 +244,18 @@ class Registrasi(BaseView): ...@@ -228,22 +244,18 @@ class Registrasi(BaseView):
elif found_nik: elif found_nik:
err_nik() err_nik()
# Check Captcha jika registrasi
if not request.user and need_captcha():
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
if not captcha or captcha != request.session['captcha']:
del request.session["captcha"]
err_captcha()
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_add(self):
if need_captcha():
result = dict(captcha=get_url_captcha(self.req))
print("*************** before_add", self.ses)
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"]:
return row return row
...@@ -257,17 +269,6 @@ class Registrasi(BaseView): ...@@ -257,17 +269,6 @@ class Registrasi(BaseView):
row.doc_id_card = values["doc_id_card"] row.doc_id_card = values["doc_id_card"]
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 after_save(self, row, values): def after_save(self, row, values):
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"]
...@@ -288,28 +289,40 @@ class Registrasi(BaseView): ...@@ -288,28 +289,40 @@ class Registrasi(BaseView):
return row return row
@view_config(route_name='register', renderer='templates/form_input.pt') @view_config(route_name='register', renderer='templates/form_input.pt')
def view_add(self): def view_register(self):
print("*************** init", self.ses)
request = self.req request = self.req
reg_form = get_params("reg_form")
if reg_form:
return HTTPFound(location=self.req.route_url(reg_form))
self.bindings = dict(user=None) 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"))
# self.captcha = need_captcha() and get_captcha(request) or ""
return super(Registrasi, self).view_add() return super(Registrasi, self).view_add()
@view_config(route_name='profile', renderer='templates/form_input.pt',
permission='view')
def es_reg_edt(self):
request = self.req
register_form = get_params("register_form")
self.bindings = dict(user=self.req.user)
if register_form:
return HTTPFound(location=request.route_url(register_form))
return super(Registrasi, self).view_edit()
def query_id(self): def query_id(self):
return DBSession.query(User). \ return DBSession.query(User). \
filter(User.id == self.req.user.id) filter(User.id == self.req.user.id)
def id_not_found(self): def id_not_found(self):
return return
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
@view_config(route_name='profile', renderer='templates/form_input.pt',
permission='view')
def view_profile(self):
reg_form = get_params("reg_form")
if reg_form:
return HTTPFound(location=self.req.route_url(reg_form))
self.bindings = dict(user=self.req.user)
return super(Registrasi, self).view_edit()
...@@ -2,13 +2,24 @@ ...@@ -2,13 +2,24 @@
css_class css_class|field.widget.css_class; css_class css_class|field.widget.css_class;
oid oid|field.oid; oid oid|field.oid;
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}"> <img style="height:30px; width:auto; margin-bottom:5px;" src="${cstruct}">
<input type="text" name="${name}" value="${cstruct}" <input type="text" name="${name}" value=""
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>
deform.addCallback(
'${oid}',
function (oid) {
$("#" + oid).on('input', function (evt) {
$(this).val(function (_, val) {
return val.toUpperCase();
});
});
});
</script>
</span> </span>
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!