Browse Source

Created a fake BCEID login screen for use in localdev environments

pull/160/head
Mike Olund 8 years ago
parent
commit
d65b4c71f1
5 changed files with 251 additions and 0 deletions
  1. +25
    -0
      edivorce/apps/core/decorators.py
  2. +0
    -0
      edivorce/apps/core/middleware/__init__.py
  3. +47
    -0
      edivorce/apps/core/middleware/bceid_middleware.py
  4. +154
    -0
      edivorce/apps/core/templates/localdev/bceid.html
  5. +25
    -0
      edivorce/apps/core/views/localdev.py

+ 25
- 0
edivorce/apps/core/decorators.py View File

@ -0,0 +1,25 @@
from django.conf import settings
from django.shortcuts import redirect
def bceid_required(function=None):
""" View decorator to check if the user is logged in to BCEID """
""" This decorator has a dependency on bceid_middleware.py """
def _dec(view_func):
def _view(request, *args, **kwargs):
if not request.bceid_user.is_authenticated:
return redirect(settings.FORCE_SCRIPT_NAME + '/login')
else:
return view_func(request, *args, **kwargs)
_view.__name__ = view_func.__name__
_view.__dict__ = view_func.__dict__
_view.__doc__ = view_func.__doc__
return _view
if function is None:
return _dec
else:
return _dec(function)

+ 0
- 0
edivorce/apps/core/middleware/__init__.py View File


+ 47
- 0
edivorce/apps/core/middleware/bceid_middleware.py View File

@ -0,0 +1,47 @@
import uuid
class BceidUser(object):
def __init__(self, guid, first_name, last_name, type, is_authenticated):
self.guid = guid
self.first_name = first_name
self.last_name = last_name
self.type = type
self.is_authenticated = is_authenticated
class BceidMiddleware(object):
def process_request(self, request):
# todo: Make sure the request is coming from the justice proxy (via IP/host check)
# 1. Real BCeID user
# todo: parse the siteminder headers and stick them into a dictionary request.bceid_user
if request.session.get('fake-bceid-guid', False):
# 2. Fake BCeID user
request.bceid_user = BceidUser(
guid=request.session.get('fake-bceid-guid', ''),
is_authenticated=True,
type='FAKE',
first_name='Kelly',
last_name='Bundy'
)
else:
# 3. Anonymous User
if request.session.get('anon-guid', False):
request.session['anon-guid'] = uuid.uuid4().urn[9:]
request.bceid_user = BceidUser(
guid=request.session.get('anon-guid'),
is_authenticated=False,
type='ANONYMOUS',
first_name='',
last_name=''
)
def process_response(self, request, response):
return response

+ 154
- 0
edivorce/apps/core/templates/localdev/bceid.html View File

