]> git.ipfire.org Git - ipfire.org.git/blob - src/web/people.py
Set private flag for logged in users
[ipfire.org.git] / src / web / people.py
1 #!/usr/bin/python
2
3 import datetime
4 import logging
5 import tornado.web
6
7 from . import handlers_base as base
8 from . import ui_modules
9
10 class IndexHandler(base.BaseHandler):
11 @tornado.web.authenticated
12 def get(self):
13 self.render("people/index.html")
14
15
16 class AvatarHandler(base.BaseHandler):
17 def get(self, uid):
18 # Get the desired size of the avatar file
19 size = self.get_argument("size", 0)
20
21 try:
22 size = int(size)
23 except (TypeError, ValueError):
24 size = None
25
26 logging.debug("Querying for avatar of %s" % uid)
27
28 # Fetch user account
29 account = self.backend.accounts.get_by_uid(uid)
30 if not account:
31 raise tornado.web.HTTPError(404, "Could not find account %s" % uid)
32
33 # Allow downstream to cache this for 60 minutes
34 self.set_expires(3600)
35
36 # Resize avatar
37 avatar = account.get_avatar(size)
38
39 # If there is no avatar, we serve a default image
40 if not avatar:
41 logging.debug("No avatar uploaded for %s" % account)
42
43 return self.redirect("https://static.ipfire.org%s" % self.static_url("img/default-avatar.jpg"))
44
45 # Set headers about content
46 self.set_header("Content-Disposition", "inline; filename=\"%s.jpg\"" % account.uid)
47 self.set_header("Content-Type", "image/jpeg")
48
49 # Deliver payload
50 self.finish(avatar)
51
52
53 class CallsHandler(base.BaseHandler):
54 @tornado.web.authenticated
55 def get(self, uid, date=None):
56 account = self.backend.accounts.get_by_uid(uid)
57 if not account:
58 raise tornado.web.HTTPError(404, "Could not find account %s" % uid)
59
60 if date:
61 try:
62 date = datetime.datetime.strptime(date, "%Y-%m-%d").date()
63 except ValueError:
64 raise tornado.web.HTTPError(400, "Invalid date: %s" % date)
65 else:
66 date = datetime.date.today()
67
68 self.render("people/calls.html", account=account, date=date)
69
70
71 class RegistrationsHandler(base.BaseHandler):
72 @tornado.web.authenticated
73 def get(self, uid):
74 # Get own account
75 if self.current_user.uid == uid:
76 account = self.current_user
77
78 # Admins can access all other users, too
79 elif self.current_user.is_admin():
80 account = self.backend.accounts.get_by_uid(uid)
81 if not account:
82 raise tornado.web.HTTPError(404, "Could not find account %s" % uid)
83
84 # Otherwise, no access is permitted
85 else:
86 raise tornado.web.HTTPError(403)
87
88 self.render("people/registrations.html", account=account)
89
90
91 class SearchHandler(base.BaseHandler):
92 @tornado.web.authenticated
93 def get(self):
94 q = self.get_argument("q")
95
96 # Perform the search
97 accounts = self.backend.accounts.search(q)
98
99 # Redirect when only one result was found
100 if len(accounts) == 1:
101 self.redirect("/users/%s" % accounts[0].uid)
102 return
103
104 self.render("people/search.html", q=q, accounts=accounts)
105
106
107 class UsersHandler(base.BaseHandler):
108 @tornado.web.authenticated
109 def get(self):
110 self.render("people/users.html")
111
112
113 class UserHandler(base.BaseHandler):
114 @tornado.web.authenticated
115 def get(self, uid):
116 account = self.backend.accounts.get_by_uid(uid)
117 if not account:
118 raise tornado.web.HTTPError(404, "Could not find account %s" % uid)
119
120 self.render("people/user.html", account=account)
121
122
123 class AccountsListModule(ui_modules.UIModule):
124 def render(self, accounts=None):
125 if accounts is None:
126 accounts = self.backend.accounts
127
128 return self.render_string("people/modules/accounts-list.html", accounts=accounts)
129
130
131 class CDRModule(ui_modules.UIModule):
132 def render(self, account, date=None, limit=None):
133 cdr = account.get_cdr(date=date, limit=limit)
134
135 return self.render_string("people/modules/cdr.html", account=account, cdr=cdr)
136
137
138 class ChannelsModule(ui_modules.UIModule):
139 def render(self, account):
140 channels = self.backend.talk.freeswitch.get_sip_channels(account)
141
142 return self.render_string("people/modules/channels.html", account=account, channels=channels)
143
144
145 class RegistrationsModule(ui_modules.UIModule):
146 def render(self, account):
147 return self.render_string("people/modules/registrations.html", account=account)