Beispiel #1
0
def share(path):
    is_public = False
    is_private = False
    
    try:
        f = File.get(File.public_share_url == path)
        is_public = True
    except peewee.DoesNotExist:
        try:
            f = File.get(File.private_share_url == path)
            is_private = True
        except peewee.DoesNotExist:
            return jsonify(message='error'), 404

    actual_filename = generate_filename(f.folder.name, f.filename)
    target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actual_filename)

    if not ((is_public and f.open_public_share) or (is_private and f.open_private_share)):
        return jsonify(message='error'), 404

    s = URLSafeSerializer(app.config['SECRET_KEY'], expires_in=24 * 3600)

    args = request.args
    if args.get('download') == 'true':
        token = None
        cookies = request.cookies
        if 'token' in cookies:
            token = cookies['token']
            try:
                data = s.loads(token)
                if data['path'] == path:
                    if os.path.exists(target_file):
                        return send_file(target_file)
                    else:
                        return jsonify(message='error'), 404
                else:
                    return jsonify(message='unauthorized'), 401
            except:
                return jsonify(message='unauthorized'), 401

    token = s.dumps({'path': path}).decode('utf-8')
    
    payload = {
        'filename': f.filename,
        'folder': f.folder.name,
        'open_public_share': f.open_public_share,
        'open_private_share': f.open_private_share,
        'token': token,
    }

    if is_private:
        if 'password' not in args or args['password'] != f.private_share_password:
            payload['token'] = ''

    return jsonify(message='OK', data=payload)
Beispiel #2
0
 def get(self, id, name='some_file.bin'):
   #try:
   id = int(id) #int(self.request.get('id'))
   file = File.get(db.Key.from_path('File', id))
     #if file.content:
   file.incrementDownloadCount()
   import datetime
   lastmod = datetime.datetime.now() 
   self.response.headers['Content-Type'] = "application/octet-stream"
   #self.response.headers['Cache-Control']= 'public, max-age=172800'
   #self.response.headers['Last-Modified'] = lastmod.strftime("%a, %d %b %Y %H:%M:%S GMT")
   #expires = lastmod + datetime.timedelta(days=365)
   #self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
   self.response.headers['Content-disposition'] = 'attachment; filename="%s"' % str(file.name)
   self.response.out.write(file.content)
       #self.response.headers['Cache-Control'] = "public, max-age=31536000"
       #self.response.headers['Content-Type'] = str(media_object.guessed_type)
   #except:
   #  self.response.out.write('Sorry, There is no such file')
   #last_modified_string = media_object.creation.strftime("%a, %d %b %Y %H:%M:%S GMT")
   #self.response.headers['Cache-Control'] = "public, max-age=31536000"
   #self.response.headers['Content-Type'] = str(media_object.guessed_type)
   #self.response.headers['Last-Modified'] = last_modified_string
   #expires = media_object.creation + datetime.timedelta(days=30)
   #self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT")
   pass
Beispiel #3
0
def files(folder_name, filename):
    # Get the name path
    actual_filename = generate_filename(folder_name, filename)
    target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']),
                               actual_filename)

    try:
        f = File.get(filename=filename)
    except peewee.DoesNotExist:
        return jsonify(message='error'), 404

    if request.method == 'GET':
        args = request.args

        if 'query' in args and args['query'] == 'info':
            return jsonify(message='OK', data=model_to_dict(f))

        if os.path.exists(target_file):
            return send_file(target_file)
        else:
            return jsonify(message='error'), 404

    if request.method == 'DELETE':
        if os.path.exists(target_file):
            try:

                f.delete_instance()
                os.remove(target_file)
                return jsonify(message='OK')
            except Exception as e:
                app.logger.exception(e)
                return jsonify(message='error'), 500
        else:
            return jsonify(message='error'), 404
Beispiel #4
0
def files(folder_name, filename):
    actrual_filename = generate_filename(folder_name, filename)
    target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']),
                               actrual_filename)
    foreign_id = Folder.get(name=folder_name).id
    try:
        f = File.get(filename=filename).get(folder_id=foreign_id)
    except peewee.DoesNotExist:
        return jsonify(message='error'), 404

    if request.method == 'GET':
        args = request.args
        if 'query' in args and args['query'] == 'info':
            return jsonify(message='OK', data=model_to_dict(f)), 201

        if os.path.exists(target_file):
            return send_file(target_file)
        else:
            return jsonify(message='error'), 404

    if request.method == 'DELETE':
        if os.path.exists(target_file):
            try:
                f.delete_instance()
                os.remove(target_file)
                return jsonify(message="OK"), 201
            except Exception as e:
                app.logger.exception(e)
                return jsonify(message='error'), 500
        else:
            return jsonify(message='error'), 404

    if request.method == 'PATCH':
        share_type = request.args.get('shareType')
        if share_type == 'public':
            f.open_public_share = True
            f.open_private_share = False
        elif share_type == 'none':
            f.open_public_share = False
            f.open_private_share = False
        elif share_type == 'private':
            f.open_public_share = False
            f.open_private_share = True
        f.save()
        return jsonify(message='OK')