@ -0,0 +1,154 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Government of British Columbia</title>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta name="keywords" content=""/>
<meta name="description" content=""/>
<meta name="Author" content=""/>
<link rel="icon" href="https://logon.gov.bc.ca/clp/images/favicon.ico">
<title>CLP</title>
<!-- mobile settings -->
<meta name="viewport"
content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0"/>
<!-- JAVASCRIPT FILES -->
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/plugins/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/plugins/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/plugins/datepicker/js/bootstrap-datepicker.min.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/js/common.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/js/brandexample.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/js/form-validation.js"></script>
<script type="text/javascript" src="https://logon.gov.bc.ca/clp/js/footer.js"></script>
<!-- CORE CSS -->
<link href="https://logon.gov.bc.ca/clp/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="https://logon.gov.bc.ca/clp/css/font-awesome.css" rel="stylesheet" type="text/css"/>
<link href="https://logon.gov.bc.ca/clp/css/main.css" rel="stylesheet" type="text/css"/>
<link href="https://logon.gov.bc.ca/clp/plugins/datepicker/css/bootstrap-datepicker3.min.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="wrapper" class="main">
<header id="bcGov" class="no-gov-brand">
<div class="container">
<div class="seperator"></div>
<div id="login-to" class="site-title">Log in to justice.gov.bc.ca/divorce</div>
</div>
</header>
<header id="client">
<div class="container">
<div>
<img src="https://logon.gov.bc.ca/clp/branding/bceid_default_logo.jpg" class="logo" alt=""/>
</div>
</div>
</header>
<form method="POST" name="login" id="login-form" class="login-bceid-form" novalidate>
<section class="container">
<div class="row">
<div class="col-sm-7 col-md-8">
<div class="panel">
<div class="panel-heading">
Log in with <span id="bceidLogo" class="environment-logo bceid-environment-prod"></span>
</div>
<div class="panel-body">
<div class="form-element form-group">
<label class="control-label label-with-instruction"
for="username">User ID</label>
<div class="instruction">Use a Basic BCeID</div>
<input name="user" id="username" type="text" size="20" autofocus
class="form-control input-200" autocomplete="off"/>
</div>
<div class="form-element form-group">
<label class="control-label" for="password">Password</label>
<input name="password" type="password" class="form-control input-200"
id="password" size="20" autocomplete="off"/>
</div>
<div class="bg-error hidden">
<div class="help-block field-help-block">
<i class="fa fa-fw fa-exclamation-circle"></i><span
class="field-help-text"></span>
</div>
</div>
<div class="login-form-action">
<input type="submit" name="btnSubmit" class="btn btn-primary"
value="Continue"/>
</div>
<div class="forgot">
<a href="#" class="link-forgot">Forgot your user ID or password?</a>
</div>
</div>
</div>
<div class="panel">
<div class="panel-body" style="padding-bottom: 15px;">
<div>
<strong>No account?</strong>
</div>
<a href="#"
style="text-decoration: underline; font-size: 16px; font-weight: 600;">Register for a
BCeID</a>
</div>
</div>
<div>
&#x25C0; <a href="./" class="link-cancel">Cancel
and return to justice.gov.bc.ca/divorce</a>
</div>
<hr class="visible-xs">
</div>
<div class="col-sm-5 col-md-4">
</div>
</div>
</section>
</form>
</div>
<footer class="footer-stick-to-bottom">
<div class="container" id="AccessMessage">
<div class="row">
<div class="col-sm-12">
<p>Access to or unauthorized use of data on this computer system by any person other than the authorized
employee(s) or owner(s) of an account is strictly prohibited and may result in legal action against
such person.</p>
</div>
</div>
</div>
<div id="footerWrapper">
<div class="container">
<div class="row">
<div class="col-sm-12">
<ul class="inline">
<li data-order="1"><a href="http://www.gov.bc.ca/com/disclaimer.html">Disclaimer</a></li>
<li data-order="2"><a href="http://www.gov.bc.ca/com/privacy.html">Privacy</a></li>
<li data-order="3"><a href="http://www.gov.bc.ca/com/accessibility.html">Accessibility</a></li>
<li data-order="4"><a href="http://www.gov.bc.ca/com/copyright.html">Copyright</a></li>
</ul>
</div>
</div>
</div>
</div>
</footer>
</body>
</html>

+ 25
- 0
edivorce/apps/core/views/localdev.py View File

@ -0,0 +1,25 @@
import uuid
import binascii
from encodings.utf_8 import decode
from django.conf import settings
from django.shortcuts import render, redirect
from django.views.decorators.csrf import csrf_exempt
@csrf_exempt
def bceid(request):
""" fake bceid login for developer workstation environment """
if request.method == "POST":
login_name = request.POST.get('user', '')
# convert the login name to a guid
hex_name = decode(binascii.hexlify(str.encode(login_name)))[0]
fake_guid = uuid.UUID(hex_name.rjust(32, '0')).urn[9:]
# save the guid in a session variable
request.session['fake-bceid-guid'] = fake_guid
return redirect(settings.FORCE_SCRIPT_NAME + '/login')
else:
return render(request, 'localdev/bceid.html')

Loading…
Cancel
Save