Merge remote-tracking branch 'clipperz/master'

This commit is contained in:
Giulio Cesare Solaroli 2016-06-22 22:44:41 +02:00
commit dd14c612e4
7 changed files with 100 additions and 16 deletions

View File

@ -438,6 +438,11 @@ class message(HandlerMixin):
result['oldestUsedEncryptedVersion'] = oldest_encryption_version result['oldestUsedEncryptedVersion'] = oldest_encryption_version
result['versions'] = record_versions result['versions'] = record_versions
result['currentVersion'] = record.current_record_version.reference result['currentVersion'] = record.current_record_version.reference
record.current_record_version.access()
record.access()
db.session.add(record)
db.session.add(record_version)
db.session.commit()
return jsonify({'result': result}) return jsonify({'result': result})
@login_required @login_required
@ -659,6 +664,15 @@ class message(HandlerMixin):
result['result'] = 'done' result['result'] = 'done'
return jsonify({'result': result}) return jsonify({'result': result})
@login_required
def getCertificatesStatus(self, parameters, request):
"""
Provides support for BTC Certificate feature.
No idea how it works.
"""
return jsonify({'result': {}})
class logout(HandlerMixin): class logout(HandlerMixin):

View File

@ -87,8 +87,11 @@ class RecordVersion(db.Model):
order_by=id, order_by=id,
cascade='all,delete')) cascade='all,delete'))
def __init__(self): def __init__(self, record=None):
"""Initialize a record version.""" """Initialize a record version."""
if record:
self.record = record
self.record_id = record.id
self.creation_date = datetime.datetime.utcnow() self.creation_date = datetime.datetime.utcnow()
def update(self, someData): def update(self, someData):
@ -101,8 +104,12 @@ class RecordVersion(db.Model):
self.version = self.record.version self.version = self.record.version
self.previous_version_key = recordVersionData['previousVersionKey'] self.previous_version_key = recordVersionData['previousVersionKey']
self.update_date = datetime.datetime.utcnow() self.update_date = datetime.datetime.utcnow()
self.access_date = datetime.datetime.utcnow()
self.record.update(someData['record'], self) self.record.update(someData['record'], self)
def access(self):
self.access_date = datetime.datetime.now()
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
@ -128,8 +135,11 @@ class Record(db.Model):
uselist=False, uselist=False,
cascade='save-update, merge, delete, delete-orphan') cascade='save-update, merge, delete, delete-orphan')
def __init__(self): def __init__(self, user=None):
"""Initialize a record.""" """Initialize a record."""
if user:
self.user_id = user.id
self.version = 1
self.creation_date = datetime.datetime.utcnow() self.creation_date = datetime.datetime.utcnow()
def update(self, data, record_version): def update(self, data, record_version):
@ -138,11 +148,12 @@ class Record(db.Model):
self.data = data['data'] self.data = data['data']
self.api_version = data['version'] self.api_version = data['version']
self.update_date = datetime.datetime.now() self.update_date = datetime.datetime.now()
self.access_date = datetime.datetime.now()
self.current_record_version = record_version self.current_record_version = record_version
if self.version:
self.version += 1 self.version += 1
else:
self.version = 1 def access(self):
self.access_date = datetime.datetime.now()
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@ -1,10 +1,11 @@
"""Clipperz views.""" """Clipperz views."""
from flask import session, request, g from flask import session, request, g, send_from_directory
from clipperz import app, db, lm from clipperz import app, db, lm
from .models import User from .models import User
from .api import * # NOQA from .api import * # NOQA
from .exceptions import InvalidUsage from .exceptions import InvalidUsage
from flask.ext.login import login_required from flask.ext.login import login_required
from os.path import dirname
@lm.user_loader @lm.user_loader
@ -113,19 +114,25 @@ def dump(frontend_version):
@app.route('/beta/<path:path>') @app.route('/beta/<path:path>')
def beta(path): def beta(path):
"""Fallback for serving beta version.""" """Fallback for serving beta version."""
return send_from_directory('beta', path) here = dirname(__file__)
file_path = "{0}/../beta/".format(here)
return send_from_directory(file_path, path)
@app.route('/gamma/<path:path>') @app.route('/gamma/<path:path>')
def gamma(path): def gamma(path):
"""Fallback for serving gamma version.""" """Fallback for serving gamma version."""
return send_from_directory('gamma', path) here = dirname(__file__)
file_path = "{0}/../gamma/".format(here)
return send_from_directory(file_path, path)
@app.route('/delta/<path:path>') @app.route('/delta/<path:path>')
def delta(path): def delta(path):
"""Fallback for serving delta version.""" """Fallback for serving delta version."""
return send_from_directory('delta', path) here = dirname(__file__)
file_path = "{0}/../delta/".format(here)
return send_from_directory(file_path, path)
@app.route('/pm', methods=['GET', 'OPTIONS', 'POST']) @app.route('/pm', methods=['GET', 'OPTIONS', 'POST'])
@ -133,8 +140,9 @@ def pm():
"""Main request handler.""" """Main request handler."""
method = request.form['method'] method = request.form['method']
if method not in globals(): if method not in globals():
app.logger.error(method)
raise InvalidUsage('This method is not yet implemented', raise InvalidUsage('This method is not yet implemented',
status_code=501) status_code=501)
handler = globals()[method]()
app.logger.debug(method) app.logger.debug(method)
handler = globals()[method]()
return handler.handle_request(request) return handler.handle_request(request)

