1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4
4<script> 5 (function () { 6 var proto = XMLHttpRequest.prototype; 7 var open = proto.open, setRequestHeader = proto.setRequestHeader, send = proto.send; 8 var TOKEN_KEY = 'base44_access_token'; 9 var storedTokenHeader = function () { 10 try { return 'Bearer ' + localStorage.getItem(TOKEN_KEY); } catch (e) { return null; } 11 }; 12 var forgetStoredToken = function () { 13 try { localStorage.removeItem(TOKEN_KEY); localStorage.removeItem('token'); } catch (e) {} 14 }; 15 16 proto.open = function (method, url) { 17 this.__b44IsAuthCheck = /\/entities\/User\/me(\?|$)/.test(url); 18 return open.apply(this, arguments); 19 }; 20 21 proto.setRequestHeader = function (name, value) { 22 if (this.__b44IsAuthCheck && name.toLowerCase() === 'authorization' && value === storedTokenHeader()) { 23 this.__b44SentToken = value; 24 } 25 return setRequestHeader.call(this, name, value); 26 }; 27 28 proto.send = function () { 29 this.addEventListener('loadend', function () { 30 var rejectedTokenStillStored = this.status === 401 && this.__b44SentToken === storedTokenHeader(); 31 if (rejectedTokenStillStored) forgetStoredToken(); 32 }); 33 return send.apply(this, arguments); 34 }; 35})(); 36 </script>
36 37 <meta charset="utf-8"/> 38 <link href="https://media.base44.com/images/public/6a28bf33faa97ed07603f30d/0b7148067_image.jpeg" rel="icon" type="image/jpeg"/> 39 <link href="https://media.base44.com/images/public/6a28bf33faa97ed07603f30d/0b7148067_image.jpeg" rel="apple-touch-icon"/> 40 <meta content="width=device-width, initial-scale=1.0, viewport-fit=cover, maximum-scale=1.0, user-scalable=no" name="viewport"/> 41 <link href="/manifest.json" rel="manifest"/> 42 <meta content="#3b1db4" name="theme-color"/> 43 <meta content="yes" name="mobile-web-app-capable"/> 44 <meta content="yes" name="apple-mobile-web-app-capable"/> 45 <meta content="black-translucent" name="apple-mobile-web-app-status-bar-style"/> 46 <meta content="E4Eazy" name="apple-mobile-web-app-title"/> 47 <meta content="E4Eazy" name="application-name"/> 48 <title> 49 Login | E4EaZy 50 </title> 51 <meta content="Login on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone." name="description"/> 52 <meta content="SaloneNest LLC" name="author"/> 53 <!-- Security headers via meta --> 54 <meta content="nosniff" http-equiv="X-Content-Type-Options"/> 55 <meta content="DENY" http-equiv="X-Frame-Options"/> 56 <meta content="strict-origin-when-cross-origin" http-equiv="Referrer-Policy"/> 57 <meta content="geolocation=(self), camera=(self), microphone=()" http-equiv="Permissions-Policy"/> 58 <!-- Prevent caching of sensitive pages --> 59 <meta content="no-store, no-cache, must-revalidate" http-equiv="Cache-Control"/> 60
60<script crossorigin="" src="/assets/index-DGUvLlBc.js" type="module"> 61 </script>
61 62 <link crossorigin="" href="/assets/index-DKU8dIAI.css" rel="stylesheet"/> 63
63<script type="module"> 64 if (window.self === window.top) { 65 let lastPath = ""; 66 function getPageNameFromPath(path) { 67 const segments = path.split("/").filter(Boolean); 68 return segments[0] || null; 69 } 70 function trackPageView() { 71 const path = window.location.pathname; 72 if (path === lastPath) return; 73 lastPath = path; 74 const pageName = getPageNameFromPath(path) || "home"; 75 const appId = "6a28bf33faa97ed07603f30d"; 76 if (!appId) return; 77 fetch(`/api/app-logs/${appId}/log-user-in-app/${pageName}`, { 78 method: "POST", 79 }).catch(() => {}); 80 } 81 const originalPushState = history.pushState.bind(history); 82 history.pushState = function (...args) { 83 originalPushState(...args); 84 trackPageView(); 85 }; 86 const originalReplaceState = history.replaceState.bind(history); 87 history.replaceState = function (...args) { 88 originalReplaceState(...args); 89 trackPageView(); 90 }; 91 window.addEventListener("popstate", trackPageView); 92 trackPageView(); 93} 94 </script>
94 95 <meta content="Login | E4EaZy" property="og:title"/> 96 <meta content="Login on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone." property="og:description"/> 97 <meta content="https://media.base44.com/images/public/6a28bf33faa97ed07603f30d/fb9047e7c_E4EazyRideLogo.JPG/v1/fill/w_1200,h_630/fb9047e7c_E4EazyRideLogo.JPG" property="og:image"/> 98 <meta content="https://e4eazy.app/login" property="og:url"/> 99 <meta content="website" property="og:type"/> 100 <meta content="E4EaZy" property="og:site_name"/> 101 <meta content="Login | E4EaZy" name="twitter:title"/> 102 <meta content="Login on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone." name="twitter:description"/> 103 <meta content="https://media.base44.com/images/public/6a28bf33faa97ed07603f30d/fb9047e7c_E4EazyRideLogo.JPG/v1/fill/w_1200,h_630/fb9047e7c_E4EazyRideLogo.JPG" name="twitter:image"/> 104 <meta content="summary_large_image" name="twitter:card"/> 105 <meta content="https://e4eazy.app/login" name="twitter:url"/> 106
106<script> 107 (function () { 108 var titles = {"/login": "Login | E4EaZy", "/register": "Register | E4EaZy", "/forgot-password": "Forgot Password | E4EaZy", "/reset-password": "Reset Password | E4EaZy", "/": "E4EaZy", "/home": "Home | E4EaZy", "/passenger": "Passenger / Passenger Home | E4EaZy", "/driver": "Driver / Driver Home | E4EaZy", "/onboarding": "Onboarding | E4EaZy", "/privacy": "Privacy Policy | E4EaZy", "/contact": "Contact Us | E4EaZy", "/safety-standards": "Safety Standards | E4EaZy", "/policies": "Policies | E4EaZy", "/diaspora": "Diaspora Schedule | E4EaZy", "/faq": "FAQ | E4EaZy", "/shared-trip": "Shared Trip | E4EaZy", "/paypal-return": "Pay Pal Return | E4EaZy", "/stripe-return": "Stripe Return | E4EaZy", "/delete-account": "Delete Account | E4EaZy", "/admin": "Admin / Admin Console | E4EaZy", "/roleselect": "E4EaZy", "/role-select": "E4EaZy"}; 109 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 110 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 111 var dashed = function (s) { 112 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 113 }; 114 var decode = function (s) { 115 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 116 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 117 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 118 }; 119 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 120 var norm = function (path) { 121 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 122 return parts.length ? "/" + parts.join("/") : "/"; 123 }; 124 var lastPath = location.pathname, written = document.title, on = true; 125 var sync = function () { 126 // Path only: a hash/query change is the same page, and the SDK strips its own auth 127 // params with replaceState -- neither must clobber a server-rendered title in place. 128 if (!on || location.pathname === lastPath) return; 129 lastPath = location.pathname; 130 if (document.title !== written) { on = false; return; } 131 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 132 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 133 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 134 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 135 // a redirect landing on an unmapped path would bake the placeholder into the stored 136 // snapshot. Leaving the title alone degrades to today's behavior instead. 137 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 138 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 139 // dashes there, and the client cannot tell the two apart. The map emits every reachable 140 // shape per segment instead (_client_url_variants). 141 var title = titles[norm(location.pathname)]; 142 if (title === undefined) return; 143 document.title = title; 144 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 145 // keeping the assigned string would make the next sync() read our own write as the app's. 146 written = document.title; 147 }; 148 var wrap = function (fn) { 149 // The history entry is already pushed by the time sync() runs, so a throw here would 150 // surface inside the host app's router and break navigation. This is injected into apps 151 // we cannot test, so it swallows rather than trusting the trace. 152 return function () { 153 var r = fn.apply(this, arguments); 154 try { sync(); } catch (e) {} 155 return r; 156 }; 157 }; 158 history.pushState = wrap(history.pushState); 159 history.replaceState = wrap(history.replaceState); 160 window.addEventListener("popstate", sync); 161})(); 162 </script>
162 163 <link href="https://e4eazy.app/login" rel="canonical"/> 164
164<script data-seo-source="builder" type="application/ld+json"> 165 {"name": "E4EaZy", "@context": "https://schema.org", "@type": "WebSite", "url": "https://e4eazy.app"} 166 </script>
166 167
167<script data-seo-source="builder" type="application/ld+json"> 168 {"name": "E4EaZy", "logo": "https://media.base44.com/images/public/6a28bf33faa97ed07603f30d/e2983da67_E4Eazy.JPG", "@context": "https://schema.org", "@type": "Organization", "url": "https://e4eazy.app"} 169 </script>
169 170
170<script data-seo-source="builder" type="application/ld+json"> 171 {"@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type": "ListItem", "position": 1, "name": "Home", "item": "https://e4eazy.app/"}, {"@type": "ListItem", "position": 2, "name": "Login | E4EaZy", "item": "https://e4eazy.app/login"}]} 172 </script>
172 173 </head> 174 <body> 175 <div id="root"> 176 <div data-seo-source="builder" id="seo-snapshot" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;"> 177 <main> 178 <header> 179 <h1> 180 Login | E4EaZy 181 </h1> 182 <p> 183 Login on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 184 </p> 185 </header> 186 <nav aria-label="Pages"> 187 <h2> 188 Pages 189 </h2> 190 <ul> 191 <li> 192 <a href="/"> 193 Role Select 194 </a> 195 </li> 196 <li> 197 <a href="/login"> 198 Login 199 </a> 200 â Login on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 201 </li> 202 <li> 203 <a href="/register"> 204 Register 205 </a> 206 â Register on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 207 </li> 208 <li> 209 <a href="/forgot-password"> 210 Forgot Password 211 </a> 212 â Forgot Password on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 213 </li> 214 <li> 215 <a href="/reset-password"> 216 Reset Password 217 </a> 218 â Reset Password on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 219 </li> 220 <li> 221 <a href="/home"> 222 Home 223 </a> 224 â Home on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 225 </li> 226 <li> 227 <a href="/passenger"> 228 Passenger Home 229 </a> 230 â Passenger / Passenger Home on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 231 </li> 232 <li> 233 <a href="/driver"> 234 Driver Home 235 </a> 236 â Driver / Driver Home on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 237 </li> 238 <li> 239 <a href="/privacy"> 240 Privacy Policy 241 </a> 242 â Privacy Policy on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 243 </li> 244 <li> 245 <a href="/contact"> 246 Contact Us 247 </a> 248 â Contact Us on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 249 </li> 250 <li> 251 <a href="/safety-standards"> 252 Safety Standards 253 </a> 254 â Safety Standards on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 255 </li> 256 <li> 257 <a href="/policies"> 258 Policies 259 </a> 260 â Policies on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 261 </li> 262 <li> 263 <a href="/diaspora"> 264 Diaspora Schedule 265 </a> 266 â Diaspora Schedule on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 267 </li> 268 <li> 269 <a href="/faq"> 270 FAQ 271 </a> 272 â FAQ on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 273 </li> 274 <li> 275 <a href="/shared-trip"> 276 Shared Trip 277 </a> 278 â Shared Trip on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 279 </li> 280 <li> 281 <a href="/paypal-return"> 282 Pay Pal Return 283 </a> 284 â Pay Pal Return on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 285 </li> 286 <li> 287 <a href="/stripe-return"> 288 Stripe Return 289 </a> 290 â Stripe Return on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 291 </li> 292 <li> 293 <a href="/delete-account"> 294 Delete Account 295 </a> 296 â Delete Account on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 297 </li> 298 <li> 299 <a href="/admin"> 300 Admin Console 301 </a> 302 â Admin / Admin Console on E4EaZy. E4Eazy: Connecting Passengers and Drivers Seamlessly in Sierra Leone. 303 </li> 304 </ul> 305 </nav> 306 </main> 307 </div> 308 </div> 309 </body> 310</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.