Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import threading
- from datetime import timedelta
- import time
- import flask
- from flask import Flask, Response, redirect, url_for, request, session, abort
- from flask.ext.login import LoginManager, UserMixin,
- login_required, login_user, logout_user
- class ResettableTimer(threading.Timer):
- """Call a function after a specified number of seconds:
- t = Timer(30.0, f, args=None, kwargs=None)
- t.start()
- t.reset() # after starting, it reset the time back to 0
- t.cancel() # stop the timer's action if it's still waiting
- """
- def __init__(self, interval, function, args=None, kwargs=None):
- super().__init__(interval, function, args, kwargs)
- self.daemon = True
- self.time_to_wait_per_cycle = 0.3
- self.time_to_wait = interval
- def reset(self):
- if not self.finished.is_set():
- self.time_to_wait = self.interval
- def run(self):
- while self.time_to_wait > 0 and not self.finished.is_set():
- s = time.perf_counter()
- self.finished.wait(self.time_to_wait_per_cycle)
- self.time_to_wait -= time.perf_counter() - s
- if not self.finished.is_set():
- self.function(*self.args, **self.kwargs)
- self.finished.set()
- app = Flask(__name__)
- # config
- app.config.update(
- DEBUG = True,
- SECRET_KEY = 'secret_xxx'
- )
- # flask-login
- login_manager = LoginManager()
- login_manager.init_app(app)
- # silly user model
- 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)
- # create some users with ids 1 to 20
- users = [User(id) for id in range(1, 21)]
- # some protected url
- @app.route('/')
- @login_required
- def home():
- return Response("Hello World!")
- @app.route("/foo")
- @login_required
- def foo():
- try:
- session['counter'] += 1
- except Exception:
- session['counter'] = 1
- return Response("Hello world %d" % (session['counter'],))
- # somewhere to login
- @app.route("/login", methods=["GET", "POST"])
- def login():
- user = User(1)
- login_user(user)
- @flask.copy_current_request_context
- def auto_logout():
- print("auto logout")
- logout_user()
- flask.session.clear()
- auto_logout_timer = ResettableTimer(10, auto_logout)
- auto_logout_timer.start()
- return "<p>OK</p>", 200#redirect(request.args.get("next"))
- # somewhere to logout
- @app.route("/logout")
- @login_required
- def logout():
- logout_user()
- return Response('<p>Logged out</p>')
- # callback to reload the user object
- @login_manager.user_loader
- def load_user(userid):
- return User(userid)
- if __name__ == "__main__":
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement