Ejemplo n.º 1
0
 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.")
Ejemplo n.º 2
0
 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")
Ejemplo n.º 3
0
 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))
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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')
Ejemplo n.º 6
0
                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)
Ejemplo n.º 7
0
 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)))
Ejemplo n.º 8
0
        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
Ejemplo n.º 9
0
    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")
Ejemplo n.º 10
0
 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."
                         )
Ejemplo n.º 11
0
    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:
Ejemplo n.º 12
0
 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))
Ejemplo n.º 13
0
            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,