@opengovsg/mockpass 2.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/.eslintrc.json +13 -0
  2. package/.gitattributes +2 -0
  3. package/.github/dependabot.yml +14 -0
  4. package/.github/mergify.yml +12 -0
  5. package/.github/workflows/ci.yml +27 -0
  6. package/.github/workflows/npmpublish.yml +22 -0
  7. package/.gitpod.yml +5 -0
  8. package/.husky/pre-commit +4 -0
  9. package/.husky/pre-push +4 -0
  10. package/.prettierrc.js +5 -0
  11. package/Dockerfile +11 -0
  12. package/LICENSE +21 -0
  13. package/README.md +99 -0
  14. package/commitlint.config.js +7 -0
  15. package/index.js +87 -0
  16. package/lib/assertions.js +319 -0
  17. package/lib/crypto/index.js +61 -0
  18. package/lib/crypto/myinfo-signature.js +153 -0
  19. package/lib/express/index.js +6 -0
  20. package/lib/express/myinfo/consent.js +160 -0
  21. package/lib/express/myinfo/controllers.js +179 -0
  22. package/lib/express/myinfo/index.js +10 -0
  23. package/lib/express/oidc.js +131 -0
  24. package/lib/express/saml.js +171 -0
  25. package/lib/express/sgid.js +168 -0
  26. package/lib/saml-artifact.js +32 -0
  27. package/package.json +81 -0
  28. package/public/mockpass/resources/css/animate.css +43 -0
  29. package/public/mockpass/resources/css/common.css +121 -0
  30. package/public/mockpass/resources/css/reset.css +95 -0
  31. package/public/mockpass/resources/css/style-baseline-small-media.css +567 -0
  32. package/public/mockpass/resources/css/style-baseline.css +1006 -0
  33. package/public/mockpass/resources/css/style-common-small-media.css +156 -0
  34. package/public/mockpass/resources/css/style-common.css +510 -0
  35. package/public/mockpass/resources/css/style-homepage-small-media.css +588 -0
  36. package/public/mockpass/resources/css/style-homepage.css +674 -0
  37. package/public/mockpass/resources/css/style-main.css +9 -0
  38. package/public/mockpass/resources/img/ajax-loader.gif +0 -0
  39. package/public/mockpass/resources/img/ask_cheryl_tab.png +0 -0
  40. package/public/mockpass/resources/img/background/large-device/sp_bg.jpg +0 -0
  41. package/public/mockpass/resources/img/background/medium-device/ipad-bg.jpg +0 -0
  42. package/public/mockpass/resources/img/background/medium-device/ipad-landscape-sp-bg.jpg +0 -0
  43. package/public/mockpass/resources/img/background/small-device/mobile-sp-bg.jpg +0 -0
  44. package/public/mockpass/resources/img/carousel/large-device/how-to-setup-2fa-icon.png +0 -0
  45. package/public/mockpass/resources/img/carousel/large-device/register-icon.png +0 -0
  46. package/public/mockpass/resources/img/carousel/large-device/reset-password-icon.png +0 -0
  47. package/public/mockpass/resources/img/carousel/large-device/setup-2fa-icon.png +0 -0
  48. package/public/mockpass/resources/img/carousel/large-device/update-acct-icon.png +0 -0
  49. package/public/mockpass/resources/img/carousel/medium-device/ipad-register-icon.png +0 -0
  50. package/public/mockpass/resources/img/carousel/medium-device/ipad-reset-password-icon.png +0 -0
  51. package/public/mockpass/resources/img/carousel/medium-device/ipad-setup-2fa-icon.png +0 -0
  52. package/public/mockpass/resources/img/carousel/medium-device/ipad-update-acct-icon.png +0 -0
  53. package/public/mockpass/resources/img/carousel/small-device/mobile-register.png +0 -0
  54. package/public/mockpass/resources/img/carousel/small-device/mobile-reset-password-icon.png +0 -0
  55. package/public/mockpass/resources/img/carousel/small-device/mobile-update-acct-icon.png +0 -0
  56. package/public/mockpass/resources/img/close.png +0 -0
  57. package/public/mockpass/resources/img/id-pw-icon.png +0 -0
  58. package/public/mockpass/resources/img/logo/mockpass-logo.png +0 -0
  59. package/public/mockpass/resources/img/logo/mockpass-placeholder-logo.png +0 -0
  60. package/public/mockpass/resources/img/logo/mockpass_watermark.png +0 -0
  61. package/public/mockpass/resources/img/qr-icon.png +0 -0
  62. package/public/mockpass/resources/img/qr-shadow.png +0 -0
  63. package/public/mockpass/resources/img/refresh.jpg +0 -0
  64. package/public/mockpass/resources/img/sidebar-icons.png +0 -0
  65. package/public/mockpass/resources/img/sp-qr-unavailable.png +0 -0
  66. package/public/mockpass/resources/img/utility-icon-black.png +0 -0
  67. package/public/mockpass/resources/js/bootstrap.min.js +7 -0
  68. package/public/mockpass/resources/js/jquery-3.5.1.js +10872 -0
  69. package/public/mockpass/resources/js/login-common.js +849 -0
  70. package/public/mockpass/resources/plugins/bootstrap-3.3.6/css/bootstrap.min.css +6 -0
  71. package/public/mockpass/resources/plugins/bootstrap-3.3.6/fonts/glyphicons-halflings-regular.woff2 +0 -0
  72. package/static/certs/csr.pem +17 -0
  73. package/static/certs/key.pem +28 -0
  74. package/static/certs/key.pub +9 -0
  75. package/static/certs/server.crt +21 -0
  76. package/static/certs/spcp-csr.pem +17 -0
  77. package/static/certs/spcp-key.pem +28 -0
  78. package/static/certs/spcp.crt +20 -0
  79. package/static/html/consent.html +40 -0
  80. package/static/html/login-page.html +271 -0
  81. package/static/myinfo/v2.json +6154 -0
  82. package/static/myinfo/v3.json +29386 -0
  83. package/static/saml/corppass.xml +21 -0
  84. package/static/saml/unsigned-assertion.xml +24 -0
  85. package/static/saml/unsigned-response.xml +19 -0
