def files(self, **kwargs): user, role, defaultExpiration, uploadRequests, userFiles, userShareableAttributes, attributeFilesDict, sharedFiles = ( cherrypy.session.get("user"), cherrypy.session.get("current_role"), None, [], [], [], {}, []) config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) maxDays = int( session.query(ConfigParameter).filter( ConfigParameter.name == 'max_file_life_days').one().value) geoTagging = get_config_dict_from_objects([ session.query(ConfigParameter).filter( ConfigParameter.name == 'geotagging').one() ])['geotagging'] adminEmail = session.query(ConfigParameter).filter( ConfigParameter.name == 'admin_email').one().value defaultExpiration = datetime.date.today() + (datetime.timedelta( days=maxDays)) userFiles = self.file.get_user_file_list(format="list") if role is None: uploadRequests = session.query(UploadRequest).filter( UploadRequest.owner_id == user.id).all() userShareableAttributes = AccountService.get_shareable_attributes_by_user( user) attributeFilesDict = ShareService.get_files_shared_with_user_by_attribute( user) sharedFiles = ShareService.get_files_shared_with_user(user) else: userShareableAttributes = AccountService.get_shareable_attributes_by_role( role) tpl = Template(file=get_template_file('files.tmpl'), searchList=[locals(), globals()]) return str(tpl)
def admin_console(self, **kwargs): user, config = cherrypy.session.get("user"), cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) templateFiles = os.listdir(os.path.join(config['root_path'], "view")) configParameters = session.query(ConfigParameter).order_by(ConfigParameter.name).all() flUsers = session.query(User).slice(0,50) flRoles = session.query(Role) totalFileCount = session.query(func.count(File.id)).scalar() totalUserCount = session.query(func.count(User.id)).scalar() totalMessageCount = session.query(func.count(Message.id)).scalar() currentUsersList = [] currentUploads = len(cherrypy.file_uploads) logsFile = open(cherrypy.config["log.error_file"],"a+") logs = tail(logsFile, 50) attributes = AccountService.get_shareable_attributes_by_user(user) currentUserIds = [] sessionCache = {} sessionCache = cherrypy.session.cache for key in sessionCache.keys(): try: if sessionCache[key][0].has_key('user') and sessionCache[key][0]['user'] is not None and sessionCache[key][0]['user'].id not in currentUserIds: currentUser = sessionCache[key][0]['user'] currentUsersList.append(currentUser) currentUserIds.append(currentUser.id) except Exception, e: cherrypy.log.error("[%s] [admin] [Unable to read user session: %s]" % (user.id, str(e)))
def admin_console(self, **kwargs): user, config = cherrypy.session.get( "user"), cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) templateFiles = os.listdir(os.path.join(config['root_path'], "view")) configParameters = session.query(ConfigParameter).order_by( ConfigParameter.name).all() flUsers = session.query(User).slice(0, 50) flRoles = session.query(Role) totalFileCount = session.query(func.count(File.id)).scalar() totalUserCount = session.query(func.count(User.id)).scalar() totalMessageCount = session.query(func.count(Message.id)).scalar() currentUsersList = [] currentUploads = len(cherrypy.file_uploads) logsFile = open(cherrypy.config["log.error_file"]) logs = tail(logsFile, 50) attributes = AccountService.get_shareable_attributes_by_user(user) currentUserIds = [] sessionCache = {} sessionCache = cherrypy.session.cache for key in sessionCache.keys(): try: if sessionCache[key][0].has_key('user') and sessionCache[key][ 0]['user'] is not None and sessionCache[key][0][ 'user'].id not in currentUserIds: currentUser = sessionCache[key][0]['user'] currentUsersList.append(currentUser) currentUserIds.append(currentUser.id) except Exception, e: cherrypy.log.error( "[%s] [admin] [Unable to read user session: %s]" % (user.id, str(e)))
def delete_attribute_shares(self, fileIds, attributeId, format="json", **kwargs): user, sMessages, fMessages = (cherrypy.session.get("user"), [], []) try: userShareableAttributes, permission = AccountService.get_shareable_attributes_by_user( user), False for attribute in userShareableAttributes: if attributeId == attribute.id: permission = True break if permission: fileIdList = split_list_sanitized(fileIds) for fileId in fileIdList: share = session.query(AttributeShare).filter( AttributeShare.attribute_id == attributeId and AttributeShare.fileId == fileId).one() session.delete(share) sMessages.append( "Successfully unshared file(s) with users having the %s attribute" % attributeId) else: fMessages.append( "You do not have permission to delete attribute shares for this attribute" ) except Exception, e: fMessages.append(str(e))
def create_attribute_shares(self, fileIds, attributeId, format="json", **kwargs): user, sMessages, fMessages = (cherrypy.session.get("user"), [], []) try: userShareableAttributes, permission = AccountService.get_shareable_attributes_by_user( user), False for attribute in userShareableAttributes: if attributeId == attribute.id: permission = True break if permission: fileIds = split_list_sanitized(fileIds) for fileId in fileIds: session.add( AttributeShare(file_id=fileId, attribute_id=attributeId)) sMessages.append( "Successfully shared file(s) with users having the %s attribute" % attributeId) else: fMessages.append( "You do not have permission to share with this attribute") except Exception, e: fMessages.append(str(e))
def get_search_widget(self, context, **kwargs): user, sMessages, fMessages = (cherrypy.session.get("user"), [], []) orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) groups = session.query(User).filter(User.id==user.id).one().groups directoryType = session.query(ConfigParameter).filter(ConfigParameter.name=="directory_type").one().value userShareableAttributes = AccountService.get_shareable_attributes_by_user(user) tpl = Template(file=get_template_file('search_widget.tmpl'), searchList=[locals(),globals()]) return str(tpl)
def files(self, **kwargs): user, role, defaultExpiration, uploadRequests, userFiles, userShareableAttributes,attributeFilesDict,sharedFiles = (cherrypy.session.get("user"), cherrypy.session.get("current_role"), None, [], [], [], {}, []) config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) maxDays = int(session.query(ConfigParameter).filter(ConfigParameter.name=='max_file_life_days').one().value) geoTagging = get_config_dict_from_objects([session.query(ConfigParameter).filter(ConfigParameter.name=='geotagging').one()])['geotagging'] adminEmail = session.query(ConfigParameter).filter(ConfigParameter.name=='admin_email').one().value defaultExpiration = datetime.date.today() + (datetime.timedelta(days=maxDays)) userFiles = self.file.get_user_file_list(format="list") if role is None: uploadRequests = session.query(UploadRequest).filter(UploadRequest.owner_id==user.id).all() userShareableAttributes = AccountService.get_shareable_attributes_by_user(user) attributeFilesDict = ShareService.get_files_shared_with_user_by_attribute(user) sharedFiles = ShareService.get_files_shared_with_user(user) else: userShareableAttributes = AccountService.get_shareable_attributes_by_role(role) tpl = Template(file=get_template_file('files.tmpl'), searchList=[locals(),globals()]) return str(tpl)
def create_attribute_shares(self, fileIds, attributeId, format="json", requestOrigin="", **kwargs): user, sMessages, fMessages = (cherrypy.session.get("user"), [], []) if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: try: userShareableAttributes, permission = AccountService.get_shareable_attributes_by_user(user), False for attribute in userShareableAttributes: if attributeId == attribute.id: permission = True break if permission: fileIds = split_list_sanitized(fileIds) for fileId in fileIds: session.add(AttributeShare(file_id=fileId, attribute_id=attributeId)) sMessages.append("Successfully shared file(s) with users having the %s attribute" % attributeId ) else: fMessages.append("You do not have permission to share with this attribute") except Exception, e: fMessages.append(str(e))
def get_user_file_list(self, fileIdList=None, format="json", **kwargs): """Get File List""" config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) user, role, sMessages, fMessages = ( cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], []) myFilesList = [] hiddenShares = session.query(HiddenShare).filter( HiddenShare.owner_id == user.id).all() hiddenShareIds = [] for hiddenShare in hiddenShares: hiddenShareIds.append(hiddenShare.file_id) if fileIdList is None: allFilesList = session.query(File).filter( File.owner_id == user.id).all() if role is None else session.query(File).filter( File.role_owner_id == role.id).all() for flFile in allFilesList: if flFile.id not in hiddenShareIds: myFilesList.append(flFile) else: fileIdList = split_list_sanitized(fileIdList) for fileId in fileIdList: flFile = session.query(File).filter(File.id == fileId).one() if (role is not None and flFile.role_owner_id == role.id) or ( flFile.owner_id == user.id or flFile.shared_with(user) ) and flFile.id not in hiddenShareIds: myFilesList.append(flFile) for flFile in myFilesList: #attachments to the file objects for this function, purely cosmetic if (len(flFile.public_shares) > 0) and (len( flFile.user_shares) > 0 or len(flFile.group_shares) > 0): flFile.documentType = "document_both" elif len(flFile.public_shares) > 0: flFile.documentType = "document_globe" elif len(flFile.public_shares) == 0 and (len( flFile.user_shares) > 0 or len(flFile.group_shares) > 0): flFile.documentType = "document_person" else: flFile.documentType = "document" #TODO: Account for attribute shares here 'document_attribute' if format == "json" or format == "searchbox_html" or format == "cli": myFilesJSON = [] userShareableAttributes = AccountService.get_shareable_attributes_by_user( user ) if role is None else AccountService.get_shareable_attributes_by_role( role) for flFile in myFilesList: flFile.fileUserShares, flFile.fileGroupShares, flFile.availableGroups, sharedGroupsList, flFile.fileAttributeShares = ( [], [], [], [], []) for share in flFile.user_shares: flFile.fileUserShares.append({ 'id': share.user.id, 'name': share.user.display_name }) sharedGroupIds = [] for share in flFile.group_shares: sharedGroupIds.append(share.group.id) flFile.fileGroupShares.append({ 'id': share.group.id, 'name': share.group.name }) for share in flFile.attribute_shares: flFile.fileAttributeShares.append({ 'id': share.attribute.id, 'name': share.attribute.name }) for group in session.query(Group).filter( Group.owner_id == user.id): if group.id not in sharedGroupIds: flFile.availableGroups.append({ 'id': group.id, 'name': group.name }) myFilesJSON.append({ 'fileName': flFile.name, 'fileId': flFile.id, 'fileOwnerId': flFile.owner_id, 'fileSizeBytes': flFile.size, 'fileUploadedDatetime': flFile.date_uploaded.strftime("%m/%d/%Y"), 'fileExpirationDatetime': flFile.date_expires.strftime("%m/%d/%Y") if flFile.date_expires is not None else "Never", 'filePassedAvScan': flFile.passed_avscan, 'documentType': flFile.documentType, 'fileUserShares': flFile.fileUserShares, 'fileGroupShares': flFile.fileGroupShares, 'availableGroups': flFile.availableGroups, 'fileAttributeShares': flFile.fileAttributeShares }) if format == "json": return fl_response(sMessages, fMessages, format, data=myFilesJSON) elif format == "searchbox_html": selectedFileIds = ",".join(fileIdList) context = "private_sharing" groups = session.query(Group).filter( Group.owner_id == user.id).all() directoryType = session.query(ConfigParameter).filter( ConfigParameter.name == "directory_type").one().value searchWidget = str( Template(file=get_template_file('search_widget.tmpl'), searchList=[locals(), globals()])) tpl = Template(file=get_template_file('share_files.tmpl'), searchList=[locals(), globals()]) return str(tpl) elif format == "cli": myFilesJSON = sorted(myFilesJSON, key=lambda k: k['fileId']) myFilesXML = "" for myFile in myFilesJSON: myFilesXML += "<file id='%s' name='%s' size='%s' passedAvScan='%s'></file>" % ( myFile['fileId'], myFile['fileName'], myFile['fileSizeBytes'], myFile['filePassedAvScan']) return fl_response(sMessages, fMessages, format, data=myFilesXML) elif format == "list": return myFilesList else: return str(myFilesList)
def get_user_file_list(self, fileIdList=None, format="json", **kwargs): """Get File List""" config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) user, role, sMessages, fMessages = (cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], []) myFilesList = [] hiddenShares = session.query(HiddenShare).filter(HiddenShare.owner_id==user.id).all() hiddenShareIds = [] for hiddenShare in hiddenShares: hiddenShareIds.append(hiddenShare.file_id) if fileIdList is None: allFilesList = session.query(File).filter(File.owner_id == user.id).all() if role is None else session.query(File).filter(File.role_owner_id==role.id).all() for flFile in allFilesList: if flFile.id not in hiddenShareIds: myFilesList.append(flFile) else: fileIdList = split_list_sanitized(fileIdList) for fileId in fileIdList: flFile = session.query(File).filter(File.id==fileId).one() if (role is not None and flFile.role_owner_id == role.id) or (flFile.owner_id == user.id or flFile.shared_with(user)) and flFile.id not in hiddenShareIds: myFilesList.append(flFile) for flFile in myFilesList: #attachments to the file objects for this function, purely cosmetic if (len(flFile.public_shares) > 0) and (len(flFile.user_shares) > 0 or len(flFile.group_shares) > 0 ): flFile.documentType = "document_both" elif len(flFile.public_shares) > 0: flFile.documentType = "document_globe" elif len(flFile.public_shares) == 0 and (len(flFile.user_shares) > 0 or len(flFile.group_shares) > 0): flFile.documentType = "document_person" else: flFile.documentType = "document" #TODO: Account for attribute shares here 'document_attribute' if format=="json" or format=="searchbox_html" or format=="cli": myFilesJSON = [] userShareableAttributes = AccountService.get_shareable_attributes_by_user(user) if role is None else AccountService.get_shareable_attributes_by_role(role) for flFile in myFilesList: flFile.fileUserShares, flFile.fileGroupShares, flFile.availableGroups, sharedGroupsList, flFile.fileAttributeShares = ([],[],[],[],[]) for share in flFile.user_shares: flFile.fileUserShares.append({'id': share.user.id, 'name': share.user.display_name}) sharedGroupIds = [] for share in flFile.group_shares: sharedGroupIds.append(share.group.id) flFile.fileGroupShares.append({'id': share.group.id, 'name': share.group.name}) for share in flFile.attribute_shares: flFile.fileAttributeShares.append({'id': share.attribute.id, 'name': share.attribute.name}) for group in session.query(Group).filter(Group.owner_id==user.id): if group.id not in sharedGroupIds: flFile.availableGroups.append({'id': group.id, 'name': group.name}) myFilesJSON.append({'fileName': flFile.name, 'fileId': flFile.id, 'fileOwnerId': flFile.owner_id, 'fileSizeBytes': flFile.size, 'fileUploadedDatetime': flFile.date_uploaded.strftime("%m/%d/%Y"), 'fileExpirationDatetime': flFile.date_expires.strftime("%m/%d/%Y") if flFile.date_expires is not None else "Never", 'filePassedAvScan':flFile.passed_avscan, 'documentType': flFile.documentType, 'fileUserShares': flFile.fileUserShares, 'fileGroupShares': flFile.fileGroupShares, 'availableGroups': flFile.availableGroups, 'fileAttributeShares': flFile.fileAttributeShares}) if format=="json": return fl_response(sMessages, fMessages, format, data=myFilesJSON) elif format=="searchbox_html": selectedFileIds = ",".join(fileIdList) context = "private_sharing" groups = session.query(Group).filter(Group.owner_id == user.id).all() directoryType = session.query(ConfigParameter).filter(ConfigParameter.name=="directory_type").one().value searchWidget = str(Template(file=get_template_file('search_widget.tmpl'), searchList=[locals(),globals()])) tpl = Template(file=get_template_file('share_files.tmpl'), searchList=[locals(),globals()]) return str(tpl) elif format=="cli": myFilesJSON = sorted(myFilesJSON, key=lambda k: k['fileId']) myFilesXML = "" for myFile in myFilesJSON: myFilesXML += "<file id='%s' name='%s' size='%s' passedAvScan='%s'></file>" % (myFile['fileId'], myFile['fileName'], myFile['fileSizeBytes'], myFile['filePassedAvScan']) return fl_response(sMessages, fMessages, format, data=myFilesXML) elif format=="list": return myFilesList else: return str(myFilesList)