A corporation manager and dashboard for EVE Online
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 

37 lignes
1.1 KiB

  1. # -*- coding: utf-8 -*-
  2. from flask import g, session, url_for
  3. from itsdangerous import URLSafeSerializer
  4. __all__ = ["AuthManager"]
  5. _SCOPES = ["publicData", "characterAssetsRead"] # ...
  6. class AuthManager:
  7. def __init__(self, config, eve):
  8. self._config = config
  9. self._eve = eve
  10. def _new_session_id(self):
  11. with g.db as conn:
  12. cur = conn.execute("INSERT INTO session DEFAULT VALUES")
  13. return cur.lastrowid
  14. def get_session_id(self):
  15. if "id" not in session:
  16. session["id"] = self._new_session_id()
  17. return session["id"]
  18. def get_state_hash(self):
  19. key = self._config.get("auth.session_key")
  20. serializer = URLSafeSerializer(key)
  21. return serializer.dumps(self.get_session_id())
  22. def make_login_link(self):
  23. cid = self._config.get("auth.client_id")
  24. target = url_for("login", _external=True, _scheme=self._config.scheme)
  25. scopes = _SCOPES
  26. state = self.get_state_hash()
  27. return self._eve.sso.get_authorize_url(cid, target, scopes, state)