45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from django.db.models.signals import post_save
 | |
| from django.dispatch import receiver
 | |
| from django.contrib.auth.models import User
 | |
| from django.db.models import TextField, BooleanField, CharField
 | |
| 
 | |
| SSH_TYPE_CHOICES = (
 | |
|     ('ssh-rsa', 'ssh-rsa',),
 | |
|     ('ssh-dss', 'ssh-dss',),
 | |
| )
 | |
| 
 | |
| class Townie(User):
 | |
|     """Both an almost normal Django User as well as an abstraction over a
 | |
|     system user."""
 | |
|     pubkey = TextField(blank=False, null=False)
 | |
|     shell = CharField(max_length=50, default="/bin/bash")
 | |
|     reviewed = BooleanField(default=False)
 | |
|     displayname = CharField(max_length=100, blank=False, null=False)
 | |
|     pubkey_type = CharField(max_length=15,
 | |
|                             blank=False,
 | |
|                             null=False,
 | |
|                             choices=SSH_TYPE_CHOICES)
 | |
| 
 | |
|     @property
 | |
|     def home_path(self):
 | |
|         return "/home/{}".format(self.username)
 | |
| 
 | |
|     def accept(self):
 | |
|         """Sets self.pending to False. Indicates the user has been signed up
 | |
|         after review."""
 | |
|         self.pending = False
 | |
| 
 | |
|     def ensure_shell(self):
 | |
|         """Runs chsh for the user to set their shell to whatever self.shell
 | |
|         is."""
 | |
|         raise NotImplementedError()
 | |
| 
 | |
| @receiver(post_save, sender=Townie)
 | |
| def sync_system_state(sender, instance, created, **kwargs):
 | |
|     if created:
 | |
|         print('TODO would create new user on system')
 | |
|     else:
 | |
|         print('TODO would update existing user on system')
 | |
| 
 | |
|     return
 |