1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-24 03:54:20 +00:00

tglogin progress

This commit is contained in:
Steffo 2019-06-08 01:33:34 +02:00
parent 7fd241e1fd
commit d6ac988a9c
6 changed files with 57 additions and 27 deletions

View file

@ -1,13 +1,13 @@
import os import os
from .web import create_app from .web import create_app
from .web.blueprints import home, wikiview from .web.blueprints import home, wikiview, tglogin
class TestConfig: class TestConfig:
DB_PATH = os.environ["DB_PATH"] DB_PATH = os.environ["DB_PATH"]
app = create_app(TestConfig, [home, wikiview]) app = create_app(TestConfig, [home, wikiview, tglogin])
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -2,5 +2,6 @@ from .helloworld import bp as helloworld
from .testing import bp as testing from .testing import bp as testing
from .home import bp as home from .home import bp as home
from .wikiview import bp as wikiview from .wikiview import bp as wikiview
from .tglogin import bp as tglogin
__all__ = ["helloworld", "testing", "home", "wikiview"] __all__ = ["helloworld", "testing", "home", "wikiview", "tglogin"]

View file

@ -1,11 +0,0 @@
import flask as f
from .. import Royalprint
bp = Royalprint("helloworld", __name__, url_prefix="/helloworld")
@bp.route("/")
def helloworld():
return "Hello world!"

View file

@ -1,13 +0,0 @@
import flask as f
from .. import Royalprint
from ...database.tables import Royal
bp = Royalprint("testing", __name__, url_prefix="/testing", required_tables={Royal})
@bp.route("/listroyals")
def listroyals():
from ..alchemyhandler import alchemy, alchemy_session
royals = alchemy_session.query(alchemy.Royal).all()
return f'<body><script type="text/plain" style="display: block;">{repr(royals)}</script></body>'

View file

@ -0,0 +1,35 @@
import flask as f
import hashlib
import hmac
from ... import Royalprint
from ....database.tables import Royal, Telegram
bp = Royalprint("tglogin", __name__, url_prefix="/login/telegram", required_tables={Royal, Telegram},
template_folder="templates")
@bp.route("/")
def tglogin_index():
return f.render_template("tglogin_index.html")
@bp.route("/done")
def tglogin_done():
from ...alchemyhandler import alchemy, alchemy_session
data_check_string = ""
for field in f.request.args:
if field == "hash":
continue
data_check_string += f"{field}={f.request.args['field']}\n"
data_check_string.rstrip("\n")
secret_key = hashlib.sha256(f.current_app.config["TG_AK"])
hex_data = hmac.new(key=secret_key, msg=data_check_string, digestmod="sha256").hexdigest()
if hex_data != f.request.args["hash"]:
return "Invalid authentication", 403
tg_user = alchemy_session.query(alchemy.Telegram).filter(alchemy.Telegram.tg_id == f.request.args["id"]).one_or_none()
if tg_user is None:
return "No such telegram", 404
royal_user = tg_user.royal
f.session["royal_id"] = royal_user.id
return f.redirect(f.url_for("/"))

View file

@ -0,0 +1,18 @@
{% extends "base.html" %}
{% block title %}
Login with Telegram
{% endblock %}
{% block content %}
<div class="doublebox">
<div class="top">
<span class="left">
Telegram login
</span>
</div>
<div class="bot">
<script async src="https://telegram.org/js/telegram-widget.js?6" data-telegram-login="royalgamesbot" data-size="large" data-auth-url="{{ url_for("tglogin.tglogin_done") }}" data-request-access="write"></script>
</div>
</div>
{% endblock %}