Beispiel #5
0
def files(folder_name, filename):
    actual_filename = generate_filename(folder_name, filename)
    target_file = os.path.join(os.path.expanduser(app.config['UPLOAD_FOLDER']), actual_filename)

    try:
        f = File.get(filename=filename)
    except peewee.DoesNotExist:
        return jsonify(message='error'), 404

    if request.method == 'GET':
        args = request.args
        if 'query' in args and args['query'] == 'info':
            return jsonify(message='OK', data=model_to_dict(f))

        if os.path.exists(target_file):
            return send_file(target_file)
        else:
            return jsonify(message='error'), 404

    if request.method == 'DELETE':
        if os.path.exists(target_file):
            try:
                f.delete_instance()
                os.remove(target_file)
                return jsonify(message='OK')
            except Exception as e:
                app.logger.exception(e)
                return jsonify(message='error'), 500
        else:
            return jsonify(message='error'), 404

    if request.method == 'PATCH':
        share_type = request.args.get('shareType')
        if share_type == 'private':
            f.open_private_share = True
            f.open_public_share = False
        elif share_type == 'public':
            f.open_private_share = False
            f.open_public_share = True
        elif share_type == 'none':
            f.open_public_share = False
            f.open_private_share = False
        f.save()
        return jsonify(message='OK')
Beispiel #6
0
def addFiles(files):
    print "have to check %d files" % len(files)
    errors = []
    base = re.compile("^(.*)\.([\w]+)$")

    for file in files:
        if isinstance(file, File): continue
        f,revision = getFile(file)
        if not f: 
            print "%s not found!" % file
            continue
        path = f['filepath']
        f['id'] = f['fid']
        f['filepath'] = f['filename']
        f['filename'] = revision['description']
        f['node'] = f['nid']
        del(f['fid'])
        del(f['nid'])
        
        try:
            File.get(f['id'])
            print "file %s already there" % f['id']
            continue
        except SQLObjectNotFound:
            file = File(**f)
            
        match = base.match(file.filepath)
        if not match: 
            print "%s odd filename" % file.filename
            continue
        
        basename,ext = match.groups()
        
        if file.filemime[:5] == "video":
            download_from = "http://master/files/orbit/%s.flv" % urllib.quote(basename)
            download_to = "%s/movies/%s.flv" % (DOWNLOAD,basename)
            filename = basename + ".flv"
            alt = "%s/files/orbit/%s" % (DOWNLOAD,filename)
        
        elif file.filemime[:5] == "image":
            download_from = "http://master/%s" % urllib.quote(path)
            filename = basename + "." + ext
            download_to = "%s/images/%s" % (DOWNLOAD,filename)
            alt = "%s/%s" % (DOWNLOAD,path)            

        elif file.filemime[:5] == "audio":
            download_from = "http://master/%s" % urllib.quote(path)
            filename = basename + "." + ext
            download_to = "%s/audio/%s" % (DOWNLOAD,filename)
            alt = "%s/%s" % (DOWNLOAD,path)
    
        if not os.path.isfile(download_to) and os.path.isfile(alt):
            print "copy %s" % basename 
            shutil.copy(alt,download_to)
        elif not os.path.isfile(download_to):
            print "download %s" % basename 
            urllib.urlretrieve(download_from, download_to)
    
        if not os.path.isfile(download_to):
            print "could not fetch %s!" % download_to
            errors.append(file)
            continue
        
        if file.filemime[:5] == "image":
            if file.filemime[6:] == "gif":
                print "convert gif"
                movie = '%s/movies/%s.flv' % (DOWNLOAD,basename)
                cmd1 = "ffmpeg -f gif -i '%s' -s 320x240 -y %s" % (download_to,movie)
                os.popen(cmd1)
                if not os.path.isfile(movie):
                    print "%s cont execute!" % cmd1
                    errors.append(file)
                    continue
                else: 
                    os.unlink(download_to)
                file.filemime = "video/flv"
                filename = basename + ".flv"
            else:
                download_to_old = ""
                if file.filemime[6:] != "jpeg":
                    download_to_old = download_to
                    download_to = download_to + ".jpg"
                    filename = filename + ".jpg"
                    shutil.move(download_to_old,download_to)
                    
                cmd1 = "sips --getProperty pixelWidth '%s'" % download_to
                cmd2 = "sips --setProperty format jpeg --resampleWidth 400 '%s'" % download_to
                
                try:
                    if int(os.popen(cmd1).readlines()[1][14:-1]) <> 400:
                        os.popen(cmd2)
                        file.filemime = "image/jpeg"
                except IndexError:
                    print "%s cont execute!" % cmd2
                    errors.append(file)
                    continue
            
        file.filepath = filename

    for e in errors:
        e.destroySelf()