From 8484bdbc4a9f37c76a8f8d1087b35324449aab36 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Sun, 14 Apr 2013 20:26:03 -0400 Subject: [PATCH] update user admin --- plstackapi/core/admin.py | 17 ++++++++++++++++- plstackapi/core/models/slice.py | 1 - plstackapi/core/models/user.py | 28 ++++++++++++++++++++++++++-- plstackapi/core/serializers.py | 1 + 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py index da2bea5..13c636b 100644 --- a/plstackapi/core/admin.py +++ b/plstackapi/core/admin.py @@ -82,6 +82,21 @@ class SiteAdmin(admin.ModelAdmin): inlines = [NodeInline,] search_fields = ['name'] +class UserForm(forms.ModelForm): + class Meta: + password = forms.CharField(widget=forms.PasswordInput) + model = User + widgets = { + 'password': forms.PasswordInput(), + } +class UserAdmin(admin.ModelAdmin): + form = UserForm + fieldsets = [ + ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']}) + ] + list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site'] + search_fields = ['email'] + class SliceAdmin(PlanetStackBaseAdmin): fields = ['name', 'site', 'instantiation', 'description', 'slice_url'] list_display = ('name', 'site','slice_url', 'instantiation') @@ -115,6 +130,6 @@ admin.site.register(Sliver) admin.site.register(Flavor) admin.site.register(Key) admin.site.register(Role, RoleAdmin) -admin.site.register(User) +admin.site.register(User, UserAdmin) admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin) diff --git a/plstackapi/core/models/slice.py b/plstackapi/core/models/slice.py index 4182e2f..a18a09e 100644 --- a/plstackapi/core/models/slice.py +++ b/plstackapi/core/models/slice.py @@ -5,7 +5,6 @@ from plstackapi.core.models import Site from plstackapi.core.models import User from plstackapi.core.models import Role from plstackapi.core.models import DeploymentNetwork - from plstackapi.openstack.driver import OpenStackDriver # Create your models here. diff --git a/plstackapi/core/models/user.py b/plstackapi/core/models/user.py index 765fb62..c21601c 100644 --- a/plstackapi/core/models/user.py +++ b/plstackapi/core/models/user.py @@ -3,14 +3,18 @@ import datetime from django.db import models from plstackapi.core.models import PlCoreBase from plstackapi.core.models import Site +from plstackapi.openstack.driver import OpenStackDriver + # Create your models here. class User(PlCoreBase): - user_id = models.CharField(max_length=256, unique=True) + user_id = models.CharField(max_length=256, unique=True, blank=True) firstname = models.CharField(help_text="person's given name", max_length=200) lastname = models.CharField(help_text="person's surname", max_length=200) - email = models.EmailField(help_text="e-mail address") + email = models.EmailField(help_text="e-mail address", null=True) + password = models.CharField(max_length=256, null=True, blank=True) + phone = models.CharField(null=True, blank=True, help_text="phone number contact", max_length=100) user_url = models.URLField(null=True, blank=True) is_admin = models.BooleanField(default=False) @@ -18,3 +22,23 @@ class User(PlCoreBase): site = models.ForeignKey(Site, related_name='users', verbose_name="Site this user will be homed too") def __unicode__(self): return u'%s' % (self.email) + + def save(self, *args, **kwds): + driver = OpenStackDriver() + if not self.user_id: + name = self.email[:self.email.find('@')] + user_fields = {'name': name, + 'email': self.email, + 'password': self.password, + 'enabled': self.enabled} + user = driver.create_user(**user_fields) + self.user_id = user.id + + self.password = None + super(User, self).save(*args, **kwds) + + def delete(self, *args, **kwds): + driver = OpenStackDriver() + if self.user_id: + driver.delete_user(self.user_id) + super(User, self).delete(*args, **kwds) diff --git a/plstackapi/core/serializers.py b/plstackapi/core/serializers.py index 6317803..5e077dc 100644 --- a/plstackapi/core/serializers.py +++ b/plstackapi/core/serializers.py @@ -26,6 +26,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): 'firstname', 'lastname', 'email', + 'password', 'phone', 'user_url', 'is_admin', -- 2.43.0