Merge lp:~widelands-dev/widelands-website/cleanup_ip_address_field into lp:widelands-website

Proposed by kaputtnik
Status: Merged
Merged at revision: 502
Proposed branch: lp:~widelands-dev/widelands-website/cleanup_ip_address_field
Merge into: lp:widelands-website
Diff against target: 429 lines (+87/-47)
16 files modified
pybb/admin.py (+1/-1)
pybb/forms.py (+1/-2)
pybb/migrations/0003_remove_post_user_ip.py (+19/-0)
pybb/models.py (+0/-1)
pybb/views.py (+1/-2)
templates/wiki/edit.html (+0/-1)
templates/wiki/history.html (+0/-4)
wiki/admin.py (+2/-8)
wiki/forms.py (+2/-6)
wiki/migrations/0003_auto_20180918_0836.py (+27/-0)
wiki/models.py (+7/-10)
wiki/views.py (+3/-5)
wlimages/admin.py (+1/-1)
wlimages/migrations/0003_remove_image_editor_ip.py (+19/-0)
wlimages/models.py (+3/-4)
wlimages/views.py (+1/-2)
To merge this branch: bzr merge lp:~widelands-dev/widelands-website/cleanup_ip_address_field
Reviewer Review Type Date Requested Status
Widelands Developers Pending
Review via email: mp+356061@code.launchpad.net

Commit message

Remove the use of an IPAddressField from wiki, wlimages and pybb

Description of the change

As far i can see the IPAddressField was stored without a specific reason, except allowing to post anonymously, which we don't allow at all.

This branch removes that field from wiki, wlimages and pybb.

Removing this field from threadedcomments will be done in a different branch, because the changes are too big for this branch.

To post a comment you must log in.
Revision history for this message
GunChleoc (gunchleoc) wrote :

2 comments that might or might not need attention.

Revision history for this message
kaputtnik (franku) wrote :

Thanks for the review :-)

The classes are just used to show collapsed sections. They show up as "More options (Show)" like here: https://wl.widelands.org/admin/news/post/188/change/

Sorry for the remaining print statement. I'll remove it and merge this then.

505. By kaputtnik

removed superfluous print statement

Revision history for this message
kaputtnik (franku) wrote :

