diff --git a/.gitignore b/.gitignore
index 3b943e1bb..d5be6856d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,3 +25,4 @@ cherrypy.config
data/users.sqlite3
predepend
build/
+*.pid
\ No newline at end of file
diff --git a/model.py b/model.py
index d3807d0b1..e0b3cd20d 100644
--- a/model.py
+++ b/model.py
@@ -1,14 +1,15 @@
class User(dict):
- """ Every user must have keys for a username, name, password (this
+ """ Every user must have keys for a username, name, passphrase (this
is a md5 hash of the password), groups, and an email address. They can be
blank or None, but the keys must exist. """
def __init__(self, dict=None):
- for key in ['username', 'name', 'password', 'email']:
+ for key in ['username', 'name', 'passphrase', 'email']:
self[key] = ''
for key in ['groups']:
self[key] = []
- for key in dict:
- self[key] = dict[key]
+ if dict:
+ for key in dict:
+ self[key] = dict[key]
def __getattr__(self, attr):
return None
diff --git a/modules/installed/lib/user_store.py b/modules/installed/lib/user_store.py
index a4042c102..236b73a8f 100644
--- a/modules/installed/lib/user_store.py
+++ b/modules/installed/lib/user_store.py
@@ -12,10 +12,42 @@ class UserStore(UserStoreModule, sqlite_db):
self.db_file = cfg.user_db
sqlite_db.__init__(self, self.db_file, autocommit=True)
self.__enter__()
+
def close(self):
- self.__exit__()
- def expert(self):
- return False
+ self.__exit__(None,None,None)
+
+ def expert(self, username=None):
+ groups = self.attr(username,"groups")
+ if not groups:
+ return False
+ return 'expert' in groups
+
+ def attr(self, username=None, field=None):
+ return self.get(username)[field]
+
+ def get(self,username=None):
+ return User(sqlite_db.get(self,username))
+
+ def exists(self, username=None):
+ try:
+ user = self.get(username)
+ if not user:
+ return False
+ elif user["username"]=='':
+ return False
+ return True
+ except TypeError:
+ return False
+
+ def remove(self,username=None):
+ self.__delitem__(username)
+ self.commit()
+
+ def get_all(self):
+ return self.items()
+
+ def set(self,username=None,user=None):
+ sqlite_db.__setitem__(self,username, user)
class UserStoreOld():
#class UserStore(UserStoreModule):
diff --git a/modules/installed/system/users.py b/modules/installed/system/users.py
index c4ac97771..63d9c7631 100644
--- a/modules/installed/system/users.py
+++ b/modules/installed/system/users.py
@@ -5,22 +5,23 @@ from plugin_mount import PagePlugin, FormPlugin
import cfg
from forms import Form
from util import *
+from pprint import pprint
class users(PagePlugin):
order = 20 # order of running init in PagePlugins
def __init__(self, *args, **kwargs):
PagePlugin.__init__(self, *args, **kwargs)
self.register_page("sys.users")
+ self.register_page("sys.users.add")
+ self.register_page("sys.users.edit")
@cherrypy.expose
@require()
def index(self):
- parts = self.forms('/sys/config')
- parts['title']=_("Manage Users and Groups")
- return self.fill_template(**parts)
+ return self.fill_template(title="Manage Users and Groups", sidebar_right="""Add User
Edit Users""")
class add(FormPlugin, PagePlugin):
- url = ["/sys/users"]
+ url = ["/sys/users/add"]
order = 30
sidebar_left = ''
@@ -46,27 +47,29 @@ class add(FormPlugin, PagePlugin):
return form.render()
def process_form(self, username=None, name=None, email=None, md5_password=None, **kwargs):
- msg = ''
+ msg = Message()
- if not username: msg = add_message(msg, _("Must specify a username!"))
- if not md5_password: msg = add_message(msg, _("Must specify a password!"))
+ if not username: msg.add = _("Must specify a username!")
+ if not md5_password: msg.add = _("Must specify a password!")
- if username in cfg.users:
- msg = add_message(msg, _("User already exists!"))
+ if username in cfg.users.keys():
+ msg.add = _("User already exists!")
else:
try:
- cfg.users[username]= User(dict={'username':username, 'name':name, 'email':email, 'password':md5_password})
+ di = {'username':username, 'name':name, 'email':email, 'passphrase':md5_password}
+ new_user = User(dict=di)
+ cfg.users.set(username,new_user)
except:
- msg = add_message(msg, _("Error storing user!"))
+ msg.add = _("Error storing user!")
if not msg:
- msg = add_message(msg, "%s saved." % username)
-
- main = self.make_form(username, name, email, message=msg)
- return self.fill_template(title="", main=main, sidebar_left=self.sidebar_left, sidebar_right=self.sidebar_right)
+ msg.add = _("%s saved." % username)
+ cfg.log(msg.text)
+ #main = self.make_form(username, name, email, msg=msg.text)
+ return self.fill_template(title="Manage Users and Groups", main=main, sidebar_left=self.sidebar_left, sidebar_right=self.sidebar_right)
class edit(FormPlugin, PagePlugin):
- url = ["/sys/users"]
+ url = ["/sys/users/edit"]
order = 35
sidebar_left = ''
@@ -77,7 +80,7 @@ class edit(FormPlugin, PagePlugin):
system.
Deleting users is permanent!
""" % (cfg.product_name, cfg.box_name)) def main(self, msg=''): - users = cfg.users.keys() + users = cfg.users add_form = Form(title=_("Edit or Delete User"), action="/sys/users/edit", message=msg) add_form.html('Delete