454c672d65d898074cfce107ebda711a15946460
2 # This file is part of my.gpodder.org.
4 # my.gpodder.org is free software: you can redistribute it and/or modify it
5 # under the terms of the GNU Affero General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or (at your
7 # option) any later version.
9 # my.gpodder.org is distributed in the hope that it will be useful, but
10 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
11 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
12 # License for more details.
14 # You should have received a copy of the GNU Affero General Public License
15 # along with my.gpodder.org. If not, see <http://www.gnu.org/licenses/>.
18 from django
.shortcuts
import render_to_response
19 from django
.http
import HttpResponseRedirect
20 from django
.contrib
.auth
import logout
21 from django
.template
import RequestContext
22 from mygpo
.api
.models
import Podcast
, Subscription
, SubscriptionMeta
23 from mygpo
.web
.models
import SecurityToken
24 from mygpo
.web
.forms
import UserAccountForm
25 from django
.forms
import ValidationError
26 from django
.utils
.translation
import ugettext
as _
27 from mygpo
.api
.basic_auth
import require_valid_user
28 from mygpo
.decorators
import manual_gc
29 from django
.contrib
.auth
.decorators
import login_required
30 from django
.shortcuts
import get_object_or_404
31 from django
.contrib
.sites
.models
import Site
40 if request
.method
== 'GET':
42 form
= UserAccountForm({
43 'email': request
.user
.email
,
44 'public': request
.user
.get_profile().public_profile
47 return render_to_response('account.html', {
49 }, context_instance
=RequestContext(request
))
52 form
= UserAccountForm(request
.POST
)
54 if not form
.is_valid():
55 raise ValueError(_('Oops! Something went wrong. Please double-check the data you entered.'))
57 if form
.cleaned_data
['password_current']:
58 if not request
.user
.check_password(form
.cleaned_data
['password_current']):
59 raise ValueError('Current password is incorrect')
61 request
.user
.set_password(form
.cleaned_data
['password1'])
63 request
.user
.email
= form
.cleaned_data
['email']
65 request
.user
.get_profile().save()
73 except ValidationError
, e
:
77 return render_to_response('account.html', {
80 'error_message': error_message
81 }, context_instance
=RequestContext(request
))
86 def delete_account(request
):
88 if request
.method
== 'GET':
89 return render_to_response('delete_account.html', context_instance
=RequestContext(request
))
91 profile
= request
.user
.get_profile()
92 profile
.deleted
= True
95 request
.user
.is_active
= False
98 return render_to_response('delete_account.html', {
100 }, context_instance
=RequestContext(request
))
105 def privacy(request
):
107 if request
.method
== 'GET':
108 form
= UserAccountForm({
109 'email': request
.user
.email
,
110 'public': request
.user
.get_profile().public_profile
113 if 'private_subscriptions' in request
.GET
:
114 request
.user
.get_profile().settings
['public_profile'] = False
115 request
.user
.get_profile().save()
117 elif 'public_subscriptions' in request
.GET
:
118 request
.user
.get_profile().settings
['public_profile'] = True
119 request
.user
.get_profile().save()
121 if 'exclude' in request
.GET
:
122 id = request
.GET
['exclude']
124 podcast
= Podcast
.objects
.get(pk
=id)
125 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': False})
128 sm
.settings
['public_subscription'] = False
131 except Podcast
.DoesNotExist
:
134 if 'include' in request
.GET
:
135 id = request
.GET
['include']
137 podcast
= Podcast
.objects
.get(pk
=id)
138 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': True})
141 sm
.settings
['public_subscription'] = True
144 except Podcast
.DoesNotExist
:
147 subscriptions
= [s
for s
in Subscription
.objects
.filter(user
=request
.user
)]
148 included_subscriptions
= set([s
.podcast
for s
in subscriptions
if s
.get_meta().public
])
149 excluded_subscriptions
= set([s
.podcast
for s
in subscriptions
if not s
.get_meta().public
])
151 return render_to_response('privacy.html', {
152 'public_subscriptions': request
.user
.get_profile().public_profile
,
153 'included_subscriptions': included_subscriptions
,
154 'excluded_subscriptions': excluded_subscriptions
,
155 }, context_instance
=RequestContext(request
))
161 site
= Site
.objects
.get_current()
162 token
, c
= SecurityToken
.objects
.get_or_create(user
=request
.user
, object='subscriptions', action
='r')
165 if 'public_subscriptions' in request
.GET
:
169 elif 'private_subscriptions' in request
.GET
:
173 return render_to_response('share.html', {
175 'token': token
.token
,
176 }, context_instance
=RequestContext(request
))