]> git.ipfire.org Git - ipfire.org.git/commitdiff
people: Allow uploading an avatar
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 Oct 2018 23:47:17 +0000 (00:47 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 16 Oct 2018 23:47:17 +0000 (00:47 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/accounts.py
src/templates/people/user-edit.html
src/web/handlers_base.py
src/web/people.py

index aa8b5024f9e3da748077f67b97bc97661152519f..89163084170dc2cdbfba3690a94e6effbf013fcb 100644 (file)
@@ -544,6 +544,9 @@ class Account(Object):
 
                        return f.getvalue()
 
+       def upload_avatar(self, avatar):
+               self._set("jpegPhoto", avatar)
+
 
 if __name__ == "__main__":
        a = Accounts()
index 24b4521ea2355c04ef3688bd0dfc7dbf9c8493fb..57e4e28ff8b5cb8f53f10c28213d91f43a533d28 100644 (file)
@@ -7,7 +7,7 @@
                <div class="col-6">
                        <h4 class="mb-4">{{ _("Edit %s") % account }}</h4>
 
-                       <form method="POST" action="">
+                       <form method="POST" action="" enctype="multipart/form-data">
                                {% raw xsrf_form_html() %}
 
                                <div class="form-row mb-3">
                                        </small>
                                </div>
 
+                               <div class="form-group">
+                                       <label>{{ _("Avatar") }}</label>
+
+                                       <input type="file" class="form-control-file" name="avatar">
+
+                                       <small class="form-text text-muted">
+                                               {{ _("Upload a new avatar") }}
+                                       </small>
+                               </div>
+
+
                                <fieldset>
                                        <legend>{{ _("Email") }}</legend>
        
index 0e26bbb05d90d6eb5cc2566d8905ceb61653064b..67bee54c3275dfe3535940eb734420e0543fd9cd 100644 (file)
@@ -105,6 +105,14 @@ class BaseHandler(tornado.web.RequestHandler):
                except ValueError:
                        raise tornado.web.HTTPError(400)
 
+       def get_file(self, name):
+               try:
+                       file = self.request.files[name][0]
+
+                       return file["filename"], file["body"], file["content_type"]
+               except KeyError:
+                       return None
+
        # Login stuff
 
        def get_current_user(self):
index bcaae6f382d9e817128c23feb441c1034340453c..c4d00989497baf0509217b846932507147637d5a 100644 (file)
@@ -150,6 +150,17 @@ class UserEditHandler(base.BaseHandler):
                        account.last_name  = self.get_argument("last_name")
                        account.address    = self.get_argument("address")
 
+                       # Avatar
+                       try:
+                               filename, data, mimetype = self.get_file("avatar")
+
+                               if not mimetype.startswith("image/"):
+                                       raise tornado.web.HTTPError(400, "Avatar is not an image file: %s" % mimetype)
+
+                               account.upload_avatar(data)
+                       except ValueError:
+                               pass
+
                        # Email
                        account.mail_routing_address = self.get_argument("mail_routing_address", None)