├── README.md ├── alogin.html ├── conf.js ├── css └── style.css ├── error.html ├── errors-en.txt ├── errors.txt ├── favicon.ico ├── img ├── password.svg ├── user.svg └── voucher.svg ├── login.html ├── logout.html ├── md5.js ├── radvert.html ├── redirect.html ├── rlogin.html ├── status.html └── xml ├── WISPAccessGatewayParam.xsd ├── alogin.html ├── error.html ├── flogout.html ├── login.html ├── logout.html └── rlogin.html /README.md: -------------------------------------------------------------------------------- 1 | # new-hotspot-01 2 | 3 | ## config 4 | edit file conf.js 5 | 6 | - setCase : untuk mengatur input huruf besar(uppercase) atau huruf kecil(lowercase). 7 | - defaultMode : mengatur tampilan utama login page, voucher atau member(user & password). 8 | 9 | ```javascript 10 | var config = { 11 | 12 | loginvc : "Masukkan Kode Voucher kemudian klik Connect.", 13 | loginup : "Masukkan Username dan Password
kemudian klik Connect.", 14 | voucherCode : "Kode Voucher", 15 | setCase : "none", // lowercase, uppercase or none 16 | defaultMode : "voucher", // voucher or member 17 | theme : "default", // default, dark, lite 18 | 19 | // status expire 20 | 21 | url : "https://demo.mikhmon.online", // url server Mikhmon 22 | SessionName : "demo", 23 | 24 | } 25 | ``` 26 | -------------------------------------------------------------------------------- /alogin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Internet hotspot - Redirect 11 | 12 | 21 | 22 | 23 | 24 |
25 |
26 |
27 |

You are logged in

28 |

If nothing happens, click here

