diff --git a/controllers/service.py b/controllers/service.py index 096bc9a..0823f40 100644 --- a/controllers/service.py +++ b/controllers/service.py @@ -12,9 +12,10 @@ def service_create(): name = request.form.get('name', '').strip() icon = request.form.get('icon', '').strip() + encrypted = request.form.get('encrypted', '').strip().lower() in ("1", "true", "yes") if not name: return jsonify(Error.ARGUMENT_MISSING('name')) - srv = Service(name, icon) + srv = Service(name, icon, encrypted=encrypted) db.session.add(srv) db.session.commit() return jsonify({"service": srv.as_dict(True)}) diff --git a/database.sql b/database.sql index 2488c12..938e7e5 100644 --- a/database.sql +++ b/database.sql @@ -55,6 +55,7 @@ DROP TABLE IF EXISTS `service`; CREATE TABLE IF NOT EXISTS `pushjet_api`.`service` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `secret` VARCHAR(32) NOT NULL, + `encryption_key` VARCHAR(512) NOT NULL, `public` VARCHAR(40) NOT NULL, `name` VARCHAR(255) NOT NULL, `icon` TEXT NULL, diff --git a/models/service.py b/models/service.py index 64c3cc3..9ec0c68 100644 --- a/models/service.py +++ b/models/service.py @@ -10,13 +10,18 @@ class Service(db.Model): id = db.Column(INTEGER(unsigned=True), primary_key=True) secret = db.Column(db.VARCHAR(32), nullable=False) + encryption_key = db.Column(db.VARCHAR(512), nullable=False) public = db.Column(db.VARCHAR(40), nullable=False) name = db.Column(db.VARCHAR(255), nullable=False) icon = db.Column(db.TEXT, nullable=False, default='') timestamp_created = db.Column(db.TIMESTAMP, default=datetime.utcnow) - def __init__(self, name, icon=''): + def __init__(self, name, icon='', encrypted=False): self.secret = hashlib.sha1(urandom(100)).hexdigest()[:32] + if encrypted: + self.encryption_key = hashlib.sha1(urandom(100)).hexdigest()[:32] + else: + self.encryption_key = "" self.name = name self.icon = icon pub = list(hashlib.new('ripemd160', self.secret).hexdigest())[:40] @@ -51,7 +56,11 @@ def as_dict(self, secret=False): "name": self.name, "created": int(self.timestamp_created.strftime("%s")), "icon": self.icon, + "encrypted": True if self.encryption_key else False, } + if secret: data["secret"] = self.secret + data["encryption_key"] = self.encryption_key + return data