Add option to not collect IP addresses (closes #18)

This commit is contained in:
R. Miles McCain 2020-05-02 12:35:47 -04:00
parent a210e23bb3
commit 26778f0219
No known key found for this signature in database
GPG Key ID: 24F9B6A2588C5408
10 changed files with 49 additions and 7 deletions

View File

@ -42,8 +42,9 @@ SESSION_MEMORY_TIMEOUT=1800
# them to be able to create services of their own. # them to be able to create services of their own.
ONLY_SUPERUSERS_CREATE=True ONLY_SUPERUSERS_CREATE=True
# Whether to perform checks and setup at startup. For most setups, # Whether to perform checks and setup at startup, including applying unapplied
# the recommended value is True. # migrations. For most setups, the recommended value is True. Defaults to True.
# Will skip only if value is False.
PERFORM_CHECKS_AND_SETUP=True PERFORM_CHECKS_AND_SETUP=True
# Your admin user's email. A temporary password will be printed # Your admin user's email. A temporary password will be printed

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2020-05-02 16:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('analytics', '0002_auto_20200415_1742'),
]
operations = [
migrations.AlterField(
model_name='session',
name='ip',
field=models.GenericIPAddressField(db_index=True, null=True),
),
]

View File

@ -39,7 +39,7 @@ class Session(models.Model):
default="OTHER", default="OTHER",
) )
os = models.TextField() os = models.TextField()
ip = models.GenericIPAddressField(db_index=True) ip = models.GenericIPAddressField(db_index=True, null=True)
# GeoIP data # GeoIP data
asn = models.TextField(blank=True) asn = models.TextField(blank=True)

View File

@ -103,7 +103,7 @@ def ingress_request(
device_type = "DESKTOP" device_type = "DESKTOP"
session = Session.objects.create( session = Session.objects.create(
service=service, service=service,
ip=ip, ip=ip if service.collect_ips else None,
user_agent=user_agent, user_agent=user_agent,
identifier=identifier.strip(), identifier=identifier.strip(),
browser=ua.browser.family or "", browser=ua.browser.family or "",

View File

@ -0,0 +1,18 @@
# Generated by Django 3.0.5 on 2020-05-02 16:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('core', '0003_service_respect_dnt'),
]
operations = [
migrations.AddField(
model_name='service',
name='collect_ips',
field=models.BooleanField(default=True),
),
]

View File

@ -42,6 +42,7 @@ class Service(models.Model):
max_length=2, choices=SERVICE_STATUSES, default=ACTIVE, db_index=True max_length=2, choices=SERVICE_STATUSES, default=ACTIVE, db_index=True
) )
respect_dnt = models.BooleanField(default=True) respect_dnt = models.BooleanField(default=True)
collect_ips = models.BooleanField(default=True)
class Meta: class Meta:
ordering = ["name", "uuid"] ordering = ["name", "uuid"]

View File

@ -8,15 +8,17 @@ from core.models import Service, User
class ServiceForm(forms.ModelForm): class ServiceForm(forms.ModelForm):
class Meta: class Meta:
model = Service model = Service
fields = ["name", "link", "respect_dnt", "origins", "collaborators"] fields = ["name", "link", "respect_dnt", "collect_ips", "origins", "collaborators"]
widgets = { widgets = {
"name": forms.TextInput(), "name": forms.TextInput(),
"origins": forms.TextInput(), "origins": forms.TextInput(),
"respect_dnt": forms.RadioSelect(choices=[(True, "Yes"), (False, "No")]), "respect_dnt": forms.RadioSelect(choices=[(True, "Yes"), (False, "No")]),
"collect_ips": forms.RadioSelect(choices=[(True, "Yes"), (False, "No")]),
} }
labels = { labels = {
"origins": "Allowed Hostnames", "origins": "Allowed Hostnames",
"respect_dnt": "Respect DNT", "respect_dnt": "Respect DNT",
"collect_ips": "Collect IP addresses"
} }
help_texts = { help_texts = {
"name": _("What should the service be called?"), "name": _("What should the service be called?"),
@ -25,6 +27,7 @@ class ServiceForm(forms.ModelForm):
"At what hostnames does the service operate? This sets CORS headers, so use '*' if you're not sure (or don't care)." "At what hostnames does the service operate? This sets CORS headers, so use '*' if you're not sure (or don't care)."
), ),
"respect_dnt": "Should visitors who have enabled <a href='https://en.wikipedia.org/wiki/Do_Not_Track'>Do Not Track</a> be excluded from all data?", "respect_dnt": "Should visitors who have enabled <a href='https://en.wikipedia.org/wiki/Do_Not_Track'>Do Not Track</a> be excluded from all data?",
"collect_ips": "Should individual IP addresses be collected? IP metadata (location, host, etc) will still be collected."
} }
collaborators = forms.CharField( collaborators = forms.CharField(

View File

@ -8,5 +8,6 @@
<summary class="cursor-pointer text-sm">Advanced settings</summary> <summary class="cursor-pointer text-sm">Advanced settings</summary>
<hr class="sep h-4"> <hr class="sep h-4">
{{form.respect_dnt|a17t}} {{form.respect_dnt|a17t}}
{{form.collect_ips|a17t}}
{{form.origins|a17t}} {{form.origins|a17t}}
</details> </details>

View File

@ -60,7 +60,7 @@
</div> </div>
<div> <div>
<p>IP</p> <p>IP</p>
<p class="label" title="{{session.ip}}">{{session.ip|truncatechars:"16"}}</p> <p class="label" title="{{session.ip}}">{{session.ip|default:"Not Collected"|truncatechars:"16"}}</p>
</div> </div>
</div> </div>
</article> </article>

View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
if [[ $PERFORM_CHECKS_AND_SETUP == True ]]; then if [[ ! $PERFORM_CHECKS_AND_SETUP == False ]]; then
./startup_checks.sh ./startup_checks.sh
fi fi