Add JSON response handling for AJAX login requests in ViewAuth class

1 parent 75d4b5ee
...@@ -23,8 +23,7 @@ import os ...@@ -23,8 +23,7 @@ import os
import re import re
from datetime import timedelta, datetime from datetime import timedelta, datetime
from importlib import import_module from importlib import import_module
from urllib import request from pyramid.request import Response
import colander import colander
from deform import widget, Form, ValidationFailure, Button from deform import widget, Form, ValidationFailure, Button
from pyramid.csrf import new_csrf_token from pyramid.csrf import new_csrf_token
...@@ -193,6 +192,11 @@ class ViewAuth(BaseView): ...@@ -193,6 +192,11 @@ class ViewAuth(BaseView):
next_url = request.home next_url = request.home
if request.authenticated_userid: # (request): if request.authenticated_userid: # (request):
message = 'Anda sudah login'
if self.req.is_xhr:
return Response(json={"success": True,
"msg": message})
request.session.flash('Anda sudah login', 'error') request.session.flash('Anda sudah login', 'error')
return HTTPFound(location=f"{request.home}") return HTTPFound(location=f"{request.home}")
...@@ -216,6 +220,9 @@ class ViewAuth(BaseView): ...@@ -216,6 +220,9 @@ class ViewAuth(BaseView):
except ValidationFailure as e: except ValidationFailure as e:
msg = 'Login gagal' msg = 'Login gagal'
set_user_log(msg, request, log, identity) set_user_log(msg, request, log, identity)
if self.req.is_xhr:
d = self.form2dict(e.field)
return Response(json=d)
request.session.flash(msg, 'error') request.session.flash(msg, 'error')
return HTTPFound(location=request.route_url('base-login')) return HTTPFound(location=request.route_url('base-login'))
...@@ -243,6 +250,11 @@ class ViewAuth(BaseView): ...@@ -243,6 +250,11 @@ class ViewAuth(BaseView):
login = LoginUser(self.req) login = LoginUser(self.req)
if not login.login(values, user): if not login.login(values, user):
request.session.flash(login.message, "error") request.session.flash(login.message, "error")
if self.req.is_xhr:
return Response(json={"error": {"code": -1,
"msg": login.message}
})
next_url = f"{request.route_url('base-login')}?next={next_url}" next_url = f"{request.route_url('base-login')}?next={next_url}"
return HTTPFound(location=next_url) return HTTPFound(location=next_url)
return redirect_login(request, user) return redirect_login(request, user)
...@@ -262,6 +274,9 @@ class ViewAuth(BaseView): ...@@ -262,6 +274,9 @@ class ViewAuth(BaseView):
except Oauth2ParseExc as e: except Oauth2ParseExc as e:
login = "" login = ""
request.session.flash(str(e), "error") request.session.flash(str(e), "error")
if self.req.is_xhr:
# return Response(form.render())
return Response(json=self.form2dict(form))
return render_to_response( return render_to_response(
login_tpl, dict( login_tpl, dict(
form=form, form=form,
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!