From f0448e59d3b3a9b68036847e0bb8e0ff4a03df36 Mon Sep 17 00:00:00 2001 From: Jan Losinski Date: Thu, 22 Mar 2018 00:26:02 +0100 Subject: [PATCH] Make user add/delete/update work. Signed-off-by: Jan Losinski --- wallabag_kindle_consumer/interface.py | 65 +++++++++++++++++-- wallabag_kindle_consumer/templates/index.html | 2 +- .../templates/relogin.html | 12 ++-- 3 files changed, 66 insertions(+), 13 deletions(-) diff --git a/wallabag_kindle_consumer/interface.py b/wallabag_kindle_consumer/interface.py index fdc9f25..5ed48a4 100644 --- a/wallabag_kindle_consumer/interface.py +++ b/wallabag_kindle_consumer/interface.py @@ -143,14 +143,65 @@ class IndexView(ViewBase): return self._template({}) -@aiohttp_jinja2.template("relogin.html") -def re_login(request): - pass +class ReLoginView(ViewBase): + @aiohttp_jinja2.template("relogin.html") + async def get(self): + return self._template({'action': 'update', 'description': 'Refresh'}) + + @aiohttp_jinja2.template("relogin.html") + async def post(self): + data = await self.request.post() + self._set_data(data) + + validator = Validator(self.request.app.loop, data) + await validator.validate_credentials() + self._add_errors(validator.errors) + + if validator.success: + with self._session as session: + user = session.query(models.User).filter(models.User.name == validator.username).first() + if user is None: + self._add_errors({'user': 'User not registered'}) + else: + if await self._wallabag.get_token(user, validator.password): + session.commit() + self._add_message("User {user} successfully updated.".format(user=validator.username)) + logger.info("User {user} successfully updated.", user=user) + else: + self._add_errors({'auth': "Authentication against wallabag server failed"}) + + return self._template({'action': 'update', 'description': 'Refresh'}) -@aiohttp_jinja2.template("index.html") -def delete_user(request): - pass +class DeleteView(ViewBase): + @aiohttp_jinja2.template("relogin.html") + async def get(self): + return self._template({'action': 'delete', 'description': 'Delete'}) + + @aiohttp_jinja2.template("relogin.html") + async def post(self): + data = await self.request.post() + self._set_data(data) + + validator = Validator(self.request.app.loop, data) + await validator.validate_credentials() + self._add_errors(validator.errors) + + if validator.success: + with self._session as session: + user = session.query(models.User).filter(models.User.name == validator.username).first() + if user is None: + self._add_errors({'user': 'User not registered'}) + else: + if await self._wallabag.get_token(user, validator.password): + session.delete(user) + session.commit() + self._add_message("User {user} successfully deleted.".format(user=validator.username)) + logger.info("User {user} successfully deleted.", user=user) + else: + self._add_errors({'auth': "Authentication against wallabag server failed"}) + + return self._template({'action': 'delete', 'description': 'Delete'}) class App: @@ -176,6 +227,8 @@ class App: path=os.path.join(os.path.dirname(__file__), 'static'), name='static') self.app.router.add_view("/", IndexView) + self.app.router.add_view("/delete", DeleteView) + self.app.router.add_view("/update", ReLoginView) def run(self): web.run_app(self.app, host=self.config.interface_host, port=self.config.interface_port) diff --git a/wallabag_kindle_consumer/templates/index.html b/wallabag_kindle_consumer/templates/index.html index 556b9c8..21c24c3 100644 --- a/wallabag_kindle_consumer/templates/index.html +++ b/wallabag_kindle_consumer/templates/index.html @@ -7,7 +7,7 @@ {{ forms.messages(errors=errors, messages=messages) }}
-
Add or edit an account
+
Add an account
diff --git a/wallabag_kindle_consumer/templates/relogin.html b/wallabag_kindle_consumer/templates/relogin.html index 4600914..cf3c292 100644 --- a/wallabag_kindle_consumer/templates/relogin.html +++ b/wallabag_kindle_consumer/templates/relogin.html @@ -3,19 +3,19 @@ {% import 'macros.html' as forms %} {% block body %} + {{ forms.messages(errors=errors, messages=messages) }}
-
Fetch a new Wallabag API token
+
{{ description }} an account
- +
- {{ forms.input('user', "Username", description='Your wallabag username at ' + wallabag_host) }} - {{ forms.input('password', "Password", type='password', description='Your wallabag password at ' + wallabag_host + ". The password will not be stored") }} + {{ forms.input('username', "Username", description='Your wallabag username at ' + wallabag_host, data=data, errors=errors) }} + {{ forms.input('password', "Password", type='password', description='Your wallabag password at ' + wallabag_host + ". The password will not be stored", data=data, errors=errors) }}
-
- +