ko 1 mēnesi atpakaļ
revīzija
60641d9882
2 mainītis faili ar 146 papildinājumiem un 0 dzēšanām
  1. 63 0
      auth.py
  2. 83 0
      template/login.html

+ 63 - 0
auth.py

@@ -0,0 +1,63 @@
+from flask import Flask, request, render_template
+import paramiko
+import time
+import re
+# MikroTik API credentials
+ROUTER_IP = '10.10.10.10'
+USERNAME = 'admin'
+PASSWORD = 'PASSWORD'
+
+app = Flask(__name__)
+
+# Configure Flask to trust X-Forwarded-For header
+app.config['TRUSTED_PROXIES'] = '127.0.0.1'
+
+def remove_port(ip_address_with_port):
+    return re.split(r'[;,|:]',ip_address_with_port)
+
+# Function to add IP address to the specified list with a timeout
+def add_to_list(ip_address_arg):
+    ip_address = remove_port(ip_address_arg)[0]
+    ssh = paramiko.SSHClient()
+    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+    ssh.connect(ROUTER_IP,port=22, username=USERNAME, password=PASSWORD)
+
+    # Send command to add IP address to address list
+    command = f"/ip firewall address-list add list=port_knocking_stage1 address={ip_address} timeout=12h"
+    stdin, stdout, stderr = ssh.exec_command(command)
+
+    # Wait for the command to execute
+    time.sleep(1)
+
+    # Check for any errors
+    if stderr.read().decode():
+        print("Error:", stderr.read().decode())
+    else:
+        print("IP address added successfully. "+ip_address)
+
+    ssh.close()
+# Dummy database for demonstration (replace with your own authentication mechanism)
+users = {
+    'admin': 'PASS',
+    'guest': 'PASS'
+}
+
+# Authentication route
+@app.route('/', methods=['GET', 'POST'])
+def login():
+    error = None
+    if request.method == 'POST':
+        username = request.form['username']
+        password = request.form['password']
+        if username in users and users[username] == password:
+            user_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
+            add_to_list(user_ip)
+            add_to_list(user_ip)
+            success_message = 'Authenticated successfully! Your IP address <strong>{}</strong> has been added to the whitelist for 12 hours.<br> <a href="https://filevista.ardugeek.ovh/public/58/home-server-wan.rdp" download>Download RDP File Here</a>'.format(remove_port(user_ip)[0])
+            return '<div style="font-family: Arial, sans-serif; text-align: center; margin-top: 50px;"><h2 style="color: #4CAF50;">Success!</h2><p>{}</p></div>'.format(success_message)
+        else:
+            error = 'Invalid credentials. Please try again.'
+    return render_template('login.html', error=error)
+
+if __name__ == '__main__':
+    app.run(debug=False)

+ 83 - 0
template/login.html

@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Login</title>
+    <style>
+        body {
+            font-family: Arial, sans-serif;
+            background-color: #f5f5f5;
+            margin: 0;
+            padding: 0;
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 100vh;
+        }
+        .container {
+            background-color: #fff;
+            padding: 20px;
+            border-radius: 8px;
+            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
+            text-align: center;
+        }
+        h2 {
+            margin-bottom: 20px;
+        }
+        .logo {
+            max-width: 100px;
+            margin-bottom: 20px;
+        }
+        form {
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+        }
+        label {
+            margin-bottom: 5px;
+        }
+        input[type="text"],
+        input[type="password"] {
+            width: 100%;
+            padding: 10px;
+            margin-bottom: 10px;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            box-sizing: border-box;
+        }
+        input[type="submit"] {
+            width: 100%;
+            padding: 10px;
+            background-color: #007bff;
+            color: #fff;
+            border: none;
+            border-radius: 5px;
+            cursor: pointer;
+            transition: background-color 0.3s ease;
+        }
+        input[type="submit"]:hover {
+            background-color: #0056b3;
+        }
+        .error {
+            color: red;
+            margin-top: 10px;
+        }
+    </style>
+</head>
+<body>
+    <div class="container">
+        <h2>Login</h2>
+        {% if error %}
+        <p class="error">{{ error }}</p>
+        {% endif %}
+        <form action="/" method="post">
+            <label for="username">Username:</label>
+            <input type="text" id="username" name="username">
+            <label for="password">Password:</label>
+            <input type="password" id="password" name="password">
+            <input type="submit" value="Login">
+        </form>
+    </div>
+</body>
+</html>