update user admin
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 15 Apr 2013 00:26:03 +0000 (20:26 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 15 Apr 2013 00:26:03 +0000 (20:26 -0400)
plstackapi/core/admin.py
plstackapi/core/models/slice.py
plstackapi/core/models/user.py
plstackapi/core/serializers.py

index da2bea5..13c636b 100644 (file)
@@ -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)
 
index 4182e2f..a18a09e 100644 (file)
@@ -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.
index 765fb62..c21601c 100644 (file)
@@ -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)                                 
index 6317803..5e077dc 100644 (file)
@@ -26,6 +26,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer):
                   'firstname', 
                   'lastname',
                   'email', 
+                  'password', 
                   'phone', 
                   'user_url',
                   'is_admin',