Commit f08d1cd8 by aagusti

google sign in

1 parent d8ec7e78
...@@ -3,13 +3,19 @@ from .models import ( ...@@ -3,13 +3,19 @@ from .models import (
User, User,
UserGroup, UserGroup,
DBSession, DBSession,
) )
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# It is used by RootFactory # It is used by RootFactory
def group_finder(user_id, request): def group_finder(user_id, request):
q = DBSession.query(User).filter_by(id=user_id) if user_id != 'None':
user = q.first() q = DBSession.query(User).filter_by(id=user_id)
user = q.first()
else:
user = None
if not user or not user.status: if not user or not user.status:
log.info("User tidak ditemukan") log.info("User tidak ditemukan")
return [] return []
......
...@@ -114,10 +114,18 @@ class BaseView(object): ...@@ -114,10 +114,18 @@ class BaseView(object):
self.home = self.req.route_url('home')[:-1] self.home = self.req.route_url('home')[:-1]
self.form_validator = None self.form_validator = None
self.buttons = None
self.headers = None
def route_list(self, msg=None, error=""): def route_list(self, msg=None, error=""):
if msg: if msg:
self.ses.flash(msg, error) self.ses.flash(msg, error)
return HTTPFound(location=self.req.route_url(self.list_route)) if self.headers:
return HTTPFound(location=self.req.route_url(self.list_route), headers=self.headers)
else:
return HTTPFound(location=self.req.route_url(self.list_route))
def form_validator(self, form, value): def form_validator(self, form, value):
pass pass
...@@ -126,12 +134,15 @@ class BaseView(object): ...@@ -126,12 +134,15 @@ class BaseView(object):
return get_params(params) return get_params(params)
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):
if self.buttons:
buttons = self.buttons
schema = class_form(validator=self.form_validator) schema = class_form(validator=self.form_validator)
schema = schema.bind(request=self.req, schema = schema.bind(request=self.req,
row=row,
**bindings) **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)
def session_failed(self, session_name): def session_failed(self, session_name):
...@@ -158,6 +169,9 @@ class BaseView(object): ...@@ -158,6 +169,9 @@ class BaseView(object):
table = self.get_item_table(row) table = self.get_item_table(row)
return dict(form=form.render(readonly=True), table=table and table.render() or None, scripts=self.form_scripts) return dict(form=form.render(readonly=True), table=table and table.render() or None, scripts=self.form_scripts)
def before_add(self, form):
return form
def view_add(self): def view_add(self):
bindings = self.get_bindings() bindings = self.get_bindings()
form = self.get_form(self.add_schema, **bindings) form = self.get_form(self.add_schema, **bindings)
...@@ -171,6 +185,7 @@ class BaseView(object): ...@@ -171,6 +185,7 @@ class BaseView(object):
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)
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)
...@@ -184,10 +199,10 @@ class BaseView(object): ...@@ -184,10 +199,10 @@ class BaseView(object):
if not row: if not row:
row = self.table() row = self.table()
row.created = datetime.now() row.created = datetime.now()
row.create_uid = user.id row.create_uid = user and user.id or None
else: else:
row.updated = datetime.now() row.updated = datetime.now()
row.update_uid = user.id row.update_uid = user and user.id or None
row.from_dict(values) row.from_dict(values)
row.status = 'status' in values and values['status'] and 1 or 0 row.status = 'status' in values and values['status'] and 1 or 0
...@@ -225,6 +240,8 @@ class BaseView(object): ...@@ -225,6 +240,8 @@ class BaseView(object):
def get_item_table(self, row=None): def get_item_table(self, row=None):
return None return None
def before_edit(self, form):
return form
def view_edit(self): def view_edit(self):
request = self.req request = self.req
...@@ -246,6 +263,7 @@ class BaseView(object): ...@@ -246,6 +263,7 @@ class BaseView(object):
return self.route_list() return self.route_list()
values = self.get_values(row) values = self.get_values(row)
form.set_appstruct(values) form.set_appstruct(values)
form = self.before_edit(form)
table = self.get_item_table(row) table = self.get_item_table(row)
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)
......
...@@ -64,7 +64,7 @@ def view_login(request): ...@@ -64,7 +64,7 @@ def view_login(request):
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:
next_url = request.route_url('home') # get_params('_host')+ next_url = request.route_url('home') # get_params('_host')+
if request.authenticated_userid: # (request): if request.authenticated_userid: # (request):
request.session.flash('Anda sudah login', 'error') request.session.flash('Anda sudah login', 'error')
...@@ -108,13 +108,14 @@ def view_login(request): ...@@ -108,13 +108,14 @@ def view_login(request):
msg = "Login Gagal" msg = "Login Gagal"
set_user_log(msg, request, log, identity) set_user_log(msg, request, log, identity)
request.session.flash(msg, "error") request.session.flash(msg, "error")
next_url=f"{request.route_url('login')}?next={next_url}" next_url = f"{request.route_url('login')}?next={next_url}"
return HTTPFound(location=next_url) return HTTPFound(location=next_url)
return redirect_login(request, user) return redirect_login(request, user)
elif 'register' in request.POST: elif 'register' in request.POST:
return HTTPFound(location=request.route_url("register")) register_form = get_params("register_form", 'register-external')
return HTTPFound(location=request.route_url(register_form))
elif 'login failed' in request.session: elif 'login failed' in request.session:
r = dict(form=request.session['login failed']) r = dict(form=request.session['login failed'])
...@@ -125,6 +126,7 @@ def view_login(request): ...@@ -125,6 +126,7 @@ def view_login(request):
provider_name = request.params["provider_name"] provider_name = request.params["provider_name"]
if provider_name == "google": if provider_name == "google":
from .base_google import googlesignin from .base_google import googlesignin
# user = googlesignin(request) # user = googlesignin(request)
id_info = googlesignin(request) id_info = googlesignin(request)
request.session["id_info"] = id_info request.session["id_info"] = id_info
...@@ -138,21 +140,22 @@ def view_login(request): ...@@ -138,21 +140,22 @@ def view_login(request):
user = id_info and ExternalIdentityService. \ user = id_info and ExternalIdentityService. \
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')
return HTTPFound(location=request.route_url('register-external')) register_form = get_params("register_form", 'register-external')
headers = [("id_info", str(id_info))]
return HTTPFound(location=request.route_url(register_form, _query=id_info), detail=id_info)
if user: if user:
return redirect_login(request, user) return redirect_login(request, user)
message="" message = ""
login="" login = ""
return render_to_response(login_tpl, return render_to_response(login_tpl,
dict(form=form.render(), dict(form=form.render(),
message=message, message=message,
url=request.route_url('login'), url=request.route_url('login'),
next_url=next_url, next_url=next_url,
login=login,), login=login, ),
request=request) request=request)
# return dict( # return dict(
...@@ -167,7 +170,7 @@ def redirect_login(request, user): ...@@ -167,7 +170,7 @@ def redirect_login(request, user):
if not next_url and request.matched_route.name == 'login': if not next_url and request.matched_route.name == 'login':
url = get_params('modules_default', 'home') url = get_params('modules_default', 'home')
return HTTPFound(location=request.route_url(url), return HTTPFound(location=request.route_url(url),
headers=headers) headers=headers)
return HTTPFound(location=next_url, headers=headers) return HTTPFound(location=next_url, headers=headers)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!