Compare commits

..

No commits in common. "12ca8e4296ca9693276422e524d7061685556ba0" and "dae877113c76b6f0eded7b2d63ef921123a2b559" have entirely different histories.

14 changed files with 13 additions and 114 deletions

0
cache/crc321300331366.cache vendored Normal file
View File

0
cache/crc322507170282.cache vendored Normal file
View File

View File

@ -21,8 +21,7 @@ dependencies = [
"gunicorn", "gunicorn",
"imgkit", "imgkit",
"wkhtmltopdf", "wkhtmltopdf",
"mistune", "jinja-markdown2",
"aiohttp-session", "mistune"
"cryptography"
] ]

View File

@ -2,12 +2,6 @@ import pathlib
from types import SimpleNamespace from types import SimpleNamespace
from aiohttp import web from aiohttp import web
from aiohttp_session import (
get_session as session_get,
session_middleware,
setup as session_setup,
)
from aiohttp_session.cookie_storage import EncryptedCookieStorage
from app.app import Application as BaseApplication from app.app import Application as BaseApplication
from snek.docs.app import Application as DocsApplication from snek.docs.app import Application as DocsApplication
@ -23,19 +17,8 @@ from snek.view.login import LoginView
from snek.view.login_form import LoginFormView from snek.view.login_form import LoginFormView
from snek.view.register import RegisterView from snek.view.register import RegisterView
from snek.view.register_form import RegisterFormView from snek.view.register_form import RegisterFormView
from snek.view.status import StatusView
from snek.view.web import WebView from snek.view.web import WebView
# base64.urlsafe_b64encode(
SESSION_KEY = b"c79a0c5fda4b424189c427d28c9f7c34"
@web.middleware
async def session_middleware(request, handler):
setattr(request, "session", await session_get(request))
response = await handler(request)
return response
class Application(BaseApplication): class Application(BaseApplication):
@ -48,8 +31,6 @@ class Application(BaseApplication):
super().__init__( super().__init__(
middlewares=middlewares, template_path=self.template_path, *args, **kwargs middlewares=middlewares, template_path=self.template_path, *args, **kwargs
) )
session_setup(self, EncryptedCookieStorage(SESSION_KEY))
self._middlewares.append(session_middleware)
self.jinja2_env.add_extension(MarkdownExtension) self.jinja2_env.add_extension(MarkdownExtension)
self.setup_router() self.setup_router()
self.setup_services() self.setup_services()
@ -70,7 +51,7 @@ class Application(BaseApplication):
self.router.add_view("/about.md", AboutMDView) self.router.add_view("/about.md", AboutMDView)
self.router.add_view("/docs.html", DocsHTMLView) self.router.add_view("/docs.html", DocsHTMLView)
self.router.add_view("/docs.md", DocsMDView) self.router.add_view("/docs.md", DocsMDView)
self.router.add_view("/status.json", StatusView)
self.router.add_view("/web.html", WebView) self.router.add_view("/web.html", WebView)
self.router.add_view("/login.html", LoginView) self.router.add_view("/login.html", LoginView)
self.router.add_view("/login.json", LoginFormView) self.router.add_view("/login.json", LoginFormView)

View File