The changes are applied, but not committed yet. Will do it this evening...

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'pybb/admin.py'
--- pybb/admin.py 2017-04-29 19:52:28 +0000
+++ pybb/admin.py 2018-10-03 20:25:29 +0000
@@ -84,7 +84,7 @@
84 ),84 ),
85 (_('Additional options'), {85 (_('Additional options'), {
86 'classes': ('collapse',),86 'classes': ('collapse',),
87 'fields': (('created', 'updated'), 'user_ip')87 'fields': (('created', 'updated'),)
88 }88 }
89 ),89 ),
90 (_('Message'), {90 (_('Message'), {
9191
=== modified file 'pybb/forms.py'
--- pybb/forms.py 2018-04-07 09:48:02 +0000
+++ pybb/forms.py 2018-10-03 20:25:29 +0000
@@ -25,7 +25,6 @@
25 self.user = kwargs.pop('user', None)25 self.user = kwargs.pop('user', None)
26 self.topic = kwargs.pop('topic', None)26 self.topic = kwargs.pop('topic', None)
27 self.forum = kwargs.pop('forum', None)27 self.forum = kwargs.pop('forum', None)
28 self.ip = kwargs.pop('ip', None)
29 super(AddPostForm, self).__init__(*args, **kwargs)28 super(AddPostForm, self).__init__(*args, **kwargs)
3029
31 if self.topic:30 if self.topic:
@@ -54,7 +53,7 @@
54 topic_is_new = False53 topic_is_new = False
55 topic = self.topic54 topic = self.topic
5655
57 post = Post(topic=topic, user=self.user, user_ip=self.ip,56 post = Post(topic=topic, user=self.user,
58 markup=self.cleaned_data['markup'],57 markup=self.cleaned_data['markup'],
59 body=self.cleaned_data['body'])58 body=self.cleaned_data['body'])
60 post.save(*args, **kwargs)59 post.save(*args, **kwargs)
6160
=== added file 'pybb/migrations/0003_remove_post_user_ip.py'
--- pybb/migrations/0003_remove_post_user_ip.py 1970-01-01 00:00:00 +0000
+++ pybb/migrations/0003_remove_post_user_ip.py 2018-10-03 20:25:29 +0000
@@ -0,0 +1,19 @@
1# -*- coding: utf-8 -*-
2# Generated by Django 1.11.12 on 2018-10-02 19:31
3from __future__ import unicode_literals
4
5from django.db import migrations
6
7
8class Migration(migrations.Migration):
9
10 dependencies = [
11 ('pybb', '0002_auto_20161001_2046'),
12 ]
13
14 operations = [
15 migrations.RemoveField(
16 model_name='post',
17 name='user_ip',
18 ),
19 ]
020
=== modified file 'pybb/models.py'
--- pybb/models.py 2018-04-08 14:40:17 +0000
+++ pybb/models.py 2018-10-03 20:25:29 +0000
@@ -203,7 +203,6 @@
203 body = models.TextField(_('Message'))203 body = models.TextField(_('Message'))
204 body_html = models.TextField(_('HTML version'))204 body_html = models.TextField(_('HTML version'))
205 body_text = models.TextField(_('Text version'))205 body_text = models.TextField(_('Text version'))
206 user_ip = models.GenericIPAddressField(_('User IP'), default='')
207 hidden = models.BooleanField(_('Hidden'), blank=True, default=False)206 hidden = models.BooleanField(_('Hidden'), blank=True, default=False)
208207
209 class Meta:208 class Meta:
210209
=== modified file 'pybb/views.py'
--- pybb/views.py 2018-04-08 14:40:17 +0000
+++ pybb/views.py 2018-10-03 20:25:29 +0000
@@ -20,7 +20,6 @@
20from pybb import settings as pybb_settings20from pybb import settings as pybb_settings
21from pybb.orm import load_related21from pybb.orm import load_related
2222
23from wl_utils import get_real_ip
24from check_input.models import SuspiciousInput23from check_input.models import SuspiciousInput
2524
26try:25try:
@@ -154,7 +153,7 @@
154 quote = quote_text(post.body, post.user, 'markdown')153 quote = quote_text(post.body, post.user, 'markdown')
155154
156 form = build_form(AddPostForm, request, topic=topic, forum=forum,155 form = build_form(AddPostForm, request, topic=topic, forum=forum,
157 user=request.user, ip=get_real_ip(request),156 user=request.user,
158 initial={'markup': 'markdown', 'body': quote})157 initial={'markup': 'markdown', 'body': quote})
159158
160 if form.is_valid():159 if form.is_valid():
161160
=== modified file 'templates/wiki/edit.html'
--- templates/wiki/edit.html 2017-01-15 12:03:04 +0000
+++ templates/wiki/edit.html 2018-10-03 20:25:29 +0000
@@ -77,7 +77,6 @@
77 {{ form.content_type }}77 {{ form.content_type }}
78 {{ form.object_id }}78 {{ form.object_id }}
79 {{ form.action }}79 {{ form.action }}
80 {{ form.user_ip }}
8180
82 <div>81 <div>
83 <input id="id_preview" type="button" value="{% trans "Preview" %}" />82 <input id="id_preview" type="button" value="{% trans "Preview" %}" />
8483
=== modified file 'templates/wiki/history.html'
--- templates/wiki/history.html 2016-04-26 16:10:04 +0000
+++ templates/wiki/history.html 2018-10-03 20:25:29 +0000
@@ -99,11 +99,7 @@
99 {{ change.modified|custom_date:user }}99 {{ change.modified|custom_date:user }}
100 </td>100 </td>
101 <td>101 <td>
102 {% if change.is_anonymous_change %}
103 {{ change.editor_ip }}
104 {% else %}
105 {{ change.editor|user_link }}102 {{ change.editor|user_link }}
106 {% endif %}
107 </td>103 </td>
108 <td class="italic">104 <td class="italic">
109 {% if change.comment %}'{{ change.comment }}'{% endif %}105 {% if change.comment %}'{{ change.comment }}'{% endif %}
110106
=== modified file 'wiki/admin.py'
--- wiki/admin.py 2017-12-03 11:43:47 +0000
+++ wiki/admin.py 2018-10-03 20:25:29 +0000
@@ -21,11 +21,7 @@
21 list_filter = ('title',)21 list_filter = ('title',)
22 ordering = ['-last_update']22 ordering = ['-last_update']
23 fieldsets = (23 fieldsets = (
24 (None, {'fields': ('title', 'content', 'markup')}),24 (None, {'fields': ('title', 'content', 'creator', 'markup')}),
25 ('Creator', {'fields': ('creator', 'creator_ip'),
26 'classes': ('collapse', 'wide')}),
27 # ('Group', {'fields': ('object_id', 'content_type'),
28 # 'classes': ('collapse', 'wide')}),
29 )25 )
30 raw_id_fields = ('creator',)26 raw_id_fields = ('creator',)
31 inlines = [InlineImages]27 inlines = [InlineImages]
@@ -41,13 +37,11 @@
41 list_filter = ('article__title',)37 list_filter = ('article__title',)
42 ordering = ('-modified',)38 ordering = ('-modified',)
43 fieldsets = (39 fieldsets = (
44 ('Article', {'fields': ('article',)}),40 ('Article', {'fields': ('article', 'editor')}),
45 ('Differences', {'fields': ('old_title', 'old_markup',41 ('Differences', {'fields': ('old_title', 'old_markup',
46 'content_diff')}),42 'content_diff')}),
47 ('Other', {'fields': ('comment', 'modified', 'revision', 'reverted'),43 ('Other', {'fields': ('comment', 'modified', 'revision', 'reverted'),
48 'classes': ('collapse', 'wide')}),44 'classes': ('collapse', 'wide')}),
49 ('Editor', {'fields': ('editor', 'editor_ip'),
50 'classes': ('collapse', 'wide')}),
51 )45 )
52 raw_id_fields = ('editor',)46 raw_id_fields = ('editor',)
5347
5448
=== modified file 'wiki/forms.py'
--- wiki/forms.py 2017-04-29 19:56:32 +0000
+++ wiki/forms.py 2018-10-03 20:25:29 +0000
@@ -22,7 +22,6 @@
22 summary = forms.CharField(widget=forms.Textarea)22 summary = forms.CharField(widget=forms.Textarea)
2323
24 comment = forms.CharField(required=False)24 comment = forms.CharField(required=False)
25 user_ip = forms.CharField(widget=forms.HiddenInput)
2625
27 content_type = forms.ModelChoiceField(26 content_type = forms.ModelChoiceField(
28 queryset=ContentType.objects.all(),27 queryset=ContentType.objects.all(),
@@ -35,8 +34,7 @@
3534
36 class Meta:35 class Meta:
37 model = Article36 model = Article
38 exclude = ('creator', 'creator_ip',37 exclude = ('creator', 'group', 'created_at', 'last_update')
39 'group', 'created_at', 'last_update')
4038
41 def clean_title(self):39 def clean_title(self):
42 """Check for some errors regarding the title:40 """Check for some errors regarding the title:
@@ -92,7 +90,6 @@
9290
93 def save(self, *args, **kwargs):91 def save(self, *args, **kwargs):
94 # 0 - Extra data92 # 0 - Extra data
95 editor_ip = self.cleaned_data['user_ip']
96 comment = self.cleaned_data['comment']93 comment = self.cleaned_data['comment']
9794
98 # 2 - Save the Article95 # 2 - Save the Article
@@ -102,7 +99,6 @@
102 editor = getattr(self, 'editor', None)99 editor = getattr(self, 'editor', None)
103 group = getattr(self, 'group', None)100 group = getattr(self, 'group', None)
104 if self.is_new:101 if self.is_new:
105 article.creator_ip = editor_ip
106 if editor is not None:102 if editor is not None:
107 article.creator = editor103 article.creator = editor
108 article.group = group104 article.group = group
@@ -113,6 +109,6 @@
113 # 4 - Create new revision109 # 4 - Create new revision
114 changeset = article.new_revision(110 changeset = article.new_revision(
115 self.old_content, self.old_title, self.old_markup,111 self.old_content, self.old_title, self.old_markup,
116 comment, editor_ip, editor)112 comment, editor)
117113
118 return article, changeset114 return article, changeset
119115
=== added file 'wiki/migrations/0003_auto_20180918_0836.py'
--- wiki/migrations/0003_auto_20180918_0836.py 1970-01-01 00:00:00 +0000
+++ wiki/migrations/0003_auto_20180918_0836.py 2018-10-03 20:25:29 +0000
@@ -0,0 +1,27 @@
1# -*- coding: utf-8 -*-
2# Generated by Django 1.11.12 on 2018-09-18 08:36
3from __future__ import unicode_literals
4
5from django.db import migrations
6
7
8class Migration(migrations.Migration):
9
10 dependencies = [
11 ('wiki', '0002_auto_20161218_1056'),
12 ]
13
14 operations = [
15 migrations.AlterModelOptions(
16 name='article',
17 options={'default_permissions': ('change', 'add'), 'ordering': ['title'], 'verbose_name': 'Article', 'verbose_name_plural': 'Articles'},
18 ),
19 migrations.RemoveField(
20 model_name='article',
21 name='creator_ip',
22 ),
23 migrations.RemoveField(
24 model_name='changeset',
25 name='editor_ip',
26 ),
27 ]
028
=== modified file 'wiki/models.py'
--- wiki/models.py 2018-05-02 06:33:13 +0000
+++ wiki/models.py 2018-10-03 20:25:29 +0000
@@ -53,8 +53,6 @@
53 null=True, blank=True)53 null=True, blank=True)
54 creator = models.ForeignKey(User, verbose_name=_('Article Creator'),54 creator = models.ForeignKey(User, verbose_name=_('Article Creator'),
55 null=True)55 null=True)
56 creator_ip = models.GenericIPAddressField(_('IP Address of the Article Creator'),
57 blank=True, null=True)
58 created_at = models.DateTimeField(default=datetime.now)56 created_at = models.DateTimeField(default=datetime.now)
59 last_update = models.DateTimeField(blank=True, null=True)57 last_update = models.DateTimeField(blank=True, null=True)
6058
@@ -93,7 +91,7 @@
93 return self.images.all()91 return self.images.all()
9492
95 def new_revision(self, old_content, old_title, old_markup,93 def new_revision(self, old_content, old_title, old_markup,
96 comment, editor_ip, editor):94 comment, editor):
97 """Create a new ChangeSet with the old content."""95 """Create a new ChangeSet with the old content."""
9896
99 content_diff = diff(self.content, old_content)97 content_diff = diff(self.content, old_content)
@@ -101,7 +99,6 @@
101 cs = ChangeSet.objects.create(99 cs = ChangeSet.objects.create(
102 article=self,100 article=self,
103 comment=comment,101 comment=comment,
104 editor_ip=editor_ip,
105 editor=editor,102 editor=editor,
106 old_title=old_title,103 old_title=old_title,
107 old_markup=old_markup,104 old_markup=old_markup,
@@ -109,10 +106,10 @@
109106
110 return cs107 return cs
111108
112 def revert_to(self, revision, editor_ip, editor=None):109 def revert_to(self, revision, editor=None):
113 """Revert the article to a previuos state, by revision number."""110 """Revert the article to a previuos state, by revision number."""
114 changeset = self.changeset_set.get(revision=revision)111 changeset = self.changeset_set.get(revision=revision)
115 changeset.reapply(editor_ip, editor)112 changeset.reapply(editor)
116113
117 def compare(self, from_revision, to_revision):114 def compare(self, from_revision, to_revision):
118 """Compares to revisions of this article."""115 """Compares to revisions of this article."""
@@ -139,10 +136,9 @@
139136
140 article = models.ForeignKey(Article, verbose_name=_(u"Article"))137 article = models.ForeignKey(Article, verbose_name=_(u"Article"))
141138
142 # Editor identification -- logged or anonymous139 # Editor identification -- logged
143 editor = models.ForeignKey(User, verbose_name=_(u'Editor'),140 editor = models.ForeignKey(User, verbose_name=_(u'Editor'),
144 null=True)141 null=True)
145 editor_ip = models.GenericIPAddressField(_(u"IP Address of the Editor"))
146142
147 # Revision number, starting from 1143 # Revision number, starting from 1
148 revision = models.IntegerField(_(u"Revision Number"))144 revision = models.IntegerField(_(u"Revision Number"))
@@ -185,7 +181,7 @@
185 def is_anonymous_change(self):181 def is_anonymous_change(self):
186 return self.editor is None182 return self.editor is None
187183
188 def reapply(self, editor_ip, editor):184 def reapply(self, editor):
189 """Return the Article to this revision."""185 """Return the Article to this revision."""
190186
191 # XXX Would be better to exclude reverted revisions187 # XXX Would be better to exclude reverted revisions
@@ -218,7 +214,8 @@
218 old_content=old_content, old_title=old_title,214 old_content=old_content, old_title=old_title,
219 old_markup=old_markup,215 old_markup=old_markup,
220 comment='Reverted to revision #%s' % self.revision,216 comment='Reverted to revision #%s' % self.revision,
221 editor_ip=editor_ip, editor=editor)217 editor=editor
218 )
222219
223 self.save()220 self.save()
224221
225222
=== modified file 'wiki/views.py'
--- wiki/views.py 2018-04-08 14:40:17 +0000
+++ wiki/views.py 2018-10-03 20:25:29 +0000
@@ -300,15 +300,13 @@
300 return redirect(new_article)300 return redirect(new_article)
301301
302 elif request.method == 'GET':302 elif request.method == 'GET':
303 user_ip = get_real_ip(request)
304303
305 # TODO(Franku): Never worked IMHO304 # TODO(Franku): Never worked IMHO
306 # lock = cache.get(title, None)305 # lock = cache.get(title, None)
307 # if lock is None:306 # if lock is None:
308 # lock = ArticleEditLock(title, request)307 # lock = ArticleEditLock(title, request)
309 # lock.create_message(request)308 # lock.create_message(request)
310309 initial = {}
311 initial = {'user_ip': user_ip}
312 if group_slug is not None:310 if group_slug is not None:
313 initial.update({'content_type': group_ct.id,311 initial.update({'content_type': group_ct.id,
314 'object_id': group.id})312 'object_id': group.id})
@@ -493,9 +491,9 @@
493 except Article.DoesNotExist:491 except Article.DoesNotExist:
494 # No existing article found -> reverting possible492 # No existing article found -> reverting possible
495 if request.user.is_authenticated:493 if request.user.is_authenticated:
496 article.revert_to(revision, get_real_ip(request), request.user)494 article.revert_to(revision, request.user)
497 else:495 else:
498 article.revert_to(revision, get_real_ip(request))496 article.revert_to(revision)
499 return redirect(article)497 return redirect(article)
500 # An article with this name exists498 # An article with this name exists
501 messages.error(499 messages.error(
502500
=== modified file 'wlimages/admin.py'
--- wlimages/admin.py 2016-12-13 18:28:51 +0000
+++ wlimages/admin.py 2018-10-03 20:25:29 +0000
@@ -31,7 +31,7 @@
31 actions = [delete_with_file]31 actions = [delete_with_file]
32 fieldsets = (32 fieldsets = (
33 (None, {'fields': ('image', 'name', 'date_submitted', 'revision')}),33 (None, {'fields': ('image', 'name', 'date_submitted', 'revision')}),
34 (_('Upload data:'), {'fields': ('user', 'editor_ip')}),34 (_('Uploaded by:'), {'fields': ('user',)}),
35 (_('Content object:'), {35 (_('Content object:'), {
36 'fields': (('content_type', 'content_object'), 'object_id')}),36 'fields': (('content_type', 'content_object'), 'object_id')}),
37 )37 )
3838
=== added file 'wlimages/migrations/0003_remove_image_editor_ip.py'
--- wlimages/migrations/0003_remove_image_editor_ip.py 1970-01-01 00:00:00 +0000
+++ wlimages/migrations/0003_remove_image_editor_ip.py 2018-10-03 20:25:29 +0000
@@ -0,0 +1,19 @@
1# -*- coding: utf-8 -*-
2# Generated by Django 1.11.12 on 2018-09-18 09:01
3from __future__ import unicode_literals
4
5from django.db import migrations
6
7
8class Migration(migrations.Migration):
9
10 dependencies = [
11 ('wlimages', '0002_remove_image_url'),
12 ]
13
14 operations = [
15 migrations.RemoveField(
16 model_name='image',
17 name='editor_ip',
18 ),
19 ]
020
=== modified file 'wlimages/models.py'
--- wlimages/models.py 2016-12-13 18:28:51 +0000
+++ wlimages/models.py 2018-10-03 20:25:29 +0000
@@ -24,6 +24,7 @@
24 def create(self, **keyw):24 def create(self, **keyw):
25 """Makes sure that no image/revision pair is already in the25 """Makes sure that no image/revision pair is already in the
26 database."""26 database."""
27
27 if 'name' not in keyw or 'revision' not in keyw:28 if 'name' not in keyw or 'revision' not in keyw:
28 raise IntegrityError('needs name and revision as keywords')29 raise IntegrityError('needs name and revision as keywords')
2930
@@ -32,12 +33,12 @@
3233
33 return super(ImageManager, self).create(**keyw)34 return super(ImageManager, self).create(**keyw)
3435
35 def create_and_save_image(self, user, image, content_type, object_id, ip):36 def create_and_save_image(self, user, image, content_type, object_id):
36 # Use Django's get_valid_name() to get a safe filename37 # Use Django's get_valid_name() to get a safe filename
37 storage = FileSystemStorage()38 storage = FileSystemStorage()
38 safe_filename = storage.get_valid_name(image.name)39 safe_filename = storage.get_valid_name(image.name)
39 im = self.create(content_type=content_type, object_id=object_id,40 im = self.create(content_type=content_type, object_id=object_id,
40 user=user, revision=1, name=image.name, editor_ip=ip)41 user=user, revision=1, name=image.name)
41 path = '%swlimages/%s' % (MEDIA_ROOT, safe_filename)42 path = '%swlimages/%s' % (MEDIA_ROOT, safe_filename)
4243
43 destination = open(path, 'wb')44 destination = open(path, 'wb')
@@ -69,8 +70,6 @@
6970
70 # User Field71 # User Field
71 user = models.ForeignKey(User)72 user = models.ForeignKey(User)
72 editor_ip = models.GenericIPAddressField(
73 _('IP address'), null=True, blank=True)
7473
75 # Date Fields74 # Date Fields
76 date_submitted = models.DateTimeField(75 date_submitted = models.DateTimeField(
7776
=== modified file 'wlimages/views.py'
--- wlimages/views.py 2018-04-03 05:18:03 +0000
+++ wlimages/views.py 2018-10-03 20:25:29 +0000
@@ -4,7 +4,6 @@
4from django.shortcuts import get_object_or_404, render4from django.shortcuts import get_object_or_404, render
55
6from models import Image6from models import Image
7from wl_utils import get_real_ip
8from forms import UploadImageForm7from forms import UploadImageForm
98
109
@@ -31,7 +30,7 @@
31 form = UploadImageForm(request.POST, request.FILES)30 form = UploadImageForm(request.POST, request.FILES)
32 if form.is_valid(): # All validation rules pass31 if form.is_valid(): # All validation rules pass
33 Image.objects.create_and_save_image(user=request.user, image=request.FILES['imagename'],32 Image.objects.create_and_save_image(user=request.user, image=request.FILES['imagename'],
34 content_type=ContentType.objects.get(pk=content_type), object_id=object_id, ip=get_real_ip(request))33 content_type=ContentType.objects.get(pk=content_type), object_id=object_id)
35 return HttpResponseRedirect(next) # Redirect after POST34 return HttpResponseRedirect(next) # Redirect after POST
36 else:35 else:
37 form = UploadImageForm() # An unbound form36 form = UploadImageForm() # An unbound form

Subscribers

People subscribed via source and target branches