mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-24 01:18:38 -06:00
Relate SessionKey to UserKey rather than User
This commit is contained in:
parent
b868de8d67
commit
4cb30f1ce4
@ -71,7 +71,7 @@ class SecretViewSet(WritableSerializerMixin, ModelViewSet):
|
|||||||
# Retrieve session key cipher (if any) for the current user
|
# Retrieve session key cipher (if any) for the current user
|
||||||
if session_key is not None:
|
if session_key is not None:
|
||||||
try:
|
try:
|
||||||
sk = SessionKey.objects.get(user=request.user)
|
sk = SessionKey.objects.get(userkey__user=request.user)
|
||||||
master_key = sk.get_master_key(session_key)
|
master_key = sk.get_master_key(session_key)
|
||||||
secret.decrypt(master_key)
|
secret.decrypt(master_key)
|
||||||
except SessionKey.DoesNotExist:
|
except SessionKey.DoesNotExist:
|
||||||
@ -152,10 +152,10 @@ class GetSessionKeyViewSet(ViewSet):
|
|||||||
return HttpResponseBadRequest(ERR_PRIVKEY_INVALID)
|
return HttpResponseBadRequest(ERR_PRIVKEY_INVALID)
|
||||||
|
|
||||||
# Delete the existing SessionKey for this user if one exists
|
# Delete the existing SessionKey for this user if one exists
|
||||||
SessionKey.objects.filter(user=request.user).delete()
|
SessionKey.objects.filter(userkey__user=request.user).delete()
|
||||||
|
|
||||||
# Create a new SessionKey
|
# Create a new SessionKey
|
||||||
sk = SessionKey(user=request.user)
|
sk = SessionKey(userkey=user_key)
|
||||||
sk.save(master_key=master_key)
|
sk.save(master_key=master_key)
|
||||||
encoded_key = base64.b64encode(sk.key)
|
encoded_key = base64.b64encode(sk.key)
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by Django 1.10.6 on 2017-03-14 14:46
|
# Generated by Django 1.10.6 on 2017-03-14 17:19
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
@ -10,7 +10,6 @@ import django.db.models.deletion
|
|||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
|
||||||
('secrets', '0001_initial'),
|
('secrets', '0001_initial'),
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -22,7 +21,6 @@ class Migration(migrations.Migration):
|
|||||||
('cipher', models.BinaryField(max_length=512)),
|
('cipher', models.BinaryField(max_length=512)),
|
||||||
('hash', models.CharField(editable=False, max_length=128)),
|
('hash', models.CharField(editable=False, max_length=128)),
|
||||||
('created', models.DateTimeField(auto_now_add=True)),
|
('created', models.DateTimeField(auto_now_add=True)),
|
||||||
('user', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='session_key', to=settings.AUTH_USER_MODEL)),
|
|
||||||
],
|
],
|
||||||
options={
|
options={
|
||||||
'ordering': ['user__username'],
|
'ordering': ['user__username'],
|
||||||
@ -33,4 +31,9 @@ class Migration(migrations.Migration):
|
|||||||
name='user',
|
name='user',
|
||||||
field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='user_key', to=settings.AUTH_USER_MODEL),
|
field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='user_key', to=settings.AUTH_USER_MODEL),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='sessionkey',
|
||||||
|
name='userkey',
|
||||||
|
field=models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='session_key', to='secrets.UserKey'),
|
||||||
|
),
|
||||||
]
|
]
|
@ -187,7 +187,7 @@ class SessionKey(models.Model):
|
|||||||
"""
|
"""
|
||||||
A SessionKey stores a User's temporary key to be used for the encryption and decryption of secrets.
|
A SessionKey stores a User's temporary key to be used for the encryption and decryption of secrets.
|
||||||
"""
|
"""
|
||||||
user = models.OneToOneField(User, related_name='session_key', editable=False)
|
userkey = models.OneToOneField(UserKey, related_name='session_key', on_delete=models.CASCADE, editable=False)
|
||||||
cipher = models.BinaryField(max_length=512, editable=False)
|
cipher = models.BinaryField(max_length=512, editable=False)
|
||||||
hash = models.CharField(max_length=128, editable=False)
|
hash = models.CharField(max_length=128, editable=False)
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
|
@ -4,6 +4,12 @@
|
|||||||
|
|
||||||
{% block usercontent %}
|
{% block usercontent %}
|
||||||
{% if userkey %}
|
{% if userkey %}
|
||||||
|
<div class="pull-right">
|
||||||
|
<a href="{% url 'user:userkey_edit' %}" class="btn btn-warning">
|
||||||
|
<span class="fa fa-pencil" aria-hidden="true"></span>
|
||||||
|
Edit user key
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
<h4>
|
<h4>
|
||||||
Your user key is:
|
Your user key is:
|
||||||
{% if userkey.is_active %}
|
{% if userkey.is_active %}
|
||||||
@ -12,15 +18,21 @@
|
|||||||
<span class="label label-danger">Inactive</span>
|
<span class="label label-danger">Inactive</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</h4>
|
</h4>
|
||||||
<p>Your public key is below.</p>
|
|
||||||
<pre>{{ userkey.public_key }}</pre>
|
|
||||||
<div class="pull-right">
|
|
||||||
<a href="{% url 'user:userkey_edit' %}" class="btn btn-warning">
|
|
||||||
<span class="fa fa-pencil" aria-hidden="true"></span>
|
|
||||||
Edit user key
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% include 'inc/created_updated.html' with obj=userkey %}
|
{% include 'inc/created_updated.html' with obj=userkey %}
|
||||||
|
<pre>{{ userkey.public_key }}</pre>
|
||||||
|
<hr />
|
||||||
|
{% if userkey.session_key %}
|
||||||
|
<div class="pull-right">
|
||||||
|
<a href="#" class="btn btn-danger">
|
||||||
|
<span class="fa fa-trash" aria-hidden="true"></span>
|
||||||
|
Delete session key
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<h4>Session key: <span class="label label-success">Active</span></h4>
|
||||||
|
<small class="text-muted">Created {{ userkey.session_key.created }}</small>
|
||||||
|
{% else %}
|
||||||
|
<h4>No active session key</h4>
|
||||||
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>You don't have a user key on file.</p>
|
<p>You don't have a user key on file.</p>
|
||||||
<p>
|
<p>
|
||||||
|
Loading…
Reference in New Issue
Block a user