Commit 0f6b8659 by aagusti

perbaikan registrasi

1 parent 4b730411
...@@ -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)
......
...@@ -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:
......
...@@ -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
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!