stuff. if you see this then i forgot to squash before publishing
This commit is contained in:
parent
c2cbc60b09
commit
912674c3f4
2
app.py
2
app.py
|
@ -8,6 +8,8 @@ app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql:///forget'
|
||||||
app.config['SQLALCHEMY_ECHO'] = True
|
app.config['SQLALCHEMY_ECHO'] = True
|
||||||
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
||||||
|
|
||||||
|
app.secret_key = 'hunter2'
|
||||||
|
|
||||||
metadata = MetaData(naming_convention = {
|
metadata = MetaData(naming_convention = {
|
||||||
"ix": 'ix_%(column_0_label)s',
|
"ix": 'ix_%(column_0_label)s',
|
||||||
"uq": "uq_%(table_name)s_%(column_0_name)s",
|
"uq": "uq_%(table_name)s_%(column_0_name)s",
|
||||||
|
|
10
lib.py
10
lib.py
|
@ -1,10 +0,0 @@
|
||||||
from model import User
|
|
||||||
from flask import request
|
|
||||||
from functools import update_wrapper
|
|
||||||
|
|
||||||
def require_auth(fun):
|
|
||||||
# TODO actual auth and session checking and such
|
|
||||||
def newfun(*args, **kwargs):
|
|
||||||
fun(User.query.get('8080418'), *args, **kwargs)
|
|
||||||
update_wrapper(newfun, fun)
|
|
||||||
return newfun
|
|
|
@ -1,55 +0,0 @@
|
||||||
"""init
|
|
||||||
|
|
||||||
Revision ID: 8e80a277cdb5
|
|
||||||
Revises:
|
|
||||||
Create Date: 2017-07-25 20:02:00.543026
|
|
||||||
|
|
||||||
"""
|
|
||||||
from alembic import op
|
|
||||||
import sqlalchemy as sa
|
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
|
||||||
revision = '8e80a277cdb5'
|
|
||||||
down_revision = None
|
|
||||||
branch_labels = None
|
|
||||||
depends_on = None
|
|
||||||
|
|
||||||
|
|
||||||
def upgrade():
|
|
||||||
op.create_table('users',
|
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('display_name', sa.String(), nullable=True),
|
|
||||||
sa.Column('id', sa.Integer(), nullable=False),
|
|
||||||
sa.PrimaryKeyConstraint('id', name=op.f('pk_users'))
|
|
||||||
)
|
|
||||||
op.create_table('account',
|
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('remote_id', sa.String(), nullable=False),
|
|
||||||
sa.Column('service', sa.Enum('twitter', name='enum_services'), nullable=False),
|
|
||||||
sa.Column('credentials', sa.JSON(), nullable=True),
|
|
||||||
sa.Column('policy_enabled', sa.Boolean(), nullable=True),
|
|
||||||
sa.Column('policy_keep_younger', sa.Interval(), nullable=True),
|
|
||||||
sa.Column('policy_keep_latest', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('policy_delete_every', sa.Interval(), nullable=True),
|
|
||||||
sa.Column('policy_ignore_favourites', sa.Boolean(), nullable=True),
|
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_account_user_id_users')),
|
|
||||||
sa.PrimaryKeyConstraint('remote_id', 'service', name=op.f('pk_account'))
|
|
||||||
)
|
|
||||||
op.create_table('sessions',
|
|
||||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('updated_at', sa.DateTime(), nullable=False),
|
|
||||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
|
||||||
sa.Column('token', sa.String(), nullable=False),
|
|
||||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], name=op.f('fk_sessions_user_id_users')),
|
|
||||||
sa.PrimaryKeyConstraint('token', name=op.f('pk_sessions'))
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def downgrade():
|
|
||||||
op.drop_table('sessions')
|
|
||||||
op.drop_table('account')
|
|
||||||
op.drop_table('users')
|
|
22
model.py
22
model.py
|
@ -3,8 +3,8 @@ from datetime import datetime
|
||||||
from app import db
|
from app import db
|
||||||
|
|
||||||
class TimestampMixin(object):
|
class TimestampMixin(object):
|
||||||
created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
|
created_at = db.Column(db.DateTime, server_default=db.func.now())
|
||||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
|
updated_at = db.Column(db.DateTime, server_default=db.func.now(), onupdate=db.func.now())
|
||||||
|
|
||||||
class User(db.Model, TimestampMixin):
|
class User(db.Model, TimestampMixin):
|
||||||
__tablename__ = 'users'
|
__tablename__ = 'users'
|
||||||
|
@ -15,25 +15,17 @@ class User(db.Model, TimestampMixin):
|
||||||
class Account(db.Model, TimestampMixin):
|
class Account(db.Model, TimestampMixin):
|
||||||
|
|
||||||
user = db.relationship(User)
|
user = db.relationship(User)
|
||||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
|
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
|
||||||
|
|
||||||
remote_id = db.Column(db.String, primary_key=True)
|
|
||||||
service = db.Column(
|
service = db.Column(
|
||||||
db.Enum("twitter", name="enum_services")
|
db.Enum("twitter", name="enum_services")
|
||||||
, primary_key=True)
|
, primary_key=True)
|
||||||
|
remote_id = db.Column(db.String, primary_key=True)
|
||||||
|
|
||||||
credentials = db.Column(db.JSON)
|
credentials = db.Column(db.JSON)
|
||||||
|
|
||||||
policy_enabled = db.Column(db.Boolean, default=False)
|
policy_enabled = db.Column(db.Boolean, server_default='FALSE', nullable=False)
|
||||||
policy_keep_younger = db.Column(db.Interval)
|
policy_keep_younger = db.Column(db.Interval)
|
||||||
policy_keep_latest = db.Column(db.Integer)
|
policy_keep_latest = db.Column(db.Integer)
|
||||||
policy_delete_every = db.Column(db.Interval)
|
policy_delete_every = db.Column(db.Interval)
|
||||||
policy_ignore_favourites = db.Column(db.Boolean, default=True)
|
policy_ignore_favourites = db.Column(db.Boolean, server_default='TRUE')
|
||||||
|
|
||||||
class Session(db.Model, TimestampMixin):
|
|
||||||
__tablename__ = 'sessions'
|
|
||||||
|
|
||||||
user = db.relationship(User)
|
|
||||||
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
|
|
||||||
|
|
||||||
token = db.Column(db.String, primary_key=True)
|
|
||||||
|
|
||||||
|
|
21
routes.py
21
routes.py
|
@ -1,9 +1,20 @@
|
||||||
from app import app
|
from app import app
|
||||||
from flask import request, Response
|
from flask import render_template, session, url_for, redirect
|
||||||
from lib import require_auth
|
from datetime import datetime
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
@require_auth
|
def index():
|
||||||
def index(viewer):
|
return render_template('index.html')
|
||||||
return "Hello, %s (%s)" % (viewer.name, viewer.twitter_id)
|
|
||||||
|
|
||||||
|
@app.route('/login/twitter')
|
||||||
|
def debug_login():
|
||||||
|
session['display_name'] = 'codl'
|
||||||
|
session['created_at'] = datetime.now()
|
||||||
|
return redirect(url_for('index'))
|
||||||
|
|
||||||
|
@app.route('/logout')
|
||||||
|
def logout():
|
||||||
|
keys = list(session.keys())
|
||||||
|
for key in keys:
|
||||||
|
del session[key]
|
||||||
|
return redirect(url_for('index'))
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{% if session %}
|
||||||
|
Hello, {{session['display_name']}}! <a href="/logout">Log out</a>
|
||||||
|
<code>{{session['created_at']}}</code>
|
||||||
|
{% else %}
|
||||||
|
Hello, stranger! <a href="/login/twitter">Log in with Twitter</a>
|
||||||
|
{% endif %}
|
Loading…
Reference in New Issue