コード例 #1
0
    def editUser(self, uid):
        # Check if the user has propper permissions and present a nice message if not
        # This is ofcourse also checked on the server side.
        may_open = False
        if uid == cm.get_binded_user() and accesstools.check_permission("user.self.modify", False):
            may_open = True
        elif accesstools.check_permission_multi_or(("user.modify", "user.view")):
            may_open = True

        if may_open == False:
            return

        if self.useredits.has_key(uid):
            self.tabwidget.setCurrentWidget(self.useredits[uid])
            return
        import usereditwdg as usered

        useredit = usered.UserEditWdg(uid, self.tabwidget)
        self.useredits[useredit] = uid
        self.useredits[uid] = useredit
        tab_title = useredit.led_firstname.text() + " " + useredit.led_lastname.text()

        usericon = paths.path_to("art/student.svg")
        if os.path.exists(paths.path_to("art/%s.svg") % userdef.usertype_as_text(useredit.user_info["usertype_id"])):
            usericon = paths.path_to("art/%s.svg") % userdef.usertype_as_text(useredit.user_info["usertype_id"])
        self.tabwidget.addTab(useredit, QtGui.QIcon(qt4tools.svg2pixmap(usericon, 32, 32)), tab_title)
        self.tabwidget.setCurrentWidget(useredit)
コード例 #2
0
	def setupUserTypeCombo(self):
		self.tr("teacher","plural")
		self.tr("student","plural")
		self.tr("parent","plural")
		self.tr("other","plural")
		usertypeids = userdef.list_usertypes_by_id()
		self.cmb_usertype_filter.addItem(self.tr("All","plural users"),QtCore.QVariant(-1))
		for i in usertypeids:
			self.cmb_usertype_filter.addItem(
				self.tr(userdef.usertype_as_text(i),"plural"),
				QtCore.QVariant(i))
		self.connect(self.cmb_usertype_filter,QtCore.SIGNAL('activated(int)'),self.updateUserView)
コード例 #3
0
	def loadUserData(self):
		proxy = cm.get_proxy_handle()
		self.user_info = proxy.list_users(uid=self.username)
		if self.user_info.has_key(self.username):
			self.change_info = {}
			self.user_info = self.user_info[self.username]
			self.lbl_usertype.setText(self.tr(userdef.usertype_as_text(self.user_info['usertype_id']),'singular'))
			self.lbl_username.setText(QtCore.QString().fromUtf8(self.user_info['uid']))
			self.led_firstname.setText(QtCore.QString().fromUtf8(self.user_info['givenName']))
			self.led_lastname.setText(QtCore.QString().fromUtf8(self.user_info['sn']))
			gid_number = int(self.user_info['gidNumber'])
			self.cmb_primary_group.clear()
			for groupname,details in proxy.list_groups(groupdef.grouptype_as_id('primary')).items():
				self.cmb_primary_group.addItem(
					QtCore.QString().fromUtf8(details['displayedName']),
					QtCore.QVariant(details['gidNumber']))
			self.cmb_primary_group.setCurrentIndex(self.cmb_primary_group.findData(QtCore.QVariant(self.user_info['gidNumber'])))
			
		self.updateGroupsView()
コード例 #4
0
	def setupNamePage(self):
		self.connect(self.led_given_name,QtCore.SIGNAL("textChanged(const QString&)"),self.updateNamePage)
		self.connect(self.led_family_name,QtCore.SIGNAL("textChanged(const QString&)"),self.updateNamePage)
		self.connect(self.cmb_usertype,QtCore.SIGNAL("activated(int)"),self.updateNamePage)
		
		self.tr("teacher")
		self.tr("student")
		self.tr("parent")
		self.tr("other")
		usertypeids = userdef.list_usertypes_by_id()
		#self.cmb_usertype.addItem(self.tr("Select user type..."),QtCore.QVariant(-1))
		
		for i in usertypeids:
			self.cmb_usertype.addItem(
				self.tr(userdef.usertype_as_text(i)),
				QtCore.QVariant(i))
		self.cmb_usertype.setCurrentIndex(-1)
		
		self.sbx_first_school_year.setValue(QtCore.QDate.currentDate().year())