29 |
30 |
31 |
32 | 33 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /conf.js: -------------------------------------------------------------------------------- 1 | var config = { 2 | 3 | loginvc : "Masukkan Kode Voucher kemudian klik Connect.", 4 | loginup : "Masukkan Username dan Password
kemudian klik Connect.", 5 | voucherCode : "Kode Voucher", 6 | setCase : "none", // lowercase, uppercase or none 7 | defaultMode : "voucher", // voucher or member 8 | theme : "default", // default, dark, lite 9 | 10 | // status expire 11 | 12 | url : "https://demo.mikhmon.online", // url server Mikhmon 13 | SessionName : "demo", 14 | 15 | } 16 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | a,body,div,form,html,img,input,label,p,span{margin:0;padding:0;border:0;font-family:sans-serif,Arial}body,html{min-height:100%;overflow-x:hidden}body{background:#a2a09b;background:-webkit-linear-gradient(315deg,hsla(236.6,0%,53.52%,1) 0,hsla(236.6,0%,53.52%,0) 70%),-webkit-linear-gradient(65deg,hsla(220.75,34.93%,26.52%,1) 10%,hsla(220.75,34.93%,26.52%,0) 80%),-webkit-linear-gradient(135deg,hsla(46.42,36.62%,83.92%,1) 15%,hsla(46.42,36.62%,83.92%,0) 80%),-webkit-linear-gradient(205deg,hsla(191.32,50.68%,56.45%,1) 100%,hsla(191.32,50.68%,56.45%,0) 70%);background:linear-gradient(135deg,hsla(236.6,0%,53.52%,1) 0,hsla(236.6,0%,53.52%,0) 70%),linear-gradient(25deg,hsla(220.75,34.93%,26.52%,1) 10%,hsla(220.75,34.93%,26.52%,0) 80%),linear-gradient(315deg,hsla(46.42,36.62%,83.92%,1) 15%,hsla(46.42,36.62%,83.92%,0) 80%),linear-gradient(245deg,hsla(191.32,50.68%,56.45%,1) 100%,hsla(191.32,50.68%,56.45%,0) 70%)}a{color:#33404a}input,label{vertical-align:middle;white-space:normal;background:0 0;line-height:1}label{position:relative;display:block}p::first-letter{text-transform:uppercase}.main{min-height:calc(100vh - 90px);width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ie-fixMinHeight{display:-webkit-box;display:-ms-flexbox;display:flex}.ico{height:16px;position:absolute;top:0;left:0;margin-top:13px;margin-left:14px}.logo{max-width:200px;display:block;margin:0 auto 30px auto}.logo *{fill:#fff}.lite .logo *{fill:#444}h1{text-align:center;color:#fff;font-size:24px!important}*{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px}.wrap{margin:auto;padding:40px;-webkit-transition:width .3s ease-in-out;transition:width .3s ease-in-out}@media only screen and (min-width:1px) and (max-width:575px){.wrap{width:100%}}form{width:100%;margin-bottom:20px}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.info{color:#fff;text-align:center;margin-bottom:30px}input{outline:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}input:focus{outline:0}input[type=password],input[type=text]{width:100%;border:1px solid background-color: rgba(255,255,255,.8);height:44px;padding:3px 20px 3px 40px;margin-bottom:20px;border-radius:6px;background-color:rgba(255,255,255,.8);-webkit-transition:-webkit-box-shadow .3s ease-in-out;transition:-webkit-box-shadow .3s ease-in-out;transition:box-shadow .3s ease-in-out;transition:box-shadow .3s ease-in-out,-webkit-box-shadow .3s ease-in-out}input[type=password]:focus,input[type=text]:focus{-webkit-box-shadow:0 0 5px 0 #fff;box-shadow:0 0 5px 0 #fff}.bt{opacity:.4}input[type=submit]{background:#3e4d59;color:#fff;border:0;cursor:pointer;text-align:center;width:100%;height:44px;border-radius:6px;-webkit-transition:background .3s ease-in-out;transition:background .3s ease-in-out}input[type=submit]:focus,input[type=submit]:hover{background:#33404a}input[type=submit]{background:#3e4d59;color:#fff;border:0;cursor:pointer;text-align:center;width:100%;height:44px;border-radius:6px;-webkit-transition:background .3s ease-in-out;transition:background .3s ease-in-out}input[type=submit]:focus,input[type=submit]:hover{background:#33404a}table{border-collapse:collapse;width:100%;margin-bottom:20px}table td{color:#fff;border-bottom:1px solid #e6e6e6;padding:10px 4px 10px 0}table td:first-child{font-weight:700}.lite{background:#fff}.lite input[type=password],.lite input[type=text]{border:1px solid #c3c3c3}.lite .info,.lite h1,.lite table td{color:#444}.lite input[type=password]:focus,.lite input[type=text]:focus{-webkit-box-shadow:0 0 5px 0 rgba(62,77,89,.2);box-shadow:0 0 5px 0 rgba(62,77,89,.2)}.dark{background:#343434}.dark input[type=submit]{background:#dc3a41}.dark input[type=submit]:focus,.dark input[type=submit]:hover{background:#b92f35}.dark input[type=password],.dark input[type=text]{background-color:#fff}.dark a{color:#dc3a41}.dark table td{border-bottom:1px solid #505050}.info.alert{color:#da3d41}@media (min-width:576px){.wrap{width:410px}*{font-size:14px!important}}.mode{margin:auto}.mode-btn{background:#3e4d59;color:#fff;border-radius:6px;border:0;text-align:center;vertical-align:middle;text-decoration:none;display:inline-block;cursor:pointer;height:36px;width:49%;-webkit-transition:background .3s ease-in-out;transition:background .3s ease-in-out}.mode-btn:hover{background:#33404a}.mode-btn-active{background:#33404a}.dark .mode-btn{background:#dc3a41}.dark .mode-btn:hover{background:#b92f35}.dark .mode-btn-active{background:#b92f35}.notice{background-color:#ff758c;border-radius:6px;padding:5px;margin-top:10px;margin-bottom:10px;font-size:14px;color:#fff;text-align:center;margin-bottom:5px}#infologin{text-align:center;padding:10px 5px 10px 5px;margin-bottom:5px}iframe{float:left;height:22px;width:100%} 2 | -------------------------------------------------------------------------------- /error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Internet hotspot - Error 9 | 10 | 11 | 12 | 13 |
14 |
15 |
16 |

Hotspot error: $(error)

17 |

Log in page: $(link-login)

18 |
19 |
20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /errors-en.txt: -------------------------------------------------------------------------------- 1 | # This file contains error messages which are shown to user, when http/https 2 | # login is used. 3 | # These messages can be changed to make user interface more friendly, including 4 | # translations to different languages. 5 | # 6 | # Various variables can be used here as well. Most frequently used ones are: 7 | # $(error-orig) - original error message from hotspot 8 | # $(ip) - ip address of a client 9 | # $(username) - username of client trying to log in 10 | 11 | # internal-error 12 | # It should never happen. If it will, error page will be shown 13 | # displaying this error message (error-orig will describe what has happened) 14 | 15 | internal-error = internal error ($(error-orig)) 16 | 17 | # config-error 18 | # Should never happen if hotspot is configured properly. 19 | 20 | config-error = configuration error ($(error-orig)) 21 | 22 | # not-logged-in 23 | # Will happen, if status or logout page is requested by user, 24 | # which actually is not logged in 25 | 26 | not-logged-in = you are not logged in (ip $(ip)) 27 | 28 | # ippool-empty 29 | # IP address for user is to be assigned from ip pool, but there are no more 30 | # addresses in that pool 31 | 32 | ippool-empty = cannot assign ip address - no more free addresses from pool 33 | 34 | # shutting-down 35 | # When shutdown is executed, new clients are not accepted 36 | 37 | shutting-down = hotspot service is shutting down 38 | 39 | # user-session-limit 40 | # If user profile has limit of shared-users, then this error will be shown 41 | # after reaching this limit 42 | 43 | user-session-limit = no more sessions are allowed for user $(username) 44 | 45 | # license-session-limit 46 | # Depending on licence number of active hotspot clients is limited to 47 | # one or another amount. If this limit is reached, following error is displayed. 48 | 49 | license-session-limit = session limit reached ($(error-orig)) 50 | 51 | # wrong-mac-username 52 | # If username looks like MAC address (12:34:56:78:9a:bc), but is not 53 | # a MAC address of this client, login is rejected 54 | 55 | wrong-mac-username = invalid username ($(username)): this MAC address is not yours 56 | 57 | # chap-missing 58 | # If http-chap login method is used, but hotspot program does not receive 59 | # back encrypted password, this error message is shown. 60 | # Possible reasons of failure: 61 | # - JavaScript is not enabled in web browser; 62 | # - login.html page is not valid; 63 | # - challenge value has expired on server (more than 1h of inactivity); 64 | # - http-chap login method is recently removed; 65 | # If JavaScript is enabled and login.html page is valid, 66 | # then retrying to login usually fixes this problem. 67 | 68 | chap-missing = web browser did not send challenge response (try again, enable JavaScript) 69 | 70 | # invalid-username 71 | # Most general case of invalid username or password. If RADIUS server 72 | # has sent an error string with Access-Reject message, then it will 73 | # override this setting. 74 | 75 | invalid-username = invalid username or password 76 | 77 | # invalid-mac 78 | # Local users (on hotspot server) can be bound to some MAC address. If login 79 | # from different MAC is tried, this error message will be shown. 80 | 81 | invalid-mac = user $(username) is not allowed to log in from this MAC address 82 | 83 | # uptime-limit, traffic-limit 84 | # For local hotspot users in case if limits are reached 85 | 86 | uptime-limit = user $(username) has reached uptime limit 87 | traffic-limit = user $(username) has reached traffic limit 88 | 89 | # radius-timeout 90 | # User is authenticated by RADIUS server, but no response is received from it, 91 | # following error will be shown. 92 | 93 | radius-timeout = RADIUS server is not responding 94 | 95 | # auth-in-progress 96 | # Authorization in progress. Client already has issued an authorization request 97 | # which is not yet complete. 98 | 99 | auth-in-progress = already authorizing, retry later 100 | 101 | # radius-reply 102 | # Radius server returned some custom error message 103 | 104 | radius-reply = $(error-orig) 105 | -------------------------------------------------------------------------------- /errors.txt: -------------------------------------------------------------------------------- 1 | # This file contains error messages which are shown to user, when http/https 2 | # login is used. 3 | # These messages can be changed to make user interface more friendly, including 4 | # translations to different languages. 5 | # 6 | # Various variables can be used here as well. Most frequently used ones are: 7 | # $(error-orig) - original error message from hotspot 8 | # $(ip) - ip address of a client 9 | # $(username) - username of client trying to log in 10 | 11 | # internal-error 12 | # It should never happen. If it will, error page will be shown 13 | # displaying this error message (error-orig will describe what has happened) 14 | 15 | internal-error = error internal ($(error-orig)) 16 | 17 | # config-error 18 | # Should never happen if hotspot is configured properly. 19 | 20 | config-error = error konfigurasi ($(error-orig)) 21 | 22 | # not-logged-in 23 | # Will happen, if status or logout page is requested by user, 24 | # which actually is not logged in 25 | 26 | not-logged-in = Anda tidak masuk (ip $(ip)) 27 | 28 | # ippool-empty 29 | # IP address for user is to be assigned from ip pool, but there are no more 30 | # addresses in that pool 31 | 32 | ippool-empty = cannot assign ip address - no more free addresses from pool 33 | 34 | # shutting-down 35 | # When shutdown is executed, new clients are not accepted 36 | 37 | shutting-down = layanan hotspot tutup 38 | 39 | # user-session-limit 40 | # If user profile has limit of shared-users, then this error will be shown 41 | # after reaching this limit 42 | 43 | user-session-limit = kode voucher/user sedang aktif $(username) 44 | 45 | # license-session-limit 46 | # Depending on licence number of active hotspot clients is limited to 47 | # one or another amount. If this limit is reached, following error is displayed. 48 | 49 | license-session-limit = durasi voucher Anda sudah habis ($(error-orig)) 50 | 51 | # wrong-mac-username 52 | # If username looks like MAC address (12:34:56:78:9a:bc), but is not 53 | # a MAC address of this client, login is rejected 54 | 55 | wrong-mac-username = kode voucher/user tidak sesuai ($(username)): MAC address ini bukan milik Anda 56 | 57 | # chap-missing 58 | # If http-chap login method is used, but hotspot program does not receive 59 | # back encrypted password, this error message is shown. 60 | # Possible reasons of failure: 61 | # - JavaScript is not enabled in web browser; 62 | # - login.html page is not valid; 63 | # - challenge value has expired on server (more than 1h of inactivity); 64 | # - http-chap login method is recently removed; 65 | # If JavaScript is enabled and login.html page is valid, 66 | # then retrying to login usually fixes this problem. 67 | 68 | chap-missing = gagal login! enable HTTP PAP di hotspot - server profile. 69 | 70 | # invalid-username 71 | # Most general case of invalid username or password. If RADIUS server 72 | # has sent an error string with Access-Reject message, then it will 73 | # override this setting. 74 | 75 | invalid-username = kode voucher/user & password tidak sesuai, masukkan kembali dengan benar. 76 | 77 | # invalid-mac 78 | # Local users (on hotspot server) can be bound to some MAC address. If login 79 | # from different MAC is tried, this error message will be shown. 80 | 81 | invalid-mac = kode voucher/user $(username) tidak dapat diaktifkan dari MAC address ini 82 | 83 | # uptime-limit, traffic-limit 84 | # For local hotspot users in case if limits are reached 85 | 86 | uptime-limit = kode voucher/user $(username) sudah mencapai batas waktu 87 | traffic-limit = kode voucher/user $(username) sudah mencapai batas kuota 88 | 89 | # radius-timeout 90 | # User is authenticated by RADIUS server, but no response is received from it, 91 | # following error will be shown. 92 | 93 | radius-timeout = RADIUS server tidak merespon 94 | 95 | # auth-in-progress 96 | # Authorization in progress. Client already has issued an authorization request 97 | # which is not yet complete. 98 | 99 | auth-in-progress = sudah diaktifkan, coba lagi nanti 100 | 101 | # radius-reply 102 | # Radius server returned some custom error message 103 | 104 | radius-reply = $(error-orig) 105 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/laksa19/new-hotspot-01/dbb871ab3b4fb5acd61389cafb22f444e7503c55/favicon.ico -------------------------------------------------------------------------------- /img/password.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /img/voucher.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Internet hotspot - Log in 10 | 11 | 12 | 13 | 14 | 15 | $(if chap-id) 16 |
17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 33 | $(endif) 34 |
35 |
36 |
37 | 41 |
42 | 43 | 44 |
45 |
46 | 47 | 48 |
49 | $(if error) 50 |
$(error)
51 | $(endif) 52 |
$(if trial == 'yes')
Free trial available, click here.$(endif) 53 |
54 | 55 |

56 | 60 | 61 | 65 | 66 | 67 | 68 |
69 |

Powered by MikroTik RouterOS

70 | 71 |
72 |
73 |
74 | 75 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /logout.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Internet hotspot - Log out 8 | 9 | 17 | 18 | 19 | 20 |
21 |
22 |
23 |

You have just logged out!

24 | 25 | 26 | 27 | 28 | 29 | $(if session-time-left) 30 | 31 | $(endif) 32 | 33 |
Username$(username)
IP address$(ip)
MAC address$(mac)
Session time$(uptime)
Time left$(session-time-left)
Bytes up / down:$(bytes-in-nice) / $(bytes-out-nice)
34 | 35 | 36 |
37 | 38 |
39 |
40 |
41 |
42 | 43 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /md5.js: -------------------------------------------------------------------------------- 1 | /* 2 | * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message 3 | * Digest Algorithm, as defined in RFC 1321. 4 | * Version 1.1 Copyright (C) Paul Johnston 1999 - 2002. 5 | * Code also contributed by Greg Holt 6 | * See http://pajhome.org.uk/site/legal.html for details. 7 | */ 8 | 9 | /* 10 | * Add integers, wrapping at 2^32. This uses 16-bit operations internally 11 | * to work around bugs in some JS interpreters. 12 | */ 13 | function safe_add(x, y) 14 | { 15 | var lsw = (x & 0xFFFF) + (y & 0xFFFF) 16 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16) 17 | return (msw << 16) | (lsw & 0xFFFF) 18 | } 19 | 20 | /* 21 | * Bitwise rotate a 32-bit number to the left. 22 | */ 23 | function rol(num, cnt) 24 | { 25 | return (num << cnt) | (num >>> (32 - cnt)) 26 | } 27 | 28 | /* 29 | * These functions implement the four basic operations the algorithm uses. 30 | */ 31 | function cmn(q, a, b, x, s, t) 32 | { 33 | return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b) 34 | } 35 | function ff(a, b, c, d, x, s, t) 36 | { 37 | return cmn((b & c) | ((~b) & d), a, b, x, s, t) 38 | } 39 | function gg(a, b, c, d, x, s, t) 40 | { 41 | return cmn((b & d) | (c & (~d)), a, b, x, s, t) 42 | } 43 | function hh(a, b, c, d, x, s, t) 44 | { 45 | return cmn(b ^ c ^ d, a, b, x, s, t) 46 | } 47 | function ii(a, b, c, d, x, s, t) 48 | { 49 | return cmn(c ^ (b | (~d)), a, b, x, s, t) 50 | } 51 | 52 | /* 53 | * Calculate the MD5 of an array of little-endian words, producing an array 54 | * of little-endian words. 55 | */ 56 | function coreMD5(x) 57 | { 58 | var a = 1732584193 59 | var b = -271733879 60 | var c = -1732584194 61 | var d = 271733878 62 | 63 | for(i = 0; i < x.length; i += 16) 64 | { 65 | var olda = a 66 | var oldb = b 67 | var oldc = c 68 | var oldd = d 69 | 70 | a = ff(a, b, c, d, x[i+ 0], 7 , -680876936) 71 | d = ff(d, a, b, c, x[i+ 1], 12, -389564586) 72 | c = ff(c, d, a, b, x[i+ 2], 17, 606105819) 73 | b = ff(b, c, d, a, x[i+ 3], 22, -1044525330) 74 | a = ff(a, b, c, d, x[i+ 4], 7 , -176418897) 75 | d = ff(d, a, b, c, x[i+ 5], 12, 1200080426) 76 | c = ff(c, d, a, b, x[i+ 6], 17, -1473231341) 77 | b = ff(b, c, d, a, x[i+ 7], 22, -45705983) 78 | a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416) 79 | d = ff(d, a, b, c, x[i+ 9], 12, -1958414417) 80 | c = ff(c, d, a, b, x[i+10], 17, -42063) 81 | b = ff(b, c, d, a, x[i+11], 22, -1990404162) 82 | a = ff(a, b, c, d, x[i+12], 7 , 1804603682) 83 | d = ff(d, a, b, c, x[i+13], 12, -40341101) 84 | c = ff(c, d, a, b, x[i+14], 17, -1502002290) 85 | b = ff(b, c, d, a, x[i+15], 22, 1236535329) 86 | 87 | a = gg(a, b, c, d, x[i+ 1], 5 , -165796510) 88 | d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632) 89 | c = gg(c, d, a, b, x[i+11], 14, 643717713) 90 | b = gg(b, c, d, a, x[i+ 0], 20, -373897302) 91 | a = gg(a, b, c, d, x[i+ 5], 5 , -701558691) 92 | d = gg(d, a, b, c, x[i+10], 9 , 38016083) 93 | c = gg(c, d, a, b, x[i+15], 14, -660478335) 94 | b = gg(b, c, d, a, x[i+ 4], 20, -405537848) 95 | a = gg(a, b, c, d, x[i+ 9], 5 , 568446438) 96 | d = gg(d, a, b, c, x[i+14], 9 , -1019803690) 97 | c = gg(c, d, a, b, x[i+ 3], 14, -187363961) 98 | b = gg(b, c, d, a, x[i+ 8], 20, 1163531501) 99 | a = gg(a, b, c, d, x[i+13], 5 , -1444681467) 100 | d = gg(d, a, b, c, x[i+ 2], 9 , -51403784) 101 | c = gg(c, d, a, b, x[i+ 7], 14, 1735328473) 102 | b = gg(b, c, d, a, x[i+12], 20, -1926607734) 103 | 104 | a = hh(a, b, c, d, x[i+ 5], 4 , -378558) 105 | d = hh(d, a, b, c, x[i+ 8], 11, -2022574463) 106 | c = hh(c, d, a, b, x[i+11], 16, 1839030562) 107 | b = hh(b, c, d, a, x[i+14], 23, -35309556) 108 | a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060) 109 | d = hh(d, a, b, c, x[i+ 4], 11, 1272893353) 110 | c = hh(c, d, a, b, x[i+ 7], 16, -155497632) 111 | b = hh(b, c, d, a, x[i+10], 23, -1094730640) 112 | a = hh(a, b, c, d, x[i+13], 4 , 681279174) 113 | d = hh(d, a, b, c, x[i+ 0], 11, -358537222) 114 | c = hh(c, d, a, b, x[i+ 3], 16, -722521979) 115 | b = hh(b, c, d, a, x[i+ 6], 23, 76029189) 116 | a = hh(a, b, c, d, x[i+ 9], 4 , -640364487) 117 | d = hh(d, a, b, c, x[i+12], 11, -421815835) 118 | c = hh(c, d, a, b, x[i+15], 16, 530742520) 119 | b = hh(b, c, d, a, x[i+ 2], 23, -995338651) 120 | 121 | a = ii(a, b, c, d, x[i+ 0], 6 , -198630844) 122 | d = ii(d, a, b, c, x[i+ 7], 10, 1126891415) 123 | c = ii(c, d, a, b, x[i+14], 15, -1416354905) 124 | b = ii(b, c, d, a, x[i+ 5], 21, -57434055) 125 | a = ii(a, b, c, d, x[i+12], 6 , 1700485571) 126 | d = ii(d, a, b, c, x[i+ 3], 10, -1894986606) 127 | c = ii(c, d, a, b, x[i+10], 15, -1051523) 128 | b = ii(b, c, d, a, x[i+ 1], 21, -2054922799) 129 | a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359) 130 | d = ii(d, a, b, c, x[i+15], 10, -30611744) 131 | c = ii(c, d, a, b, x[i+ 6], 15, -1560198380) 132 | b = ii(b, c, d, a, x[i+13], 21, 1309151649) 133 | a = ii(a, b, c, d, x[i+ 4], 6 , -145523070) 134 | d = ii(d, a, b, c, x[i+11], 10, -1120210379) 135 | c = ii(c, d, a, b, x[i+ 2], 15, 718787259) 136 | b = ii(b, c, d, a, x[i+ 9], 21, -343485551) 137 | 138 | a = safe_add(a, olda) 139 | b = safe_add(b, oldb) 140 | c = safe_add(c, oldc) 141 | d = safe_add(d, oldd) 142 | } 143 | return [a, b, c, d] 144 | } 145 | 146 | /* 147 | * Convert an array of little-endian words to a hex string. 148 | */ 149 | function binl2hex(binarray) 150 | { 151 | var hex_tab = "0123456789abcdef" 152 | var str = "" 153 | for(var i = 0; i < binarray.length * 4; i++) 154 | { 155 | str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + 156 | hex_tab.charAt((binarray[i>>2] >> ((i%4)*8)) & 0xF) 157 | } 158 | return str 159 | } 160 | 161 | /* 162 | * Convert an array of little-endian words to a base64 encoded string. 163 | */ 164 | function binl2b64(binarray) 165 | { 166 | var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 167 | var str = "" 168 | for(var i = 0; i < binarray.length * 32; i += 6) 169 | { 170 | str += tab.charAt(((binarray[i>>5] << (i%32)) & 0x3F) | 171 | ((binarray[i>>5+1] >> (32-i%32)) & 0x3F)) 172 | } 173 | return str 174 | } 175 | 176 | /* 177 | * Convert an 8-bit character string to a sequence of 16-word blocks, stored 178 | * as an array, and append appropriate padding for MD4/5 calculation. 179 | * If any of the characters are >255, the high byte is silently ignored. 180 | */ 181 | function str2binl(str) 182 | { 183 | var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks 184 | var blks = new Array(nblk * 16) 185 | for(var i = 0; i < nblk * 16; i++) blks[i] = 0 186 | for(var i = 0; i < str.length; i++) 187 | blks[i>>2] |= (str.charCodeAt(i) & 0xFF) << ((i%4) * 8) 188 | blks[i>>2] |= 0x80 << ((i%4) * 8) 189 | blks[nblk*16-2] = str.length * 8 190 | return blks 191 | } 192 | 193 | /* 194 | * Convert a wide-character string to a sequence of 16-word blocks, stored as 195 | * an array, and append appropriate padding for MD4/5 calculation. 196 | */ 197 | function strw2binl(str) 198 | { 199 | var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks 200 | var blks = new Array(nblk * 16) 201 | for(var i = 0; i < nblk * 16; i++) blks[i] = 0 202 | for(var i = 0; i < str.length; i++) 203 | blks[i>>1] |= str.charCodeAt(i) << ((i%2) * 16) 204 | blks[i>>1] |= 0x80 << ((i%2) * 16) 205 | blks[nblk*16-2] = str.length * 16 206 | return blks 207 | } 208 | 209 | /* 210 | * External interface 211 | */ 212 | function hexMD5 (str) { return binl2hex(coreMD5( str2binl(str))) } 213 | function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) } 214 | function b64MD5 (str) { return binl2b64(coreMD5( str2binl(str))) } 215 | function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) } 216 | /* Backward compatibility */ 217 | function calcMD5(str) { return binl2hex(coreMD5( str2binl(str))) } 218 | -------------------------------------------------------------------------------- /radvert.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Internet hotspot - Advertisement 9 | 10 | 29 | 30 | 31 |
32 |
33 |
34 |

