Webserver init

This commit is contained in:
KyuDev 2023-04-13 15:54:27 +02:00
commit 94c28a75f0
5 changed files with 520 additions and 0 deletions

19
webserver/http_referer.py Normal file
View File

@ -0,0 +1,19 @@
from flask import Flask, request, redirect
app = Flask(__name__)
app.config.update(
DEBUG = False,
SECRET_KEY = 'secret_this_wont_be_important'
)
@app.errorhandler(401)
def custom_401(error):
return redirect("401 please just stop, thanks")
@app.errorhandler(404)
def custom_404(error):
return("page not found")
if __name__ == '__main__':
app.run(host='185.78.255.231', port=80)

65
webserver/main.py Normal file
View File

@ -0,0 +1,65 @@
import os, datetime, requests, random, json, time, string
from werkzeug.security import generate_password_hash
from werkzeug.utils import secure_filename
from flask import Flask, request, render_template, redirect, send_file, url_for, jsonify, session, flash, after_this_request
from flask_login import current_user, login_user, LoginManager, UserMixin, login_required, login_user, logout_user
from flask_mobility import Mobility
from flask_caching import Cache
from flask_ipban import IpBan
from device_detector import DeviceDetector
from flask_sslify import SSLify
from requests_oauthlib import OAuth2Session
from shutil import copyfile
from werkzeug.middleware.shared_data import SharedDataMiddleware
from oauthlib.oauth2 import WebApplicationClient
from discord_webhook import DiscordWebhook, DiscordEmbed
contact_support_dc_webhook = ""
app = Flask(__name__)
app.config.update(
DEBUG=False,
SECRET_KEY='secret_password_' + ''.join(str(random.choice(string.ascii_lowercase)) for i in range(20))
)
login_manager = LoginManager()
login_manager.init_app(app)
class User(UserMixin):
def __init__(self, id):
self.id = id
self.name = "user" + str(id)
self.password = self.name + "_secret"
def __repr__(self):
return "%d/%s/%s" % (self.id, self.name, self.password)
@login_manager.user_loader
def load_user(userid):
return User(userid)
def get_username(self):
return self.username
@app.route('/')
def homepage():
return redirect("/login")
# Error handling
@app.errorhandler(401)
def custom_401(error):
return redirect("/")
@app.errorhandler(404)
def custom_404(error):
return redirect("/")
if __name__ == '__main__':
app.run(host='185.78.255.231', threaded=True,use_reloader=True, port=443,
ssl_context=('/etc/letsencrypt/live/cipherwatch.asdatindustries.com/fullchain.pem', '/etc/letsencrypt/live/cipherwatch.asdatindustries.com/privkey.pem'))

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1,217 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Primary Meta Tags -->
<title>Invalid!</title>
<link rel="icon" href="/static/icon/main_free.png" type="image/png" />
<style>
body {
margin: 0;
color: #6a6f8c;
background: #403f3f;
font: 600 16px/18px "Open Sans", sans-serif;
}
*,
:after,
:before {
box-sizing: border-box;
}
.clearfix:after,
.clearfix:before {
content: "";
display: table;
}
.clearfix:after {
clear: both;
display: block;
}
a {
color: inherit;
text-decoration: none;
}
.login-wrap {
width: 100%;
margin: auto;
max-width: 525px;
min-height: 670px;
position: relative;
background: url(http://cdn.eso.org/images/screen/eso2202a.jpg)
no-repeat center;
box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24),
0 17px 50px 0 rgba(0, 0, 0, 0.19);
}
.login-html {
width: 100%;
height: 100%;
position: absolute;
padding: 90px 70px 50px 70px;
background: rgba(40, 57, 101, 0.9);
}
.login-html .sign-in-htm,
.login-html .sign-up-htm {
top: 0;
left: 0;
right: 0;
bottom: 0;
position: absolute;
transform: rotateY(180deg);
backface-visibility: hidden;
transition: all 0.4s linear;
}
.login-html .sign-in,
.login-html .sign-up,
.login-form .group .check {
display: none;
}
.login-html .tab,
.login-form .group .label,
.login-form .group .button {
text-transform: uppercase;
}
.login-html .tab {
font-size: 22px;
margin-right: 15px;
padding-bottom: 5px;
margin: 0 15px 10px 0;
display: inline-block;
border-bottom: 2px solid transparent;
}
.login-html .sign-in:checked + .tab,
.login-html .sign-up:checked + .tab {
color: #fff;
border-color: #1161ee;
}
.login-form {
min-height: 345px;
position: relative;
perspective: 1000px;
transform-style: preserve-3d;
}
.login-form .group {
margin-bottom: 15px;
}
.login-form .group .label,
.login-form .group .input,
.login-form .group .button {
width: 100%;
color: #fff;
display: block;
}
.login-form .group .input,
.login-form .group .button {
border: none;
padding: 15px 20px;
border-radius: 25px;
background: rgba(255, 255, 255, 0.1);
}
.login-form .group input[data-type="password"] {
text-security: circle;
-webkit-text-security: circle;
}
.login-form .group .label {
color: #aaa;
font-size: 12px;
}
.login-form .group .button {
background: #1161ee;
}
.login-form .group label .icon {
width: 15px;
height: 15px;
border-radius: 2px;
position: relative;
display: inline-block;
background: rgba(255, 255, 255, 0.1);
}
.login-form .group label .icon:before,
.login-form .group label .icon:after {
content: "";
width: 10px;
height: 2px;
background: #fff;
position: absolute;
transition: all 0.2s ease-in-out 0s;
}
.login-form .group label .icon:before {
left: 3px;
width: 5px;
bottom: 6px;
transform: scale(0) rotate(0);
}
.login-form .group label .icon:after {
top: 6px;
right: 0;
transform: scale(0) rotate(0);
}
.login-form .group .check:checked + label {
color: #fff;
}
.login-form .group .check:checked + label .icon {
background: #1161ee;
}
.login-form .group .check:checked + label .icon:before {
transform: scale(1) rotate(45deg);
}
.login-form .group .check:checked + label .icon:after {
transform: scale(1) rotate(-45deg);
}
.login-html
.sign-in:checked
+ .tab
+ .sign-up
+ .tab
+ .login-form
.sign-in-htm {
transform: rotate(0);
}
.login-html .sign-up:checked + .tab + .login-form .sign-up-htm {
transform: rotate(0);
}
.hr {
height: 2px;
margin: 60px 0 50px 0;
background: rgba(255, 255, 255, 0.2);
}
.foot-lnk {
text-align: center;
}
.fancyfont {
font-family: roboto;
font-size: 15px;
}
</style>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet">
</head>
<div class="login-wrap" style="margin-top: 120px;">
<div class="login-html">
<input id="tab-1" type="radio" name="tab" class="sign-in" checked><label for="tab-1" class="tab">Error</label>
<input id="tab-2" type="radio" name="tab" class="sign-up"><label for="tab-2" class="tab"></label>
<div class="login-form" method="post" id="post" autocomplete="off">
<div class="sign-in-htm">
<div class="group">
Sorry, but you seem to have entered invalid credentials!
</div>
<div class="hr"></div>
<div class="group">
<a href="/login">
<input class="button fancyfont" style="background-color:rgba(255, 255, 255, 0.696);color: black; text-align: center;" value="Back to Login"/>
</a>
</div>
<div class="group">
<a href="/">
<input class="button fancyfont" style="background-color:rgba(255, 255, 255, 0.696);color: black; text-align: center;" value="Contact / Support"/>
</a>
</div>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,219 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<!-- Primary Meta Tags -->
<title>Login</title>
<link rel="icon" href="/static/icon/main_free.png" type="image/png" />
<meta name="title" content="Login CyberRange">
<meta name="description" content="learn about Cyber Attacks how you would encounter them!">
<style>
body {
margin: 0;
color: #6a6f8c;
background: #403f3f;
font: 600 16px/18px "Open Sans", sans-serif;
}
*,
:after,
:before {
box-sizing: border-box;
}
.clearfix:after,
.clearfix:before {
content: "";
display: table;
}
.clearfix:after {
clear: both;
display: block;
}
a {
color: inherit;
text-decoration: none;
}
.login-wrap {
width: 100%;
margin: auto;
max-width: 525px;
min-height: 670px;
position: relative;
background: url(http://cdn.eso.org/images/screen/eso2202a.jpg)
no-repeat center;
box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24),
0 17px 50px 0 rgba(0, 0, 0, 0.19);
}
.login-html {
width: 100%;
height: 100%;
position: absolute;
padding: 90px 70px 50px 70px;
background: rgba(40, 57, 101, 0.9);
}
.login-html .sign-in-htm,
.login-html .sign-up-htm {
top: 0;
left: 0;
right: 0;
bottom: 0;
position: absolute;
transform: rotateY(180deg);
backface-visibility: hidden;
transition: all 0.4s linear;
}
.login-html .sign-in,
.login-html .sign-up,
.login-form .group .check {
display: none;
}
.login-html .tab,
.login-form .group .label,
.login-form .group .button {
text-transform: uppercase;
}
.login-html .tab {
font-size: 22px;
margin-right: 15px;
padding-bottom: 5px;
margin: 0 15px 10px 0;
display: inline-block;
border-bottom: 2px solid transparent;
}
.login-html .sign-in:checked + .tab,
.login-html .sign-up:checked + .tab {
color: #fff;
border-color: #1161ee;
}
.login-form {
min-height: 345px;
position: relative;
perspective: 1000px;
transform-style: preserve-3d;
}
.login-form .group {
margin-bottom: 15px;
}
.login-form .group .label,
.login-form .group .input,
.login-form .group .button {
width: 100%;
color: #fff;
display: block;
}
.login-form .group .input,
.login-form .group .button {
border: none;
padding: 15px 20px;
border-radius: 25px;
background: rgba(255, 255, 255, 0.1);
}
.login-form .group input[data-type="password"] {
text-security: circle;
-webkit-text-security: circle;
}
.login-form .group .label {
color: #aaa;
font-size: 12px;
}
.login-form .group .button {
background: #1161ee;
}
.login-form .group label .icon {
width: 15px;
height: 15px;
border-radius: 2px;
position: relative;
display: inline-block;
background: rgba(255, 255, 255, 0.1);
}
.login-form .group label .icon:before,
.login-form .group label .icon:after {
content: "";
width: 10px;
height: 2px;
background: #fff;
position: absolute;
transition: all 0.2s ease-in-out 0s;
}
.login-form .group label .icon:before {
left: 3px;
width: 5px;
bottom: 6px;
transform: scale(0) rotate(0);
}
.login-form .group label .icon:after {
top: 6px;
right: 0;
transform: scale(0) rotate(0);
}
.login-form .group .check:checked + label {
color: #fff;
}
.login-form .group .check:checked + label .icon {
background: #1161ee;
}
.login-form .group .check:checked + label .icon:before {
transform: scale(1) rotate(45deg);
}
.login-form .group .check:checked + label .icon:after {
transform: scale(1) rotate(-45deg);
}
.login-html
.sign-in:checked
+ .tab
+ .sign-up
+ .tab
+ .login-form
.sign-in-htm {
transform: rotate(0);
}
.login-html .sign-up:checked + .tab + .login-form .sign-up-htm {
transform: rotate(0);
}
.hr {
height: 2px;
margin: 60px 0 50px 0;
background: rgba(255, 255, 255, 0.2);
}
.foot-lnk {
text-align: center;
}
.fancyfont {
font-family: roboto;
font-size: 15px;
}
</style>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap" rel="stylesheet">
</head>
<div class="login-wrap" style="margin-top: 120px;">
<div class="login-html">
<input id="tab-1" type="radio" name="tab" class="sign-in" checked><label for="tab-1" class="tab">Login</label>
<input id="tab-2" type="radio" name="tab" class="sign-up"><label for="tab-2" class="tab">Register</label>
<form method="post" id="post" autocomplete="off" class="login-form">
<div class="sign-in-htm">
<div class="group">
<label for="username" class="label fancyfont">Username or Email</label>
<input id="username" name="username" type="text" class="input">
</div>
<div class="group">
<label for="password_login" class="label fancyfont">Password</label>
<input id="password_login" name="password_login" type="password" class="input" data-type="password">
</div>
<div class="group">
<input type="submit" onclick="document.getElementById('post').submit()" class="button fancyfont" style="background-color:rgba(29, 116, 230, 0.696);color: black" value="Submit"/>
</div>
</div>
<div class="sign-up-htm">
<div class="foot-lnk">
<label for="tab-1">Registering is disabled</a>
</div>
</div>
</form>
</div>
</div>