]>
Commit | Line | Data |
---|---|---|
2cd9af74 MT |
1 | #!/usr/bin/python |
2 | ||
3 | import logging | |
4 | import tornado.web | |
5 | ||
f6ed3d4d | 6 | from . import handlers_base as base |
2cd9af74 | 7 | |
f6ed3d4d | 8 | class AccountsAvatarHandler(base.BaseHandler): |
2cd9af74 MT |
9 | def get(self, who): |
10 | # Get the desired size of the avatar file | |
11 | size = self.get_argument("size", 0) | |
12 | ||
13 | try: | |
14 | size = int(size) | |
15 | except (TypeError, ValueError): | |
16 | size = None | |
17 | ||
f6ed3d4d | 18 | logging.debug("Querying for avatar of %s" % who) |
2cd9af74 | 19 | |
f6ed3d4d MT |
20 | # Fetch user account |
21 | account = self.backend.accounts.get_by_uid(who) | |
22 | if not account: | |
23 | raise tornado.web.HTTPError(404) | |
2cd9af74 | 24 | |
f6ed3d4d MT |
25 | # Allow downstream to cache this for 60 minutes |
26 | self.set_expires(3600) | |
2cd9af74 | 27 | |
f6ed3d4d MT |
28 | # Resize avatar |
29 | avatar = account.get_avatar(size) | |
2cd9af74 | 30 | |
f6ed3d4d MT |
31 | # If there is no avatar, we serve a default image |
32 | if not avatar: | |
c740fe40 | 33 | return self.redirect("https://static.ipfire.org%s" % self.static_url("img/default-avatar.jpg")) |
2cd9af74 | 34 | |
f6ed3d4d | 35 | # Set headers about content |
2cd9af74 MT |
36 | self.set_header("Content-Disposition", "inline; filename=\"%s.jpg\"" % who) |
37 | self.set_header("Content-Type", "image/jpeg") | |
38 | ||
f6ed3d4d | 39 | # Deliver payload |
2cd9af74 | 40 | self.finish(avatar) |