Restrict usernames to lowercase, digits, and hyphens.
[zzz-floof.git] / floof / model / users.py
index 7601cf5..bacdfe6 100644 (file)
@@ -4,12 +4,15 @@
 #   Copyright (c) 2009 Scribblr
 #
 
 #   Copyright (c) 2009 Scribblr
 #
 
-# from elixir import Entity, Field, Unicode, belongs_to, has_many
+import re
+
 from elixir import *
 from elixir import *
+
 from search import GalleryWidget
 
 class User(Entity):
     name = Field(Unicode(20))
 from search import GalleryWidget
 
 class User(Entity):
     name = Field(Unicode(20))
+    display_name = Field(Unicode(20))
     uploads = OneToMany('Art')
     has_many('identity_urls', of_kind='IdentityURL')
     searches = OneToMany('SavedSearch')
     uploads = OneToMany('Art')
     has_many('identity_urls', of_kind='IdentityURL')
     searches = OneToMany('SavedSearch')
@@ -19,10 +22,22 @@ class User(Entity):
     relationships = OneToMany('UserRelationship', inverse='user')
     target_of_relationships = OneToMany('UserRelationship', inverse='target_user')
 
     relationships = OneToMany('UserRelationship', inverse='user')
     target_of_relationships = OneToMany('UserRelationship', inverse='target_user')
 
+    @classmethod
+    def is_valid_name(cls, name):
+        """Returns True iff the name is a valid username.
+
+        Only lowercase letters, numbers, and hyphens are allowed.
+
+        Names must also be at least one character long, but no more than 20,
+        and cannot start or end with a hyphen.
+        """
+        return re.match('^[-a-z0-9]{1,20}$', name) \
+               and name[0] != '-' and name[-1] != '-'
+
 
     def __unicode__(self):
         return self.name
 
     def __unicode__(self):
         return self.name
-    
+
     def __str__(self):
         return self.name
 
     def __str__(self):
         return self.name