コード例 #5
0
	def _addUser(self,uidnumber,uid,cn,usertype_id):
		if self.users.has_key(int(uidnumber)):
			return
		self.insertRow(self.rowCount())
		
		idx = self.index(self.rowCount()-1,self.columninfo['cn']['columnindex'])
		
		self.setData(idx,QtCore.QVariant(self.icons[usertype_id]),QtCore.Qt.DecorationRole)
		self.setData(idx,QtCore.QVariant(QtCore.QString.fromUtf8(cn)))
		idx = self.index(self.rowCount()-1,self.columninfo['uid']['columnindex'])
		self.setData(idx,QtCore.QVariant(QtCore.QString.fromUtf8(uid)))
		idx = self.index(self.rowCount()-1,self.columninfo['uidnumber']['columnindex'])
		self.setData(idx,QtCore.QVariant(uidnumber))
		idx = self.index(self.rowCount()-1,self.columninfo['usertype']['columnindex'])
		self.setData(idx,QtCore.QVariant(self.tr(userdef.usertype_as_text(usertype_id),"singular")))
		
		idx = self.index(self.rowCount()-1,0)
		self.setData(idx,QtCore.QVariant(uidnumber),QtCore.Qt.UserRole)
		
		self.users[int(uidnumber)] = {
			'uidnumber':uidnumber,
			'uid':uid,
			'cn':cn,
			'usertype_id':usertype_id}
コード例 #6
0
	def createuser(self,uid,givenname,familyname,passwd,usertype,primarygid=1000,firstyear=None):
		"""
		Add a user to the schools authentication directory service.
		The usertype must be one of the constants TEACHER,STUDENT,PARENT or OTHER
		"""
		# check if the group exists already
		if self.user_exists(uid):
			return -10001
		
		title = userdef.usertype_as_text(usertype)
		if not title:
			return -10005	# invalid usertype id
		usertype_ou = ldapdef.ou_confkey_by_usertype(usertype)
		objectclass = ldapdef.objectclass_by_usertype(usertype)
		if not objectclass:
			return -10006	# Object classes have not been defined for this usertype
			
		path = "uid=%s,%s" % (uid,ldapdef.basedn_by_usertype(usertype))
		
		# Check the group for existance
		import groupmanager as gman
		gm = gman.GroupManager()
		gl = gm.list_groups(None)
		glgid = {}
		for groupname in gl.keys():
			glgid[int(gl[groupname]['gidNumber'])]=groupname
		if not glgid.has_key(primarygid):
			return -10004
		
		
		#uidnumber = self.max(conf.get('LDAPSERVER','basedn'),
		#		'objectclass=posixaccount','uidNumber',
		#		int(conf.get('DOMAIN','uid_start')))+1
		
		uidnumber = None
		uidnumbers = []
		for pw in pwd.getpwall():
			if int(pw[2]) >= int(conf.get('DOMAIN','uid_start')):
				uidnumbers += [int(pw[2])]
		uidnumbers.sort()
		expect_uidnumber = int(conf.get('DOMAIN','uid_start'))
		for i in range(100000):
			if expect_uidnumber != uidnumbers[i]:
				uidnumber = expect_uidnumber
				break
			expect_uidnumber += 1
		
		if uidnumber == None:
			return -10007 # failed to pick an uidnumber
		
		cn = '%s %s' % (givenname,familyname)

		user_info = {'uid':uid,
			'givenname':'%s' % givenname,
			'cn':cn,
			'gidNumber': str(primarygid),
			'uidnumber': str(uidnumber),
			'homeDirectory':'%s/%s/users/%s/.linux' % (conf.get('DOMAIN','domain_root'),conf.get('DOMAIN','domain_name'),uid),
			'sn':'%s' % familyname,
			'objectclass':objectclass,
			'mail': uid,
			'title':title,
			'loginShell': '/bin/zsh',
			'userPassword':mkpasswd(passwd,3,'ssha')}
		if userdef.usertype_as_id(usertype) == userdef.usertype_as_id('student') and firstyear != None:
			user_info['firstSchoolYear'] = str(firstyear)
			
		
		self.bind(conf.get('LDAPSERVER','admin'),conf.get('LDAPSERVER','passwd'))
		self.touch_by_dict({path:user_info})
		
		try:
			posix_uid = pwd.getpwnam(uid)[2]
		except Exception, e:
			print e
			return -10002