View File

@ -3,16 +3,13 @@ import os
basedir = os.path.abspath(os.path.dirname(__file__)) basedir = os.path.abspath(os.path.dirname(__file__))
CSRF_ENABLED = True
if os.environ.get('DATABASE_URL') is None: if os.environ.get('DATABASE_URL') is None:
SQLALCHEMY_DATABASE_URI = ('sqlite:///' + os.path.join(basedir, 'app.db') + SQLALCHEMY_DATABASE_URI = ('sqlite:///' + os.path.join(basedir, 'app.db') +
'?check_same_thread=False') '?check_same_thread=False')
else: else:
SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL'] SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository') SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
SQLALCHEMY_RECRD_QUERIES = True SQLALCHEMY_RECORD_QUERIES = True
ADMINS = ['you@example.com'] ADMINS = ['you@example.com']
@ -20,15 +17,20 @@ ADMINS = ['you@example.com']
class Config(object): class Config(object):
DEBUG = False DEBUG = False
TESTING = False TESTING = False
SQLALCHEMY_ECHO = False CSRF_ENABLED = True
WTF_CSRF_ENABLED = True WTF_CSRF_ENABLED = True
SECRET_KEY = 'you-will-never-guess' SECRET_KEY = 'you-will-never-guess'
sessionTimeout = datetime.timedelta(minutes=-2) sessionTimeout = datetime.timedelta(minutes=-2)
SQLALCHEMY_ECHO = False
SQLALCHEMY_DATABASE_URI = SQLALCHEMY_DATABASE_URI
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
class DevelopmentConfig(Config): class DevelopmentConfig(Config):
DEBUG = True DEBUG = True
SQLALCHEMY_ECHO = True SQLALCHEMY_ECHO = True
SQLALCHEMY_RECORD_QUERIES = True
class TestingConfig(Config): class TestingConfig(Config):

View File

@ -0,0 +1,11 @@
location /pm {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
try_files $uri $uri/ @pm;
}
location @pm {
include uwsgi_params;
uwsgi_param SCRIPT_NAME /pm;
uwsgi_modifier1 30;
uwsgi_pass unix:/run/uwsgi/pm.sock;
}

10
backend/flask/src/run.py Normal file
View File

@ -0,0 +1,10 @@
#!/usr/bin/env python
from clipperz import app, db
def main():
db.create_all()
app.run(debug=True)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,28 @@
[uwsgi]
plugin = python
socket = /run/uwsgi/%n.sock
chmod-socket = 660
master = true
processes = 1
uid = clipperz
gid = clipperz
umask = 027
procname-master = uwsgi pm
vacuum = true
die-on-term = true
base = /home/clipperz/password-manager/target/flask/
module = clipperz
callable = app
venv = /home/clipperz/password-manager/target/flask/
#the variable that holds a flask application inside the module imported at line #6
callable = app
#location of log files
logto = /var/log/uwsgi/%n.log
env = PYTHON_EGG_CACHE=/var/tmp/clipperz
env = DATABASE_URL = 'mysql://clipperz:clipperz@localhost/clipperz'