def create_group_shares(self, fileIds, groupId, notify="false", cc="false", format="json", requestOrigin=""): user, role, sMessages, fMessages, config = (cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], [], cherrypy.request.app.config['filelocker']) if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) fileIds = split_list_sanitized(fileIds) groupId = strip_tags(groupId) if groupId is not None and groupId != "" else None notify = True if notify.lower() == "true" else False cc = True if cc.lower() == "true" else False try: if groupId is not None: sharedFiles = [] group = session.query(Group).filter(Group.id==groupId).one() if (role is not None and group.role_owner_id == role.id) or group.owner_id == user.id or AccountService.user_has_permission(user, "admin"): for fileId in fileIds: flFile = session.query(File).filter(File.id == fileId).one() existingShare = session.query(GroupShare).filter(and_(GroupShare.group_id==group.id, GroupShare.file_id==fileId)).scalar() if existingShare is not None: fMessages.append("File %s is already shared with group %s" % (flFile.name, group.name)) elif (role is not None and flFile.role_owner_id == role.id) or flFile.owner_id == user.id or AccountService.user_has_permission(user, "admin"): flFile.group_shares.append(GroupShare(group_id=groupId, file_id=fileId)) sharedFiles.append(flFile) else: fMessages.append("You do not have permission to share file with ID: %s" % fileId) sMessages.append("Shared file(s) successfully") if role is not None: session.add(AuditLog(user.id, Actions.CREATE_GROUP_SHARE, "Role %s shared %s files with group %s(%s)" % (role.id, len(fileIds), group.name, group.id), None, role.id)) else: session.add(AuditLog(user.id, Actions.CREATE_GROUP_SHARE, "%s shared %s files with group %s(%s)" % (user.id, len(fileIds), group.name, group.id), None)) else: fMessages.append("You do not have permission to share with this group") session.commit() if notify: cherrypy.session.release_lock() for groupMember in group.members: try: Mail.notify(get_template_file('share_notification.tmpl'),{'sender':user.email if role is None else role.email,'recipient':groupMember.email, 'ownerId':user.id if role is None else role.id, 'ownerName':user.display_name if role is None else role.name, 'sharedFiles':sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) session.add(AuditLog(user.id, Actions.SEND_EMAIL, "%s has been notified via email that you have shared a file with him or her." % (groupMember.email), None, role.id if role is not None else None)) session.commit() except Exception, e: session.rollback() fMessages.append("Problem sending email notification to %s: %s" % (groupMember.display_name, str(e))) if cc: if (user.email is not None and user.email != ""): try: Mail.notify(get_template_file('share_notification.tmpl'),{'sender':user.email if role is None else role.email,'recipient':user.email if role is None else role.email, 'ownerId':user.id if role is None else role.id, 'ownerName':user.display_name if role is None else role.name, 'sharedFiles':sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) session.add(AuditLog(user.id, Actions.SEND_EMAIL, "You have been carbon copied via email on the notification that was sent out as a result of your file share.")) session.commit() except Exception, e: session.rollback() fMessages.append("Problem carbon copying email notification: %s" % (str(e))) else: fMessages.append("You elected to receive a carbon copy of the share notification, however your account does not have an email address set.")
def create_user_shares(self, fileIds, userId=None, notify="no", cc="false", format="json", requestOrigin="", **kwargs): 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"), [], []) if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: fileIds = split_list_sanitized(fileIds) userId = strip_tags(userId) if userId is not None and userId != "" else None notify = True if notify.lower() == "true" else False cc = True if cc.lower() == "true" else False sharedFiles, recipients = [], [] try: if userId is not None: shareUser = AccountService.get_user(userId) if (shareUser.email is not None and shareUser.email != ""): recipients.append(shareUser) for fileId in fileIds: 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 AccountService.user_has_permission(user, "admin"): existingShare = session.query(UserShare).filter(and_(UserShare.file_id==fileId, UserShare.user_id==userId)).scalar() if existingShare is None: flFile.user_shares.append(UserShare(user_id=userId, file_id=fileId)) session.commit() sharedFiles.append(flFile) if role is not None: session.add(AuditLog(user.id, Actions.CREATE_USER_SHARE, "Role %s shared file %s(%s) with %s" % (role.id, flFile.name, flFile.id, shareUser.id), shareUser.id, role.id)) else: session.add(AuditLog(user.id, "Create User Share", "%s shared file %s(%s) with %s" % (user.id, flFile.name, flFile.id, shareUser.id), shareUser.id)) session.commit() else: fMessages.append("You do not have permission to share file with ID: %s" % str(flFile.id)) if notify: cherrypy.session.release_lock() if cc: if (user is not None and user != ""): recipients.append(user) else: fMessages.append("You elected to receive a carbon copy of the share notification, however your account does not have an email address set.") for recipient in recipients: try: Mail.notify(get_template_file('share_notification.tmpl'),{'sender':user.email if role is None else role.email,'recipient':recipient.email, 'ownerId':user.id if role is None else role.id, 'ownerName':user.display_name if role is None else role.name, 'sharedFiles':sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'], 'personalMessage': ""}) session.add(AuditLog(user.id, Actions.SEND_EMAIL, "%s(%s) has been notified via email that you have shared a file with him or her." % (recipient.display_name, recipient.id), None, role.id if role is not None else None)) except Exception, e: session.rollback() fMessages.append("Problem sending email notification to %s: %s" % (recipient.display_name, str(e))) session.commit() sMessages.append("Shared file(s) successfully") else: fMessages.append("You did not specify a user to share the file with")
def create_upload_request(self, password, expiration, requestType, maxFileSize=None, cc="false", notifyUser="******", emailAddresses=None, personalMessage=None, format="json", requestOrigin="", **kwargs): user, config, uploadURL, sMessages, fMessages = cherrypy.session.get("user"),cherrypy.request.app.config['filelocker'],"", [], [] if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: try: expiration = parse_date(expiration, datetime.datetime.now()) except Exception, e: fMessages.append(str(e)) try: cc = True if cc.lower() == "true" else False notifyUser = True if notifyUser.lower() == "true" else False print "DEBUG: notifyUser = "******"" or maxFileSize=="0" or maxFileSize == 0) else None if maxFileSize is not None and maxFileSize < 0: fMessages.append("Max file size must be a positive number") password = None if password == "" else password emailAddresses = split_list_sanitized(emailAddresses.replace(";", ",")) if (emailAddresses is not None and emailAddresses != "") else [] personalMessage = strip_tags(personalMessage) requestType = "multi" if requestType.lower() == "multi" else "single" uploadRequest = UploadRequest(date_expires=expiration, max_file_size=maxFileSize, notify_user=notifyUser, type=requestType, owner_id=user.id) if password is not None: uploadRequest.set_password(password) if requestType == "multi" and password is None: fMessages.append("You must specify a password for upload requests that allow more than 1 file to be uploaded") else: uploadRequest.generate_id() session.add(uploadRequest) if cc: emailAddresses.append(user.email) orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) for recipient in emailAddresses: Mail.notify(get_template_file('upload_request_notification.tmpl'),\ {'sender': user.email, 'recipient': recipient, 'ownerId': user.id, \ 'ownerName': user.display_name, 'requestId': uploadRequest.id, 'requestType': uploadRequest.type,\ 'personalMessage': personalMessage, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) session.add(AuditLog(user.id, Actions.CREATE_UPLOAD_REQUEST, "You created an upload request. As a result, the following email addresses were sent a file upload link: %s" % ",".join(emailAddresses), None)) session.commit() uploadURL = config['root_url']+"/public_upload?ticketId=%s" % str(uploadRequest.id) sMessages.append("Successfully created upload request") except Exception, e: fMessages.append(str(e))
def file_download_complete(user, fileId, publicShareId=None): config = cherrypy.request.app.config['filelocker'] try: role = None if cherrypy.session.has_key("current_role"): role = cherrypy.session.get("current_role") flFile = session.query(File).filter(File.id==fileId).one() if ((role is not None and flFile.role_owner_id != role.id) or user is None or user.id != flFile.owner_id) and flFile.notify_on_download and publicShareId is None: ownerName = "Unknown" try: owner = None if role is not None: owner = session.query(User).filter(User.id==flFile.role_owner_id).one() else: owner = session.query(User).filter(User.id==flFile.owner_id).one() ownerName = owner.id if owner.email is not None and owner.email != "": orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) Mail.notify(get_template_file('download_notification.tmpl'),{'sender': None, 'recipient': owner.email, 'fileName': flFile.name, 'downloadUserId': user.id, 'downloadUserName': user.display_name, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) except Exception, e: cherrypy.log.error("[%s] [file_download_complete] [Unable to notify user %s of download completion: %s]" % (user.id, ownerName, str(e))) if publicShareId is not None: publicShare = session.query(PublicShare).filter(PublicShare.id == publicShareId).one() session.add(AuditLog(flFile.owner_id, "Download File", "File %s downloaded via Public Share. " % str(flFile.name), None, flFile.role_owner_id, flFile.id)) if flFile.notify_on_download: try: owner = None if role is not None: owner = session.query(User).filter(User.id==flFile.role_owner_id).one() else: owner = session.query(User).filter(User.id==flFile.owner_id).one() if owner.email is not None and owner.email != "": orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) Mail.notify(get_template_file('public_download_notification.tmpl'),{'sender': None, 'recipient': owner.email, 'fileName': flFile.name, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) except Exception, e: cherrypy.log.error("[%s] [file_download_complete] [(2)Unable to notify user %s of download completion: %s]" % ("admin", owner.id, str(e))) if publicShare.reuse == "single": publicShare.files.remove(flFile) session.commit() publicShare = session.query(PublicShare).filter(PublicShare.id == publicShare.id).one() if len(publicShare.files) == 0: session.delete(publicShare) session.add(AuditLog(flFile.owner_id, "Delete Public Share", "File %s (%s) downloaded via single use public share. File is no longer publicly shared." % (flFile.name, flFile.id), None, flFile.role_owner_id, flFile.id)) session.commit()
def run(params): Mail.send( '{0} Crawl - Store starts'.format( DateTime.getReadableDate(DateTime.now())), 'Start at: {0}'.format(DateTime.now(tzinfo=msia_tz))) recordTime(key='create_schedule_start_time') Debug = DebugManager.DebugManager() Debug.start() start_crawl = fn.getNestedElement(params, 'schedule_params.start_crawl', False) check_empty = fn.getNestedElement(params, 'schedule_params.check_empty', False) Logger.v('Creating schedule:') updateDropdownOptions(params=params) crawl_params = generateCrawlParam(params) Debug.trace('Generate Crawl Params') createSchedules({'pages': crawl_params}) Debug.trace('Create Schedule') if start_crawl: Crawl.start(params) Debug.trace('crawling') recordTime(key='create_schedule_end_time') Debug.show('Run')
uploadRequest.set_password(password) if requestType == "multi" and password is None: fMessages.append( "You must specify a password for upload requests that allow more than 1 file to be uploaded" ) else: uploadRequest.generate_id() session.add(uploadRequest) if cc: emailAddresses.append(user.email) orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) for recipient in emailAddresses: Mail.notify(get_template_file('upload_request_notification.tmpl'),\ {'sender': user.email, 'recipient': recipient, 'ownerId': user.id, \ 'ownerName': user.display_name, 'requestId': uploadRequest.id, 'requestType': uploadRequest.type,\ 'personalMessage': personalMessage, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) session.add( AuditLog( user.id, Actions.CREATE_UPLOAD_REQUEST, "You created an upload request. As a result, the following email addresses were sent a file upload link: %s" % ",".join(emailAddresses), None)) session.commit() uploadURL = config[ 'root_url'] + "/public_upload?ticketId=%s" % str( uploadRequest.id) sMessages.append("Successfully created upload request") except Exception, e: fMessages.append(str(e)) return fl_response(sMessages, fMessages, format, data=uploadURL)
def create_public_share(self, fileIds, expiration, shareType, message, notifyEmails, cc="false", format="json", requestOrigin="", **kwargs): user, role, sMessages, fMessages, shareId, ps = (cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], [], None, None) if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) fileIds = split_list_sanitized(fileIds) cc = True if cc == "true" else False try: try: expiration = datetime.datetime(*(time.strptime(strip_tags(expiration), "%m/%d/%Y")[0:6])) except Exception, e: raise Exception("Invalid expiration date format. Date must be in mm/dd/yyyy format.") if expiration is None or expiration == "": raise Exception("Public shares must have a valid expiration date") message = strip_tags(message) shareType = "single" if shareType != "multi" else "multi" ps = PublicShare(date_expires=expiration, reuse=shareType, message=message) if role is not None: ps.role_owner_id = role.id else: ps.owner_id = user.id if (kwargs.has_key("password") and kwargs['password']!=""): ps.set_password(kwargs['password']) elif shareType=="multi": raise Exception("You must specify a password for public shares that don't expire after 1 use") ps.generate_share_id() session.add(ps) sharedFiles = [] for fileId in fileIds: flFile = session.query(File).filter(File.id==fileId).one() if flFile.owner_id == user.id or AccountService.user_has_permission(user, "admin"): ps.files.append(flFile) session.commit() sharedFiles.append(flFile) session.commit() else: fMessages.append("You do not have permission to share file with ID: %s" % str(flFile.id)) session.add(AuditLog(user.id, Actions.CREATE_PUBLIC_SHARE, "%s file(s) publicly shared." % len(ps.files), None, role.id if role is not None else None)) notifyEmailList = split_list_sanitized(notifyEmails) if cc: if (user.email is not None and user.email != ""): notifyEmailList.append(user.email) else: fMessages.append("You elected to receive a carbon copy of the share notification, however your account does not have an email address set.") cherrypy.session.release_lock() for recipient in notifyEmailList: if recipient is not None and recipient != "": Mail.notify(get_template_file('public_share_notification.tmpl'), {'sender':user.email if role is None else role.email, 'recipient':recipient, 'sharedFiles':sharedFiles, 'ownerId':user.id if role is None else role.id, 'ownerName': user.display_name if role is None else role.name, 'shareId':ps.id, 'filelockerURL':config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'], 'personalMessage': message}) if len(notifyEmailList) > 0: session.add(AuditLog(user.id, Actions.SEND_EMAIL, "Email notifications about a public share were sent to the following addresses: %s" % ",".join(notifyEmailList), None, role.id if role is not None else None)) session.commit() shareId = ps.id sMessages.append("Files shared successfully") except Exception, e: session.rollback() fMessages.append(str(e)) cherrypy.log.error("[%s] [create_public_share] [Unable to create public share: %s]" % (user.id, str(e)))
try: if cherrypy.file_uploads.has_key(uploadKey): for fileTransfer in cherrypy.file_uploads[uploadKey]: if fileTransfer.file_object.name == upFile.file_object.name: cherrypy.file_uploads[uploadKey].remove(fileTransfer) if len(cherrypy.file_uploads[uploadKey]) == 0: del cherrypy.file_uploads[uploadKey] except KeyError, ke: cherrypy.log.error("[%s] [upload] [Key error deleting entry in file_transfer]" % user.id) #Send out upload notification to the file owner if notify_user: try: if user.email is not None and user.email != "": orgConfig = get_config_dict_from_objects(session.query(ConfigParameter).filter(ConfigParameter.name.like('org_%')).all()) Mail.notify(get_template_file('upload_notification.tmpl'),{'sender': None, 'recipient': user.email, 'fileName': newFile.name, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) except Exception, e: cherrypy.log.error("[%s] [upload] [Unable to notify user %s of upload completion: %s]" % (user.id, user.id, str(e))) #Queue the temp file for secure erasure FileService.queue_for_deletion(tempFileName) #Return the response if format=="cli": newFileXML = "<file id='%s' name='%s'></file>" % (newFile.id, newFile.name) return fl_response(sMessages, fMessages, format, data=newFileXML) else: return fl_response(sMessages, fMessages, format) @cherrypy.expose
def create_public_share(self, fileIds, expiration, shareType, message, notifyEmails, cc="false", format="json", **kwargs): user, role, sMessages, fMessages, shareId, ps = ( cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], [], None, None) config = cherrypy.request.app.config['filelocker'] orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) fileIds = split_list_sanitized(fileIds) cc = True if cc == "true" else False try: try: expiration = datetime.datetime( *(time.strptime(strip_tags(expiration), "%m/%d/%Y")[0:6])) except Exception, e: raise Exception( "Invalid expiration date format. Date must be in mm/dd/yyyy format." ) if expiration is None or expiration == "": raise Exception( "Public shares must have a valid expiration date") message = strip_tags(message) shareType = "single" if shareType != "multi" else "multi" ps = PublicShare(date_expires=expiration, reuse=shareType, message=message) if role is not None: ps.role_owner_id = role.id else: ps.owner_id = user.id if (kwargs.has_key("password") and kwargs['password'] != ""): ps.set_password(kwargs['password']) elif shareType == "multi": raise Exception( "You must specify a password for public shares that don't expire after 1 use" ) ps.generate_share_id() session.add(ps) sharedFiles = [] for fileId in fileIds: flFile = session.query(File).filter(File.id == fileId).one() if flFile.owner_id == user.id or AccountService.user_has_permission( user, "admin"): ps.files.append(flFile) session.commit() sharedFiles.append(flFile) session.commit() else: fMessages.append( "You do not have permission to share file with ID: %s" % str(flFile.id)) session.add( AuditLog(user.id, Actions.CREATE_PUBLIC_SHARE, "%s file(s) publicly shared." % len(ps.files), None, role.id if role is not None else None)) notifyEmailList = split_list_sanitized(notifyEmails) if cc: if (user.email is not None and user.email != ""): notifyEmailList.append(user.email) else: fMessages.append( "You elected to receive a carbon copy of the share notification, however your account does not have an email address set." ) cherrypy.session.release_lock() for recipient in notifyEmailList: if recipient is not None and recipient != "": Mail.notify( get_template_file('public_share_notification.tmpl'), { 'sender': user.email if role is None else role.email, 'recipient': recipient, 'sharedFiles': sharedFiles, 'ownerId': user.id if role is None else role.id, 'ownerName': user.display_name if role is None else role.name, 'shareId': ps.id, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'], 'personalMessage': message }) if len(notifyEmailList) > 0: session.add( AuditLog( user.id, Actions.SEND_EMAIL, "Email notifications about a public share were sent to the following addresses: %s" % ",".join(notifyEmailList), None, role.id if role is not None else None)) session.commit() shareId = ps.id sMessages.append("Files shared successfully")
def create_group_shares(self, fileIds, groupId, notify="false", cc="false", format="json"): user, role, sMessages, fMessages, config = ( cherrypy.session.get("user"), cherrypy.session.get("current_role"), [], [], cherrypy.request.app.config['filelocker']) orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) fileIds = split_list_sanitized(fileIds) groupId = strip_tags( groupId) if groupId is not None and groupId != "" else None notify = True if notify.lower() == "true" else False cc = True if cc.lower() == "true" else False try: if groupId is not None: sharedFiles = [] group = session.query(Group).filter(Group.id == groupId).one() if ( role is not None and group.role_owner_id == role.id ) or group.owner_id == user.id or AccountService.user_has_permission( user, "admin"): for fileId in fileIds: flFile = session.query(File).filter( File.id == fileId).one() existingShare = session.query(GroupShare).filter( and_(GroupShare.group_id == group.id, GroupShare.file_id == fileId)).scalar() if existingShare is not None: fMessages.append( "File %s is already shared with group %s" % (flFile.name, group.name)) elif ( role is not None and flFile.role_owner_id == role.id ) or flFile.owner_id == user.id or AccountService.user_has_permission( user, "admin"): flFile.group_shares.append( GroupShare(group_id=groupId, file_id=fileId)) sharedFiles.append(flFile) else: fMessages.append( "You do not have permission to share file with ID: %s" % fileId) sMessages.append("Shared file(s) successfully") if role is not None: session.add( AuditLog( user.id, Actions.CREATE_GROUP_SHARE, "Role %s shared %s files with group %s(%s)" % (role.id, len(fileIds), group.name, group.id), None, role.id)) else: session.add( AuditLog( user.id, Actions.CREATE_GROUP_SHARE, "%s shared %s files with group %s(%s)" % (user.id, len(fileIds), group.name, group.id), None)) else: fMessages.append( "You do not have permission to share with this group") session.commit() if notify: cherrypy.session.release_lock() for groupMember in group.members: try: Mail.notify( get_template_file('share_notification.tmpl'), { 'sender': user.email if role is None else role.email, 'recipient': groupMember.email, 'ownerId': user.id if role is None else role.id, 'ownerName': user.display_name if role is None else role.name, 'sharedFiles': sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'] }) session.add( AuditLog( user.id, Actions.SEND_EMAIL, "%s has been notified via email that you have shared a file with him or her." % (groupMember.email), None, role.id if role is not None else None)) session.commit() except Exception, e: session.rollback() fMessages.append( "Problem sending email notification to %s: %s" % (groupMember.display_name, str(e))) if cc: if (user.email is not None and user.email != ""): try: Mail.notify( get_template_file( 'share_notification.tmpl'), { 'sender': user.email if role is None else role.email, 'recipient': user.email if role is None else role.email, 'ownerId': user.id if role is None else role.id, 'ownerName': user.display_name if role is None else role.name, 'sharedFiles': sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'] }) session.add( AuditLog( user.id, Actions.SEND_EMAIL, "You have been carbon copied via email on the notification that was sent out as a result of your file share." )) session.commit() except Exception, e: session.rollback() fMessages.append( "Problem carbon copying email notification: %s" % (str(e))) else: fMessages.append( "You elected to receive a carbon copy of the share notification, however your account does not have an email address set." )
def create_user_shares(self, fileIds, userId=None, notify="no", cc="false", format="json", **kwargs): 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"), [], []) fileIds = split_list_sanitized(fileIds) userId = strip_tags( userId) if userId is not None and userId != "" else None notify = True if notify.lower() == "true" else False cc = True if cc.lower() == "true" else False sharedFiles, recipients = [], [] try: if userId is not None: shareUser = AccountService.get_user(userId) if (shareUser.email is not None and shareUser.email != ""): recipients.append(shareUser) for fileId in fileIds: 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 AccountService.user_has_permission( user, "admin"): existingShare = session.query(UserShare).filter( and_(UserShare.file_id == fileId, UserShare.user_id == userId)).scalar() if existingShare is None: flFile.user_shares.append( UserShare(user_id=userId, file_id=fileId)) session.commit() sharedFiles.append(flFile) if role is not None: session.add( AuditLog( user.id, Actions.CREATE_USER_SHARE, "Role %s shared file %s(%s) with %s" % (role.id, flFile.name, flFile.id, shareUser.id), shareUser.id, role.id)) else: session.add( AuditLog( user.id, "Create User Share", "%s shared file %s(%s) with %s" % (user.id, flFile.name, flFile.id, shareUser.id), shareUser.id)) session.commit() else: fMessages.append( "You do not have permission to share file with ID: %s" % str(flFile.id)) if notify: cherrypy.session.release_lock() if cc: if (user is not None and user != ""): recipients.append(user) else: fMessages.append( "You elected to receive a carbon copy of the share notification, however your account does not have an email address set." ) for recipient in recipients: try: Mail.notify( get_template_file('share_notification.tmpl'), { 'sender': user.email if role is None else role.email, 'recipient': recipient.email, 'ownerId': user.id if role is None else role.id, 'ownerName': user.display_name if role is None else role.name, 'sharedFiles': sharedFiles, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'], 'personalMessage': "" }) session.add( AuditLog( user.id, Actions.SEND_EMAIL, "%s(%s) has been notified via email that you have shared a file with him or her." % (recipient.display_name, recipient.id), None, role.id if role is not None else None)) except Exception, e: session.rollback() fMessages.append( "Problem sending email notification to %s: %s" % (recipient.display_name, str(e))) session.commit() sMessages.append("Shared file(s) successfully") else:
def create_upload_request(self, password, expiration, requestType, maxFileSize=None, cc="false", notifyUser="******", emailAddresses=None, personalMessage=None, format="json", requestOrigin="", **kwargs): user, config, uploadURL, sMessages, fMessages = cherrypy.session.get( "user"), cherrypy.request.app.config['filelocker'], "", [], [] if requestOrigin != cherrypy.session['request-origin']: fMessages.append("Missing request key!!") else: try: expiration = parse_date(expiration, datetime.datetime.now()) except Exception, e: fMessages.append(str(e)) try: cc = True if cc.lower() == "true" else False notifyUser = True if notifyUser.lower() == "true" else False print "DEBUG: notifyUser = "******"" or maxFileSize == "0" or maxFileSize == 0) else None if maxFileSize is not None and maxFileSize < 0: fMessages.append("Max file size must be a positive number") password = None if password == "" else password emailAddresses = split_list_sanitized( emailAddresses.replace( ";", ",")) if (emailAddresses is not None and emailAddresses != "") else [] personalMessage = strip_tags(personalMessage) requestType = "multi" if requestType.lower( ) == "multi" else "single" uploadRequest = UploadRequest(date_expires=expiration, max_file_size=maxFileSize, notify_user=notifyUser, type=requestType, owner_id=user.id) if password is not None: uploadRequest.set_password(password) if requestType == "multi" and password is None: fMessages.append( "You must specify a password for upload requests that allow more than 1 file to be uploaded" ) else: uploadRequest.generate_id() session.add(uploadRequest) if cc: emailAddresses.append(user.email) orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) for recipient in emailAddresses: Mail.notify(get_template_file('upload_request_notification.tmpl'),\ {'sender': user.email, 'recipient': recipient, 'ownerId': user.id, \ 'ownerName': user.display_name, 'requestId': uploadRequest.id, 'requestType': uploadRequest.type,\ 'personalMessage': personalMessage, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name']}) session.add( AuditLog( user.id, Actions.CREATE_UPLOAD_REQUEST, "You created an upload request. As a result, the following email addresses were sent a file upload link: %s" % ",".join(emailAddresses), None)) session.commit() uploadURL = config[ 'root_url'] + "/public_upload?ticketId=%s" % str( uploadRequest.id) sMessages.append("Successfully created upload request") except Exception, e: fMessages.append(str(e))
cherrypy.log.error( "[%s] [upload] [Key error deleting entry in file_transfer]" % user.id) #Send out upload notification to the file owner if notify_user: try: if user.email is not None and user.email != "": orgConfig = get_config_dict_from_objects( session.query(ConfigParameter).filter( ConfigParameter.name.like('org_%')).all()) Mail.notify( get_template_file('upload_notification.tmpl'), { 'sender': None, 'recipient': user.email, 'fileName': newFile.name, 'filelockerURL': config['root_url'], 'org_url': orgConfig['org_url'], 'org_name': orgConfig['org_name'] }) except Exception, e: cherrypy.log.error( "[%s] [upload] [Unable to notify user %s of upload completion: %s]" % (user.id, user.id, str(e))) #Queue the temp file for secure erasure FileService.queue_for_deletion(tempFileName) #Return the response if format == "cli": newFileXML = "<file id='%s' name='%s'></file>" % (newFile.id,