Initial commit
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from typing import Optional, Any
|
||||
from blacksheep.server.controllers import Controller
|
||||
from blacksheep.messages import Request, Response
|
||||
from blacksheep.utils import join_fragments
|
||||
from blacksheep.server.templating import view
|
||||
from datetime import datetime
|
||||
from passlib.hash import pbkdf2_sha256 as sha256
|
||||
|
||||
class TemplatingNotConfiguredException(Exception):
|
||||
def __init__(self) -> None:
|
||||
super().__init__(
|
||||
"Server side HTML templating is not configured. Configure templating using "
|
||||
"the function `use_templates` from blacksheep.server.templating."
|
||||
)
|
||||
|
||||
class Struct:
|
||||
def __init__(self, **entries):
|
||||
self.__dict__.update(entries)
|
||||
|
||||
|
||||
class BaseController(Controller):
|
||||
model: dict = {}
|
||||
session: dict = {}
|
||||
|
||||
async def on_request(self, request: Request):
|
||||
if 'login' in request.session:
|
||||
if request.session['login']:
|
||||
def get_copy():
|
||||
now = datetime.now()
|
||||
return "{} {}".format(now.year, "Gemastik")
|
||||
|
||||
self.model = {"session" : request.session, "copy" : get_copy}
|
||||
self.session = request.session
|
||||
|
||||
@classmethod
|
||||
def route(cls):
|
||||
cls_name = cls.class_name()
|
||||
if cls_name.lower() != "index":
|
||||
return join_fragments(cls_name.lower())
|
||||
|
||||
def view(
|
||||
self, name: Optional[str] = None, model: Optional[Any] = None, **kwargs
|
||||
) -> Response:
|
||||
|
||||
final_model = {}
|
||||
|
||||
if name is None:
|
||||
name = self.get_default_view_name()
|
||||
|
||||
if self.templates is None:
|
||||
raise TemplatingNotConfiguredException()
|
||||
|
||||
if self.model:
|
||||
final_model = { **self.model }
|
||||
|
||||
if model:
|
||||
final_model = {**model, **final_model}
|
||||
|
||||
return view(self.templates, self.full_view_name(name), final_model, **kwargs)
|
||||
@@ -0,0 +1,4 @@
|
||||
from .auth import *
|
||||
from .dashboard import *
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
from .BaseController import BaseController
|
||||
from blacksheep.server.controllers import get, post
|
||||
from blacksheep.messages import Request
|
||||
from blacksheep.server.bindings import FromForm
|
||||
from blacksheep.server.responses import redirect
|
||||
from guardpost.asynchronous.authentication import Identity
|
||||
from passlib.hash import pbkdf2_sha256 as sha256
|
||||
from models import Users
|
||||
from dataclasses import dataclass
|
||||
|
||||
@dataclass
|
||||
class LoginForm:
|
||||
username: str
|
||||
password: str
|
||||
|
||||
@dataclass
|
||||
class RegisterUser:
|
||||
username: str
|
||||
password: str
|
||||
|
||||
class Auth(BaseController):
|
||||
@get('/')
|
||||
async def index(self):
|
||||
return redirect('/auth/login')
|
||||
|
||||
@get('/login')
|
||||
async def login_page(self, user: Identity):
|
||||
if user:
|
||||
return redirect("/dashboard")
|
||||
|
||||
return self.view()
|
||||
|
||||
@post('/login')
|
||||
async def login_action(self, request: Request, data: FromForm[LoginForm], bs_message):
|
||||
getUser = Users.objects.filter(username=data.value.username).first()
|
||||
|
||||
if not getUser:
|
||||
bs_message.add("Wrong Username or Password", "error")
|
||||
return redirect('/auth/login')
|
||||
|
||||
if sha256.verify(data.value.password, getUser.password):
|
||||
request.session.update({
|
||||
"id" : str(getUser.id),
|
||||
"username" : getUser.username,
|
||||
"login" : True,
|
||||
})
|
||||
return redirect("/dashboard")
|
||||
|
||||
bs_message.add("Wrong Username or Password", "error")
|
||||
return redirect("/auth/login")
|
||||
|
||||
@get('/register')
|
||||
async def register_page(self, user: Identity):
|
||||
if user:
|
||||
return redirect("/dashboard")
|
||||
|
||||
return self.view()
|
||||
|
||||
|
||||
@post('/register')
|
||||
async def register_action(self, data: FromForm[RegisterUser], bs_message):
|
||||
getUser = Users.objects.filter(username=data.value.username).first()
|
||||
|
||||
if getUser:
|
||||
bs_message.add("Username already used, please use other username", "error")
|
||||
return redirect("/auth/register")
|
||||
|
||||
user = Users(username=data.value.username, password=sha256.encrypt(data.value.password))
|
||||
user.save()
|
||||
|
||||
bs_message.add("Success register", "success")
|
||||
return redirect("/auth/login")
|
||||
@@ -0,0 +1,54 @@
|
||||
import subprocess, zlib, gzip, json, urllib.request
|
||||
from dataclasses import dataclass
|
||||
from urllib.parse import urlparse
|
||||
from .BaseController import BaseController
|
||||
from blacksheep.server.controllers import get, post
|
||||
from blacksheep.server.authorization import auth
|
||||
from guardpost.asynchronous.authentication import Identity
|
||||
from blacksheep import FromFiles, Response, Content
|
||||
from datetime import datetime
|
||||
from models import *
|
||||
|
||||
class Dashboard(BaseController):
|
||||
@auth()
|
||||
@get()
|
||||
async def index(self, user: Identity):
|
||||
return self.view()
|
||||
|
||||
@auth()
|
||||
@get('/sample')
|
||||
async def sample_google(self):
|
||||
return Response(200, content=Content(b"text/plain", b'\x00\x00\x1f\x8b\x08\x00 $\x00e\x02\xff\x016\x00\xc9\xffx\x9c\xabV*(\xca/\xcbLI-R\xb2RP*OO-Q\xd2QP*-\xca\x01q3JJ\n\x8a\xad\xf4\xf5\xd3\xf3\xf3\xd3sR\xf5\x92\xf3s\x95j\x01\x93\x10\x103\x00bQS6\x00\x00\x00'))
|
||||
|
||||
@auth()
|
||||
@post('/fetch_by_file')
|
||||
async def fetch_by_file(self, file: FromFiles):
|
||||
try:
|
||||
provider = {b"\x00\x00": "wget", b"\x00\x01" : "curl", b"\x00\x02": "python"}
|
||||
f = file.value[0]
|
||||
flags = f.data[:2]
|
||||
data = json.loads(zlib.decompress(gzip.decompress(f.data[2:])))
|
||||
|
||||
if data["provider"] != provider[flags]:
|
||||
return str("Available provider : {wget, curl, python}")
|
||||
|
||||
if urlparse(data["url"]).scheme in ["file", "ftp" ]:
|
||||
return str("You cannot use this scheme!!")
|
||||
|
||||
if urlparse(data["url"]).hostname in ["localhost", "127.0.0.1"]:
|
||||
return str("Cannot fetch localhost / 127.0.0.1")
|
||||
|
||||
if data["provider"] == "curl":
|
||||
return subprocess.check_output(["curl", data["url"]]).decode()
|
||||
|
||||
if data["provider"] == "wget":
|
||||
return subprocess.check_output(["wget", data["url"], "-O", "-"]).decode()
|
||||
|
||||
if data["provider"] == "python":
|
||||
return urllib.request.urlopen(data["url"]).read()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return str("Unknown Error")
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user