@ -67,7 +67,7 @@ class Room {
class InlineAppElement extends HTMLElement { class InlineAppElement extends HTMLElement {
constructor(){ constructor(){
// this. this.
} }
} }
@ -77,45 +77,6 @@ class Page {
} }
class RESTClient {
debug = true
async get(url, params){
params = params ? params : {}
const encodedParams = new URLSearchParams(params);
if(encodedParams)
url += '?' + encodedParams
const response = await fetch(url,{
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
const result = await response.json()
if(this.debug){
console.debug({url:url,params:params,result:result})
}
return result
}
async post(url, data) {
const response = await fetch(url,{
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
const result = await response.json()
if(this.debug){
console.debug({url:url,params:params,result:result})
}
return result
}
}
const rest = new RESTClient()
class App { class App {
rooms = [] rooms = []
constructor() { constructor() {
@ -123,9 +84,7 @@ class App {
} }
async post(url, data){
}
} }

View File

@ -282,10 +282,8 @@ class GenericForm extends HTMLElement {
{ {
const isValid = await me.validate() const isValid = await me.validate()
if(isValid){ if(isValid){
const saveResult = await me.submit() const isProcessed = await me.submit()
if(saveResult.redirect_url){ console.info({processed:isProcessed})
window.location.pathname = saveResult.redirect_url
}
} }
} }
} }
@ -317,6 +315,7 @@ class GenericForm extends HTMLElement {
if(!field.is_valid){ if(!field.is_valid){
me.fields[field.name].setInvalid() me.fields[field.name].setInvalid()
me.fields[field.name].setErrors(field.errors) me.fields[field.name].setErrors(field.errors)
console.info(field.name,"is invalid")
}else{ }else{
me.fields[field.name].setValid() me.fields[field.name].setValid()
} }
@ -324,8 +323,10 @@ class GenericForm extends HTMLElement {
me.fields[field.name].updateAttributes() me.fields[field.name].updateAttributes()
}) })
Object.values(form.fields).forEach(field=>{ Object.values(form.fields).forEach(field=>{
console.info(field.errors)
me.fields[field.name].setErrors(field.errors) me.fields[field.name].setErrors(field.errors)
}) })
console.info({XX:form})
return form['is_valid'] return form['is_valid']
} }
async submit(){ async submit(){

View File

@ -212,14 +212,6 @@ class DeletedField(ModelField):
class UUIDField(ModelField): class UUIDField(ModelField):
@property
def value(self):
return str(self._value)
@value.setter
def value(self, val):
self._value = str(val)
@property @property
def initial_value(self): def initial_value(self):
return str(uuid.uuid4()) return str(uuid.uuid4())

View File

@ -5,13 +5,6 @@ from snek.system.markdown import render_markdown
class BaseView(web.View): class BaseView(web.View):
login_required = False
async def _iter(self):
if self.login_required and not self.session.get("logged_in"):
return web.HTTPFound("/")
return await super()._iter()
@property @property
def app(self): def app(self):
return self.request.app return self.request.app
@ -23,10 +16,6 @@ class BaseView(web.View):
async def json_response(self, data): async def json_response(self, data):
return web.json_response(data) return web.json_response(data)
@property
def session(self):
return self.request.session
async def render_template(self, template_name, context=None): async def render_template(self, template_name, context=None):
if template_name.endswith(".md"): if template_name.endswith(".md"):
response = await self.request.app.render_template( response = await self.request.app.render_template(
@ -57,8 +46,7 @@ class BaseFormView(BaseView):
# Pass # Pass
pass pass
if post.get("action") == "submit" and result["is_valid"]: if post.get("action") == "submit" and result["is_valid"]:
result = await self.submit(form) await self.submit(form)
return await self.json_response(result)
return await self.json_response(result) return await self.json_response(result)
async def submit(self, model=None): async def submit(self, model=None):

View File

@ -4,7 +4,6 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}{% endblock %}</title> <title>{% block title %}{% endblock %}</title>
<script src="/app.js"></script>
<style>{{ highlight_styles }}</style> <style>{{ highlight_styles }}</style>
<link rel="stylesheet" href="/style.css"> <link rel="stylesheet" href="/style.css">
<script src="/fancy-button.js"></script> <script src="/fancy-button.js"></script>

View File

@ -3,13 +3,12 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Snek</title> <title>Dark Themed Chat Application</title>
<script src="/app.js"></script>
<link rel="stylesheet" href="base.css"> <link rel="stylesheet" href="base.css">
</head> </head>
<body> <body>
<header> <header>
<div class="logo">Snek</div> <div class="logo">Molodetz Chat</div>
<nav> <nav>
<a href="#">Home</a> <a href="#">Home</a>
<a href="#">Rooms</a> <a href="#">Rooms</a>

View File

@ -9,8 +9,4 @@ class RegisterFormView(BaseFormView):
result = await self.app.services.user.register( result = await self.app.services.user.register(
form.email.value, form.username.value, form.password.value form.email.value, form.username.value, form.password.value
) )
self.request.session["uid"] = result["uid"] print("SUBMITTED:", result)
self.request.session["username"] = result["usernmae"]
self.request.session["logged_in"] = True
return {"redirect_url": "/web.html"}

View File

@ -1,13 +0,0 @@
from snek.system.view import BaseView
class StatusView(BaseView):
async def get(self):
return await self.json_response(
{
"status": "ok",
"username": self.session.get("username"),
"logged_in": self.session.get("username") and True or False,
"uid": self.session.get("uid"),
}
)

View File

@ -3,7 +3,5 @@ from snek.system.view import BaseView
class WebView(BaseView): class WebView(BaseView):
login_required = True
async def get(self): async def get(self):
return await self.render_template("web.html") return await self.render_template("web.html")