Merge remote-tracking branch 'clipperz/master'
This commit is contained in:
commit
dd14c612e4
@ -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):
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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):
|
||||||
|
11
backend/flask/src/nginx.conf.example
Normal file
11
backend/flask/src/nginx.conf.example
Normal 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
10
backend/flask/src/run.py
Normal 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()
|
28
backend/flask/src/uwsg-emperor.ini.example
Normal file
28
backend/flask/src/uwsg-emperor.ini.example
Normal 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'
|
Loading…
Reference in New Issue
Block a user