logic.py 999 B

123456789101112131415161718192021222324252627282930313233
  1. import os
  2. import datetime
  3. import hashlib
  4. from flask import abort
  5. from nova import app, db, models
  6. from itsdangerous import Signer, BadSignature
  7. def create_dataset(name, user, parent=None):
  8. root = app.config['NOVA_ROOT_PATH']
  9. path = hashlib.sha256(user.name + name + str(datetime.datetime.now())).hexdigest()
  10. dataset = models.Dataset(name=name, path=path, parent=[parent] if parent else [])
  11. abspath = os.path.join(root, path)
  12. os.makedirs(abspath)
  13. access = models.Access(user=user, dataset=dataset, owner=True, writable=True, seen=True)
  14. db.session.add_all([dataset, access])
  15. db.session.commit()
  16. return dataset
  17. def check_token(token):
  18. uid, signature = token.split('.')
  19. user = db.session.query(models.User).filter(models.User.id == int(uid)).first()
  20. signer = Signer(user.password.hash + user.token_time.isoformat())
  21. try:
  22. if uid != signer.unsign(token):
  23. abort(401)
  24. except BadSignature:
  25. abort(401)
  26. return user