Advertisement

35 |

If nothing happens, open advertisement manually.

36 |
37 |
38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /redirect.html: -------------------------------------------------------------------------------- 1 | $(if http-status == 302)Hotspot redirect$(endif) 2 | $(if http-header == "Location")$(link-redirect)$(endif) 3 | 4 | 5 | ... 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /rlogin.html: -------------------------------------------------------------------------------- 1 | $(if http-status == 302)Hotspot login required$(endif) 2 | $(if http-header == "Location")$(link-redirect)$(endif) 3 | 4 | 19 | 20 | ... 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /status.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | $(if refresh-timeout) 4 | 5 | $(endif) 6 | 7 | 8 | 9 | 10 | Internet hotspot - Status 11 | 12 | 31 | 32 | 33 | 34 |
35 |
36 |
37 | $(if login-by == 'trial') 38 |

Hi, trial user!

39 | $(elif login-by != 'mac') 40 |

Hi, $(username)!

41 | 42 | $(endif) 43 | 44 |
45 | 46 | 47 | 48 | 49 | $(if remain-bytes-total) 50 | 51 | $(endif) 52 | $(if session-time-left) 53 | 54 | $(else) 55 | 56 | $(endif) 57 | $(if blocked == 'yes') 58 | 60 | 61 | $(elif refresh-timeout) 62 | 63 | $(endif) 64 | 65 |
IP address$(ip)
MAC address$(mac)
Bytes up / down$(bytes-in-nice) / $(bytes-out-nice)
Data left$(remain-bytes-total-nice)
Connected / left$(uptime) / $(session-time-left)
Connected$(uptime)
Status 59 | Advertisement required
Status refresh$(refresh-timeout)
Expired
66 | $(if login-by-mac != 'yes') 67 | 70 | 71 | $(endif) 72 |
73 |
74 |
75 |
76 | 77 | 78 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /xml/WISPAccessGatewayParam.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /xml/alogin.html: -------------------------------------------------------------------------------- 1 | 19 | -------------------------------------------------------------------------------- /xml/error.html: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /xml/flogout.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /xml/login.html: -------------------------------------------------------------------------------- 1 | 23 | -------------------------------------------------------------------------------- /xml/logout.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /xml/rlogin.html: -------------------------------------------------------------------------------- 1 | 16 | --------------------------------------------------------------------------------