@@ -0,0 +1,271 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <!-- <meta charset="utf-8"> -->
5
+ <meta charset="utf-8">
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
+ <meta name="viewport" content="width=device-width, initial-scale=1">
8
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
9
+ <meta name="description" content="MockPass is a mock SingPass/CorpPass server for dev purposes.">
10
+ <!-- Add to homescreen for Chrome on Android -->
11
+ <meta name="mobile-web-app-capable" content="yes">
12
+ <!-- Add to homescreen for Safari on iOS -->
13
+ <meta name="apple-mobile-web-app-capable" content="yes">
14
+ <meta name="apple-mobile-web-app-status-bar-style" content="black">
15
+ <meta name="apple-mobile-web-app-title" content="Web Starter Kit">
16
+ <link rel="icon" type="img/ico" href="/mockpass/resources/img/favicon.ico">
17
+ <title>MockPass Login</title>
18
+ <link rel="stylesheet" type="text/css" href="/mockpass/resources/plugins/bootstrap-3.3.6/css/bootstrap.min.css" media="all">
19
+ <link rel="stylesheet" type="text/css" href="/mockpass/resources/css/style-main.css" media="all">
20
+ <link rel="stylesheet" type="text/css" href="/mockpass/resources/css/common.css" media="all">
21
+ <link rel="stylesheet" type="text/css" href="/mockpass/resources/css/animate.css" media="all">
22
+ <script src="/mockpass/resources/js/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
23
+ <script src="/mockpass/resources/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
24
+ <script type="text/javascript" src="/mockpass/resources/js/login-common.js"></script>
25
+ </head>
26
+ <body>
27
+ <div class="homepagebody-wrapper">
28
+ <div class="sp-img-bg">
29
+ <div class="container-wrapper-header">
30
+ <div class="announcement-container" >
31
+ <div class="container">
32
+ <div class="col-lg-12 col-md-12 col-sm-12">
33
+ <div class="row">
34
+ <div class="alert alert-info alert-labeled">
35
+ <div class="alert-labeled-row">
36
+ <span class="alert-label alert-label-left alert-labelled-cell"></span>
37
+ <p class="alert-body alert-body-right alert-labelled-cell">
38
+ <span class="announcement-title">Advisory Note</span>
39
+ <br/>
40
+ <span class="announcement-body">
41
+ Your MockPass account contains a lot of personal data. Do not share your username, password and 2FA details with anyone.
42
+ </span>
43
+ </p>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ <div class="clearfix"></div>
51
+ <div class="mainHeaderContainer container hidden-xs hidden-sm hidden-md">
52
+ <div class="mockpass-logo-container pull-left"> <a title="MockPass" aria-label="MockPass" class="mockpass-logo">MockPass</a> </div>
53
+ <div class="placeholder-logo-container pull-right hidden-xs">
54
+ <a target="_blank" rel="noopener noreferrer" class="placeholder-logo" title="MockPass" aria-label="MockPass">MockPass</a>
55
+ </div>
56
+ <div class="header-links hidden-xs">
57
+ <div class="header-utility pull-left">
58
+ <ul>
59
+ <li><a id="font-small" title="Decrease the font size" aria-label="Decrease the font size"><i class="icon font-size font-small-black"></i></a></li>
60
+ <li><a id="font-default" title="Reset the font size" aria-label="Reset the font size"><i class="icon font-size font-default-black"></i></a></li>
61
+ <li><a id="font-large" title="Increase the font size" aria-label="Increase the font size" ><i class="icon font-size font-large-black"></i></a></li>
62
+ <li><a title="Print this page" aria-label="Print this page"><i class="icon printer-icon-black"></i></a></li>
63
+ </ul>
64
+ </div>
65
+ <ul>
66
+ <li class="isicon"><a class="li-links">Contact Us</a></li>|
67
+ <li class="isicon"><a class="li-links">Feedback</a></li>|
68
+ <li class="isicon"><a class="li-links" >Sitemap</a></li>|
69
+ <li class="isicon"><a class="li-links">FAQ</a></li>
70
+ <li><a id="searchIcon" title="Search within MockPass" aria-label="Search within MockPass" class="search-icon-black search-form-tigger" data-toggle="search-form"></a></li>
71
+ </ul>
72
+ </div>
73
+ <div class="search-form-wrapper">
74
+ <div id="searchFormDiv" class="search-form-div">
75
+ <form class="search-form">
76
+ <div class="input-group">
77
+ <input type="text" id="searchtxt" name="search" autocomplete="off" class="search form-control" placeholder="Search">
78
+ <span id="searchFormSubmitBtn" class="input-group-addon" style="font-size: 17px;"><i class="fa fa-search" aria-hidden="true"></i></span>
79
+ <span class="input-group-addon search-close" style="font-size: 19px;"><i class="fa fa-times-circle" aria-hidden="true"></i></span>
80
+ </div>
81
+ </form>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ <div id="mySidenav" class="sidenav hidden-lg">
86
+ <a class="closebtn" data-toggle="nav-toggle"><i class="fa fa-times-circle" aria-hidden="true"></i></a>
87
+ <div class="mNavigation_container">
88
+ <a class="mNavigation_title">Home</a>
89
+ <a class="mNavigation_title">About Us</a>
90
+ <div class="mNavigation_title mDropdown">My Account<span class="plusminus">+</span></div>
91
+ <div class="mNavigation_body" style="display: none;">
92
+ <a class="mNavigation_title">Update Profile</a>
93
+ <a class="mNavigation_title">Change Password</a>
94
+ <a class="mNavigation_title">View History</a>
95
+ <a class="mNavigation_title">Set up 2FA</a>
96
+ <a class="mNavigation_title">Visit MyInfo</a>
97
+ </div>
98
+ <div class="mNavigation_title mDropdown">Services<span class="plusminus">+</span></div>
99
+ <div class="mNavigation_body" style="display: none;">
100
+ <a class="mNavigation_title">Register for MockPass</a>
101
+ <a class="mNavigation_title">Check Status</a>
102
+ <a class="mNavigation_title">Reset Password</a>
103
+ <a class="mNavigation_title">Forgot MockPass ID</a>
104
+ </div>
105
+ <a class="mNavigation_title">Help and FAQ</a>
106
+ <a class="mNavigation_title">Instructional Guides</a>
107
+ <a class="mNavigation_title">Counter Locations</a>
108
+ <a class="mNavigation_title">News</a>
109
+ <a class="mNavigation_title">Contact Us</a>
110
+ <a class="mNavigation_title">Sitemap</a>
111
+ </div>
112
+ </div>
113
+ <div id="mobile-header" class="hidden-lg">
114
+ <span style="font-size:30px; cursor:pointer; float:left" data-toggle="nav-toggle"><i class="fa fa-bars" aria-hidden="true"></i></span>
115
+ <span class="mobile-mockpass-logo visible-xs visible-xs visible-sm visible-md hidden-lg" title="MockPass" aria-label="MockPass"></span>
116
+ </div>
117
+ </div>
118
+ <div class="container-wrapper-navigator">
119
+ <div class="container-navigator">
120
+ <nav class="navbar sidebar hidden-xs hidden-sm hidden-md visible-lg" role="navigation">
121
+ <div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
122
+ <ul class="nav navbar-nav">
123
+ <li class="aboutuslist sidebarlist"><a class="listtitle" title="About MockPass" aria-label="About MockPass" >About Us<span class="hidden-xs showopacity sidebar-aboutusIcon"></span></a></li>
124
+ <li class="faqlist sidebarlist"><a class="listtitle" title="Frequently Asked Questions (FAQ)" aria-label="Frequently Asked Questions (FAQ)" >FAQ<span class=" hidden-xs showopacity sidebar-faqIcon"></span></a></li>
125
+ <li class="instructvideolist sidebarlist"><a class="listtitle" title="Instructional Guides for MockPass" aria-label="Instructional Guides for MockPass" >Instructional Guides<span class="hidden-xs showopacity sidebar-videoIcon"></span></a></li>
126
+ <li class="counterlocationlist sidebarlist"><a class="listtitle" title="MockPass Counter Locations" aria-label="MockPass Counter Locations" >Counter Locations<span class="hidden-xs showopacity sidebar-counterlocationIcon"></span></a></li>
127
+ <li class="newslist sidebarlist"><a class="listtitle" title="News about MockPass" aria-label="News about MockPass" >News<span class="hidden-xs showopacity sidebar-newsIcon"></span></a></li>
128
+ <li class="contactuslist sidebarlist"><a class="listtitle" title="Contact MockPass" aria-label="Contact MockPass" >Contact Us<span class="hidden-xs showopacity sidebar-contactusIcon"></span></a></li>
129
+ </ul>
130
+ </div>
131
+ </nav>
132
+ </div>
133
+ </div>
134
+ <div class="page-content">
135
+ <div class="homepagebody-container">
136
+ <div class="loginbtn-container visible-xs visible-sm visible-md">
137
+ <div class="login-button">
138
+ <button id="loginModelbtn" class="btn btn-primary btn-lg btn-login" data-toggle="modal" data-target="#myModalHorizontal" onclick="showLoadTab()">Login <i class="fa fa-lock" aria-hidden="true"></i></button>
139
+ </div>
140
+ </div>
141
+ <div class="container visible-lg">
142
+ <div class="login-button">
143
+ <button id="loginModelbtn" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModalHorizontal" onclick="showLoadTab()">Login <i class="fa fa-lock" aria-hidden="true"></i></button>
144
+ </div>
145
+ </div>
146
+ <div id="myModalHorizontal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
147
+ <div class="homepageLogin modal-dialog">
148
+ <div class="login-modal-content" style="overflow: visible">
149
+
150
+ <div class="login-form-body">
151
+ <span id="sp-mobile-tooltip" class="sp-mobile-tooltip ani-rotate">Click here to log in with MockPass Mobile app</span>
152
+ <ul class="final-login">
153
+ <li id="loginli" class="logintab active">
154
+ <a title="Login" aria-label="Login" data-toggle="tab" href="#sectionA"></a>
155
+ </li>
156
+ <li id="qrcodeloginli" class="qrtab">
157
+ <a title="MockPass Mobile" aria-label="MockPass Mobile"></a>
158
+ </li>
159
+ </ul>
160
+ <div class="white-area"></div>
161
+ <div class="tab-content">
162
+ <div id="sectionA" class="tab-pane fade in active">
163
+ <div class="innter-form">
164
+ <form id="login" name="LoginForm" class="innate-form" method="post">
165
+ <div id="LoginForm">
166
+ <div class="login-label">Log in</div>
167
+ <br>
168
+ <div class="dropdown" style="width: 100%; ">
169
+ <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="width: 100%; border: 2px solid #ccc; border-radius: 5px; background: white; color: rgb(42, 45, 51); text-align: left;">
170
+ Select username
171
+ </button>
172
+ <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
173
+ {{#values}}
174
+ <li><a href = "{{ assertURL }}">{{ id }}</a></li>
175
+ {{/values}}
176
+ </div>
177
+ </div>
178
+ </div>
179
+ <div>
180
+
181
+ <input type="hidden" name="CSRFToken" value="null" />
182
+ </div>
183
+ </form>
184
+ <form action="{{assertEndpoint}}" method="get" onsubmit="return generateSamlArtFromCustomNric()">
185
+ <br>
186
+ {{#assertEndpoint}}
187
+ <h6>or with your own user</h6>
188
+ <br>
189
+ <input type="hidden" name="RelayState" value="{{ relayState }}" />
190
+ <input type="hidden" id="hashedPartnerId" value="{{ hashedPartnerId }}" />
191
+ <input minlength="9" maxlength="9" id="customNric" placeholder="NRIC" value="S1234567A" style="width: 100%; border: 2px solid #ccc; border-radius: 5px; background: white; color: rgb(42, 45, 51); text-align: left;">
192
+ <input type="hidden" id="customNricSamlArt" name="SAMLart" />
193
+ <button autofocus="" type="submit">Login</button>
194
+ <br>
195
+ <br>
196
+ {{/assertEndpoint}}
197
+ <div class="login__footer">
198
+ <div class="login-note">
199
+ Forgot <a aria-label="Forgot MockPass ID">MockPass ID</a> or <a aria-label="Forgot password">password</a>?
200
+ </div>
201
+ <div class="sp-reglink">
202
+ Don't have an account? <a aria-label="Register now">Register now</a>
203
+ </div>
204
+ </div>
205
+ </form>
206
+ </div>
207
+ <div class="clearfix"></div>
208
+ </div>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ <div class="carousel-container">
218
+ <div class="container">
219
+ <div id="Carousel" class="carousel slide">
220
+ <!-- Carousel items -->
221
+ <div class="carousel-inner">
222
+ <div class="item active">
223
+ <div class="col-xs-4 col-sm-3 col-md-3 col-lg-3"><a class="thumbnail regsp-icon" title="Register for a MockPass account" aria-label="Register for a MockPass account"></a></div>
224
+ <div class="col-xs-4 col-sm-3 col-sm-3 col-lg-3"><a class="thumbnail updateAcctDetails-icon" title="Update your MockPass account details" aria-label="Update your MockPass account details" data-toggle="modal" data-target="#myModalHorizontal" ></a></div>
225
+ <div class="col-xs-4 col-sm-3 col-md-3 col-lg-3"><a class="thumbnail resetpwd-icon" title="Reset your MockPass password" aria-label="Reset your MockPass password"></a></div>
226
+ <div class="hidden-xs col-sm-3 col-sm-3 col-lg-3"><a class="thumbnail setUp2Step2FA-icon" title="Set up your MockPass Two-Factor Authentication (2FA)" aria-label="Set up your MockPass Two-Factor Authentication (2FA)" data-toggle="modal" data-target="#myModalHorizontal"></a></div>
227
+ </div>
228
+ <div class="item">
229
+ <div class="col-xs-4 hidden-sm hidden-md hidden-lg"><a class="thumbnail setUp2Step2FA-icon" title="Set up your MockPass Two-Factor Authentication (2FA)" aria-label="Set up your MockPass Two-Factor Authentication (2FA)" data-toggle="modal" data-target="#myModalHorizontal"></a></div>
230
+ <div class="col-xs-4 col-sm-3 col-md-3 col-lg-3"><a title="Check your MockPass application status" aria-label="Check your MockPass application status" class="thumbnail checkapplication-icon"></a></div>
231
+ <div class="col-xs-4 col-sm-3 col-sm-3 col-lg-3"><a class="thumbnail changePwd-icon" title="Change your MockPass password" aria-label="Change your MockPass password" data-toggle="modal" data-target="#myModalHorizontal"></a></div>
232
+ <div class="hidden-xs col-sm-3 col-sm-3 col-lg-3"><a class="thumbnail viewTransactionHistory-icon" title="View your MockPass transaction history" aria-label="View your MockPass transaction history" data-toggle="modal" data-target="#myModalHorizontal"></a></div>
233
+ <div class="hidden-xs col-sm-3 col-sm-3 col-lg-3"><a class="thumbnail myinfo-icon" title="Visit MyInfo Portal" aria-label="Visit MyInfo Portal"></a></div>
234
+ </div>
235
+ <div class="item">
236
+ <div class="col-xs-4 hidden-sm hidden-md hidden-lg"><a class="thumbnail viewTransactionHistory-icon" title="View your MockPass transaction history" aria-label="View your MockPass transaction history" data-toggle="modal" data-target="#myModalHorizontal"></a></div>
237
+ <div class="col-xs-4 hidden-sm hidden-md hidden-lg"><a title="Visit MyInfo Portal" aria-label="Visit MyInfo Portal" class="thumbnail myinfo-icon"></a></div>
238
+ <div class="col-xs-4 col-sm-12 col-md-12 col-lg-12"><a class="thumbnail retrieveid-icon" title="Retrieve your MockPass user ID" aria-label="Retrieve your MockPass user ID"></a></div>
239
+ </div>
240
+ </div>
241
+ <!-- carousel-control -->
242
+ <a title="Carousel previous" aria-label="Carousel previous" data-slide="prev" class="left carousel-control glyphicon glyphicon-triangle-left"></a>
243
+ <a title="Carousel next" aria-label="Carousel next" data-slide="next" class="right carousel-control glyphicon glyphicon-triangle-right"></a>
244
+
245
+ <ol class="carousel-indicators">
246
+ <li data-target="#Carousel" data-slide-to="0" class="active"></li>
247
+ <li data-target="#Carousel" data-slide-to="1"></li>
248
+ <li data-target="#Carousel" data-slide-to="2"></li>
249
+ </ol>
250
+ </div>
251
+ </div>
252
+ </div>
253
+ <div class="container-wrapper-footer">
254
+ <div class="container">
255
+ <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6">
256
+ <div class="footer-terms-condition"> <a>Privacy Statement</a> | <a>Terms of Use</a> | <a>Rate This Website</a> </div>
257
+ </div>
258
+ <div class="col-md-6 col-lg-6 hidden-xs hidden-sm">
259
+ <div class="footer-copyright">Last updated on 13 January 2019 &nbsp; &nbsp; &#169; &nbsp;2018 MockPass</div>
260
+ </div>
261
+ <div class="col-xs-12 col-sm-12 visible-xs visible-sm">
262
+ <div class="footer-copyright">Last updated on 13 January 2019</div>
263
+ </div>
264
+ <div class="col-xs-12 col-sm-12 visible-xs visible-sm">
265
+ <div class="footer-copyright">&#169; &nbsp;2018 MockPass</div>
266
+ </div>
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </body>
271
+ </html>