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
, allowed_methods
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
36 @allowed_methods(['GET', 'POST'])
41 if request
.method
== 'GET':
43 form
= UserAccountForm({
44 'email': request
.user
.email
,
45 'public': request
.user
.get_profile().public_profile
48 return render_to_response('account.html', {
50 }, context_instance
=RequestContext(request
))
53 form
= UserAccountForm(request
.POST
)
55 if not form
.is_valid():
56 raise ValueError(_('Oops! Something went wrong. Please double-check the data you entered.'))
58 if form
.cleaned_data
['password_current']:
59 if not request
.user
.check_password(form
.cleaned_data
['password_current']):
60 raise ValueError('Current password is incorrect')
62 request
.user
.set_password(form
.cleaned_data
['password1'])
64 request
.user
.email
= form
.cleaned_data
['email']
66 request
.user
.get_profile().save()
74 except ValidationError
, e
:
78 return render_to_response('account.html', {
81 'error_message': error_message
82 }, context_instance
=RequestContext(request
))
87 @allowed_methods(['GET', 'POST'])
88 def delete_account(request
):
90 if request
.method
== 'GET':
91 return render_to_response('delete_account.html', context_instance
=RequestContext(request
))
93 profile
= request
.user
.get_profile()
94 profile
.deleted
= True
97 request
.user
.is_active
= False
100 return render_to_response('delete_account.html', {
102 }, context_instance
=RequestContext(request
))
107 @allowed_methods(['GET'])
108 def privacy(request
):
110 if 'private_subscriptions' in request
.GET
:
111 request
.user
.get_profile().settings
['public_profile'] = False
112 request
.user
.get_profile().save()
114 elif 'public_subscriptions' in request
.GET
:
115 request
.user
.get_profile().settings
['public_profile'] = True
116 request
.user
.get_profile().save()
118 if 'exclude' in request
.GET
:
119 id = request
.GET
['exclude']
121 podcast
= Podcast
.objects
.get(pk
=id)
122 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': False})
125 sm
.settings
['public_subscription'] = False
128 except Podcast
.DoesNotExist
:
131 if 'include' in request
.GET
:
132 id = request
.GET
['include']
134 podcast
= Podcast
.objects
.get(pk
=id)
135 sm
, c
= SubscriptionMeta
.objects
.get_or_create(user
=request
.user
, podcast
=podcast
, defaults
={'public': True})
138 sm
.settings
['public_subscription'] = True
141 except Podcast
.DoesNotExist
:
144 subscriptions
= [s
for s
in Subscription
.objects
.filter(user
=request
.user
)]
145 included_subscriptions
= set([s
.podcast
for s
in subscriptions
if s
.get_meta().public
])
146 excluded_subscriptions
= set([s
.podcast
for s
in subscriptions
if not s
.get_meta().public
])
148 return render_to_response('privacy.html', {
149 'public_subscriptions': request
.user
.get_profile().public_profile
,
150 'included_subscriptions': included_subscriptions
,
151 'excluded_subscriptions': excluded_subscriptions
,
152 }, context_instance
=RequestContext(request
))
158 site
= Site
.objects
.get_current()
159 token
, c
= SecurityToken
.objects
.get_or_create(user
=request
.user
, object='subscriptions', action
='r')
162 if 'public_subscriptions' in request
.GET
:
166 elif 'private_subscriptions' in request
.GET
:
170 return render_to_response('share.html', {
172 'token': token
.token
,
173 }, context_instance
=RequestContext(request
))