View | Details | Raw Unified | Return to bug 40210
Collapse All | Expand All

(-)a/ucs-school-4.1/ucs-school-umc-computerroom/debian/ucs-school-umc-computerroom.univention-config-registry-variables (+12 lines)
 Lines 9-11   Description[de]=UMC-Computerraum-Administration: auf "yes" setzen, um UltraVNC-S Link Here 
9
Description[en]=UMC-Computerroom-Administration: set "yes" to activate UltraVNC shortcut (Default: false)
9
Description[en]=UMC-Computerroom-Administration: set "yes" to activate UltraVNC shortcut (Default: false)
10
Type=str
10
Type=str
11
Categories=management-umc
11
Categories=management-umc
12
13
[ucsschool/umc/computerroom/hide_screenshots/groups]
14
Description[de]=Kommaseparierte Liste mit Gruppennamen, für deren Mitglieder keine Screenshots im Computerraum-Modul angezeigt werden sollen (Standard: Domain Admins)
15
Description[en]=Comma separated list of group names, for whose group members no screenshots are shown in computer room module (Default: Domain Admins)
16
Type=str
17
Categories=management-umc
18
19
[ucsschool/umc/computerroom/hide_screenshots/teachers]
20
Description[de]=Der Wert "true" verhindert die Anzeige von Screenshots von Lehrer-Rechnern im Computerraum-Modul (Standard: false)
21
Description[en]=By setting this variable to "true", screenshots of teacher's computers are not shown in computer room module (Default: false)
22
Type=bool
23
Categories=management-umc
(-)a/ucs-school-4.1/ucs-school-umc-computerroom/umc/python/computerroom/__init__.py (-9 / +20 lines)
 Lines 81-87   from notifier.nf_qt import _exit Link Here 
81
_ = Translation('ucs-school-umc-computerroom').translate
81
_ = Translation('ucs-school-umc-computerroom').translate
82
82
83
ROOMDIR = '/var/cache/ucs-school-umc-computerroom'
83
ROOMDIR = '/var/cache/ucs-school-umc-computerroom'
84
84
FN_SCREENSHOT_DENIED = '/usr/share/ucs-school-umc-computerroom/screenshot_denied.jpg'
85
FN_SCREENSHOT_NOTREADY = '/usr/share/ucs-school-umc-computerroom/screenshot_notready.jpg'
85
86
86
def _getRoomFile(roomDN):
87
def _getRoomFile(roomDN):
87
	if roomDN.startswith('cn='):
88
	if roomDN.startswith('cn='):
 Lines 545-561   class Instance(SchoolBaseModule): Link Here 
545
		"""
546
		"""
546
547
547
		tmpfile = computer.screenshot
548
		tmpfile = computer.screenshot
548
		if tmpfile is None:
549
		if computer.hide_screenshot:
549
			# vnc has not (yet) received any screenshots from the computer
550
			filename = FN_SCREENSHOT_DENIED
550
			# dont worry, try again later
551
		elif tmpfile is None:
551
			self.finished(request.id, None)
552
			filename = FN_SCREENSHOT_NOTREADY
552
			return
553
		else:
554
			filename = tmpfile.name
555
553
		response = Response(mime_type = MIMETYPE_JPEG)
556
		response = Response(mime_type = MIMETYPE_JPEG)
554
		response.id = request.id
557
		response.id = request.id
555
		response.command = 'COMMAND'
558
		response.command = 'COMMAND'
556
		with open(tmpfile.name, 'rb') as fd:
559
		MODULE.info('screenshot(%s): hide screenshot = %r' % (computer.name, computer.hide_screenshot))
557
			response.body = fd.read()
560
		try:
558
		os.unlink(tmpfile.name)
561
			with open(filename, 'rb') as fd:
562
				response.body = fd.read()
563
		except (IOError, OSError) as ex:
564
			MODULE.error('Unable to load screenshot file %r: %s' % (filename, ex))
565
		try:
566
			if tmpfile:
567
				os.unlink(tmpfile.name)
568
		except (IOError, OSError) as ex:
569
			MODULE.error('Unable to remove temporary screenshot file %r: %s' % (tmpfile.name, ex))
559
		self.finished(request.id, response)
570
		self.finished(request.id, response)
560
571
561
	@check_room_access
572
	@check_room_access
(-)a/ucs-school-4.1/ucs-school-umc-computerroom/umc/python/computerroom/italc2.py (-5 / +22 lines)
 Lines 115-127   class UserMap( dict ): Link Here 
115
			MODULE.info( 'Unknown user "%s"' % username )
115
			MODULE.info( 'Unknown user "%s"' % username )
116
			dict.__setitem__( self, userstr, UserInfo( '', '' ) )
116
			dict.__setitem__( self, userstr, UserInfo( '', '' ) )
117
		else:
117
		else:
118
			result[0].open()
118
			userobj = UserInfo( result[ 0 ].dn, username )
119
			userobj = UserInfo( result[ 0 ].dn, username )
119
			for grp in result[ 0 ][ 'groups' ]:
120
				if grp.endswith( search_base.workgroups ):
121
					userobj.workgroups.append( udm_uldap.explodeDn( grp, True )[ 0 ] )
122
				elif grp.endswith( search_base.classes ):
123
					userobj.school_class = udm_uldap.explodeDn( grp, True )[ 0 ]
124
			userobj.isTeacher = search_base.isTeacher( userobj.dn )
120
			userobj.isTeacher = search_base.isTeacher( userobj.dn )
121
122
			blacklisted_groups = set([x.strip().lower() for x in ucr.get('ucsschool/umc/computerroom/hide_screenshots/groups', 'Domain Admins').split(',')])
123
			users_groupmemberships = set([udm_uldap.explodeDn(x, True)[0].lower() for x in result[0]['groups']])
124
			MODULE.info('UserMap: %s: hide screenshots for following groups: %s' % (username, blacklisted_groups,))
125
			MODULE.info('UserMap: %s: user is member of following groups: %s' % (username, users_groupmemberships,))
126
			userobj.hide_screenshot = bool(blacklisted_groups & users_groupmemberships)
127
128
			if ucr.is_true('ucsschool/umc/computerroom/hide_screenshots/teachers', False) and userobj.isTeacher:
129
				MODULE.info('UserMap: %s: is teacher hiding screenshot' % (username,))
130
				userobj.hide_screenshot = True
131
132
			MODULE.info('UserMap: %s: hide_screenshot=%r' % (username, userobj.hide_screenshot))
133
125
			dict.__setitem__( self, userstr, userobj )
134
			dict.__setitem__( self, userstr, userobj )
126
135
127
_usermap = UserMap()
136
_usermap = UserMap()
 Lines 383-388   class ITALC_Computer( notifier.signals.Provider, QObject ): Link Here 
383
		return (self._computer.info.get('mac') or [''])[ 0 ]
392
		return (self._computer.info.get('mac') or [''])[ 0 ]
384
393
385
	@property
394
	@property
395
	def hide_screenshot(self):
396
		global _usermap
397
		try:
398
			return _usermap[str(self._username.current)].hide_screenshot
399
		except AttributeError:
400
			return False
401
402
	@property
386
	def isTeacher( self ):
403
	def isTeacher( self ):
387
		global _usermap
404
		global _usermap
388
		try:
405
		try:

Return to bug 40210