mirror of
http://git.whoc.org.uk/git/password-manager.git
synced 2024-11-14 07:39:02 +01:00
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['versions'] = record_versions
|
||||
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})
|
||||
|
||||
@login_required
|
||||
@ -659,6 +664,15 @@ class message(HandlerMixin):
|
||||
result['result'] = 'done'
|
||||
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):
|
||||
|
||||
|
@ -87,8 +87,11 @@ class RecordVersion(db.Model):
|
||||
order_by=id,
|
||||
cascade='all,delete'))
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, record=None):
|
||||
"""Initialize a record version."""
|
||||
if record:
|
||||
self.record = record
|
||||
self.record_id = record.id
|
||||
self.creation_date = datetime.datetime.utcnow()
|
||||
|
||||
def update(self, someData):
|
||||
@ -101,8 +104,12 @@ class RecordVersion(db.Model):
|
||||
self.version = self.record.version
|
||||
self.previous_version_key = recordVersionData['previousVersionKey']
|
||||
self.update_date = datetime.datetime.utcnow()
|
||||
self.access_date = datetime.datetime.utcnow()
|
||||
|
||||
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,
|
||||
cascade='save-update, merge, delete, delete-orphan')
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, user=None):
|
||||
"""Initialize a record."""
|
||||
if user:
|
||||
self.user_id = user.id
|
||||
self.version = 1
|
||||
self.creation_date = datetime.datetime.utcnow()
|
||||
|
||||
def update(self, data, record_version):
|
||||
@ -138,11 +148,12 @@ class Record(db.Model):
|
||||
self.data = data['data']
|
||||
self.api_version = data['version']
|
||||
self.update_date = datetime.datetime.now()
|
||||
self.access_date = datetime.datetime.now()
|
||||
self.current_record_version = record_version
|
||||
if self.version:
|
||||
self.version += 1
|
||||
else:
|
||||
self.version = 1
|
||||
self.version += 1
|
||||
|
||||
def access(self):
|
||||
self.access_date = datetime.datetime.now()
|
||||
|
||||
# ------------------------------------------------------------------------------
|
||||
|
||||
|
@ -1,10 +1,11 @@
|
||||
"""Clipperz views."""
|
||||
from flask import session, request, g
|
||||
from flask import session, request, g, send_from_directory
|
||||
from clipperz import app, db, lm
|
||||
from .models import User
|
||||
from .api import * # NOQA
|
||||
from .exceptions import InvalidUsage
|
||||
from flask.ext.login import login_required
|
||||
from os.path import dirname
|
||||
|
||||
|
||||
@lm.user_loader
|
||||
@ -113,19 +114,25 @@ def dump(frontend_version):
|
||||
@app.route('/beta/<path:path>')
|
||||
def beta(path):
|
||||
"""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>')
|
||||
def gamma(path):
|
||||
"""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>')
|
||||
def delta(path):
|
||||
"""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'])
|
||||
@ -133,8 +140,9 @@ def pm():
|
||||
"""Main request handler."""
|
||||
method = request.form['method']
|
||||
if method not in globals():
|
||||
app.logger.error(method)
|
||||
raise InvalidUsage('This method is not yet implemented',
|
||||
status_code=501)
|
||||
handler = globals()[method]()
|
||||
app.logger.debug(method)
|
||||
handler = globals()[method]()
|
||||
return handler.handle_request(request)
|
||||
|
@ -3,16 +3,13 @@ import os
|
||||
basedir = os.path.abspath(os.path.dirname(__file__))
|
||||
|
||||
|
||||
CSRF_ENABLED = True
|
||||
|
||||
|
||||
if os.environ.get('DATABASE_URL') is None:
|
||||
SQLALCHEMY_DATABASE_URI = ('sqlite:///' + os.path.join(basedir, 'app.db') +
|
||||
'?check_same_thread=False')
|
||||
else:
|
||||
SQLALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
|
||||
SQLALCHEMY_MIGRATE_REPO = os.path.join(basedir, 'db_repository')
|
||||
SQLALCHEMY_RECRD_QUERIES = True
|
||||
SQLALCHEMY_RECORD_QUERIES = True
|
||||
|
||||
ADMINS = ['you@example.com']
|
||||
|
||||
@ -20,15 +17,20 @@ ADMINS = ['you@example.com']
|
||||
class Config(object):
|
||||
DEBUG = False
|
||||
TESTING = False
|
||||
SQLALCHEMY_ECHO = False
|
||||
CSRF_ENABLED = True
|
||||
WTF_CSRF_ENABLED = True
|
||||
SECRET_KEY = 'you-will-never-guess'
|
||||
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):
|
||||
DEBUG = True
|
||||
SQLALCHEMY_ECHO = True
|
||||
SQLALCHEMY_RECORD_QUERIES = True
|
||||
|
||||
|
||||
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