Advertisement
Guest User

Untitled

a guest
Oct 21st, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.57 KB | None | 0 0
  1. from flask import Flask
  2. from flask import session
  3. from flask import request
  4. from flask import render_template
  5. from flask import make_response
  6. from flask import redirect
  7. from flask import url_for
  8. from flask import flash
  9. from werkzeug.utils import secure_filename
  10. import os, os.path
  11. import json
  12.  
  13. app = Flask(__name__)
  14. app.secret_key = b'jf764o;03n?mv9936bv?le874nb;s.'
  15.  
  16. @app.route('/checinsm/file/')
  17. def index():
  18.     return render_template('index.html')
  19.  
  20.  
  21. @app.route('/checinsm/file/login', methods=['POST', 'GET'])
  22. def login():
  23.     username = username_from_cookie(request.cookies.get('userID'))
  24.     if username:
  25.         return redirect(url_for('list'))
  26.        
  27.     error = None
  28.     if request.method == 'POST':
  29.         if valid_login(request.form['username'], request.form['password']):
  30.             return log_the_user_in(request.form['username'])
  31.         else:
  32.             error = 'Invalid username/password'
  33.     return render_template('login.html', error=error)
  34.  
  35.  
  36. @app.route('/checinsm/file/logout', methods=['GET'])
  37. def logout():
  38.     resp = make_response(render_template('logout.html'))
  39.     resp.set_cookie('userID', '', expires=0)
  40.     return resp
  41.  
  42.  
  43. @app.route('/checinsm/file/upload', methods=['POST'])
  44. def upload():
  45.     username = username_from_cookie(request.cookies.get('userID'))
  46.     if username is None:
  47.         return render_template('login.html', error='Musisz sie najpierw zalogować')
  48.  
  49.     print(request.files)
  50.     if !can_upload(username):
  51.         return "You cannot upload more files"
  52.     if request.method == 'POST':
  53.         f = request.files[0]
  54.         f.save('./files/' + username +'/' + secure_filename(f.filename))
  55.     return "Ok"
  56.  
  57.  
  58. @app.route('/checinsm/file/list')
  59. def list():
  60.     username = username_from_cookie(request.cookies.get('userID'))
  61.     if username is None:
  62.         return render_template('login.html', error='Musisz sie najpierw zalogować')
  63.  
  64.     files = files_list(username)
  65.     return render_template('list.html', files=files, can_upload=can_upload(username, files))
  66.  
  67.  
  68. def valid_login(username, password):
  69.     with open('users.json', 'r') as j:
  70.         datastore = json.load(j)
  71.  
  72.     for row in datastore['users']:
  73.         if row['username'] == username:
  74.             if row['password'] == password:
  75.                 return True
  76.     return False
  77.  
  78.  
  79. def log_the_user_in(username):
  80.     import datetime
  81.     expire_date = datetime.datetime.now()
  82.     expire_date = expire_date + datetime.timedelta(days=30)
  83.     cookie = cookie_insert(username)
  84.     resp = redirect(url_for('list'))
  85.     resp.set_cookie('userID', cookie, expires=expire_date)
  86.     return resp
  87.  
  88.  
  89. def cookie_insert(username):
  90.     token = token_generate()
  91.     with open('users.json', 'r') as j:
  92.         datastore = json.load(j)
  93.  
  94.     for row in datastore['users']:
  95.         if row['username'] == username:
  96.             row['token'] = token
  97.  
  98.     with open('users.json', 'w') as f:
  99.         json.dump(datastore, f)
  100.  
  101.     return token
  102.  
  103.  
  104. def username_from_cookie(cookie):
  105.     with open('users.json', 'r') as j:
  106.         datastore = json.load(j)
  107.  
  108.     for row in datastore['users']:
  109.         if row['token'] == cookie:
  110.             return row['username']
  111.     return None
  112.  
  113.  
  114. def token_generate():
  115.     import uuid
  116.     return str(uuid.uuid4().hex)
  117.  
  118.  
  119. def can_upload(username):
  120.     files = files_list(username)
  121.     if len(files) < 5:
  122.         return True
  123.     return False
  124.  
  125.  
  126. def can_upload(username, files):
  127.     if len(files) < 5:
  128.         return True
  129.     return False
  130.  
  131.    
  132. def files_list(username):
  133.     path = './files/'+username
  134.     return os.listdir(path)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement