Exemple #1
0
def post():
    try:
        # authenticate user
        user = User.validate_auth_key(username=request.form.get("username"),
                                      api_key=request.form.get("api_key"))
        if user is None:
            return "API Auth Failed: Post"

        # decode the json payload
        data = json.loads(request.form.get("ebooks"))

    except KeyError:
        return "Bad Request"

    # stats log the upload
    Log.create(user.id, "CONNECT", request.form.get("total"),
               request.form.get("api_key"))

    # update the library
    ds = DataStore(user)
    new_ebook_count = ds.update_library(data)
    Log.create(user.id, "NEW", new_ebook_count, request.form.get("api_key"))

    # handle badge and reputation changes
    r = Reputation(user)
    r.new_ebooks(new_ebook_count)
    r.earn_badges()
    msgs = r.get_new_badges()

    # query books missing from S3 and supply back to the client
    rs = ds.find_missing_books()
    return json.dumps({'ebooks_to_upload': rs, 'messages': msgs})
Exemple #2
0
    def store_ebook(self, sdbkey, filehash, filepath):
        # connect to S3
        bucket = Factory.connect_s3()
        k = Factory.get_key(bucket)
        k.key = sdbkey

        # calculate uploaded file md5
        f = open(filepath, "rb")
        md5_tup = k.compute_md5(f)
        f.close()

        # error check uploaded file
        if filehash != md5_tup[0]:
            # TODO logging
            print 'upload corrupt!'
        else:
            try:
                # check for DeDRM meta tag
                meta = subprocess.Popen(['ebook-meta', filepath], stdout=subprocess.PIPE).communicate()[0]
                if "Tags                : DeDRM" in meta:
                    Log.create(self.user.id, "DEDRM", 1)
                    self.set_dedrm_flag(sdbkey)

                # push file to S3
                k.set_contents_from_filename(filepath, None, False, None, 10, None, md5_tup)

                # mark ebook as saved
                self.set_uploaded(sdbkey)

            except S3ResponseError as e:
                # TODO log
                print 'MD5 error at S3'

        # always delete local file
        os.remove(filepath)
Exemple #3
0
def upload():
    user = User.validate_auth_key(
        username=request.form.get("username"),
        api_key=request.form.get("api_key")
    )
    if user is None:
        return "API Auth Failed: Upload"

    # stats log the upload
    Log.create(user.id, "UPLOAD", 1, request.form.get("api_key"))

    uploads.save(request.files['ebook'], None, "%s%s" % (request.form.get("filehash"), request.form.get("format")))
    res = store_ebook.apply_async((user.id, request.form.get("sdbkey"), request.form.get("filehash"), request.form.get("format")))
    return res.task_id
Exemple #4
0
def upload():
    user = User.validate_auth_key(username=request.form.get("username"),
                                  api_key=request.form.get("api_key"))
    if user is None:
        return "API Auth Failed: Upload"

    # stats log the upload
    Log.create(user.id, "UPLOAD", 1, request.form.get("api_key"))

    uploads.save(
        request.files['ebook'], None,
        "%s%s" % (request.form.get("filehash"), request.form.get("format")))
    res = store_ebook.apply_async(
        (user.id, request.form.get("sdbkey"), request.form.get("filehash"),
         request.form.get("format")))
    return res.task_id
Exemple #5
0
    def store_ebook(self, sdbkey, filehash, filepath):
        # connect to S3
        bucket = Factory.connect_s3()
        k = Factory.get_key(bucket)
        k.key = sdbkey

        # calculate uploaded file md5
        f = open(filepath, "rb")
        md5_tup = k.compute_md5(f)
        f.close()

        # error check uploaded file
        if filehash != md5_tup[0]:
            # TODO logging
            print 'upload corrupt!'
        else:
            try:
                # check for DeDRM meta tag
                meta = subprocess.Popen(
                    ['ebook-meta', filepath],
                    stdout=subprocess.PIPE).communicate()[0]
                if "Tags                : DeDRM" in meta:
                    Log.create(self.user.id, "DEDRM", 1)
                    self.set_dedrm_flag(sdbkey)

                # push file to S3
                k.set_contents_from_filename(filepath, None, False, None, 10,
                                             None, md5_tup)

                # mark ebook as saved
                self.set_uploaded(sdbkey)

            except S3ResponseError as e:
                # TODO log
                print 'MD5 error at S3'

        # always delete local file
        os.remove(filepath)
Exemple #6
0
def post():
    try:
        # authenticate user
        user = User.validate_auth_key(
            username=request.form.get("username"),
            api_key=request.form.get("api_key")
        )
        if user is None:
            return "API Auth Failed: Post"

        # decode the json payload
        data = json.loads(request.form.get("ebooks"))

    except KeyError:
        return "Bad Request"

    # stats log the upload
    Log.create(user.id, "CONNECT", request.form.get("total"), request.form.get("api_key"))

    # update the library
    ds = DataStore(user)
    new_ebook_count = ds.update_library(data)
    Log.create(user.id, "NEW", new_ebook_count, request.form.get("api_key"))

    # handle badge and reputation changes
    r = Reputation(user)
    r.new_ebooks(new_ebook_count)
    r.earn_badges()
    msgs = r.get_new_badges()

    # query books missing from S3 and supply back to the client
    rs = ds.find_missing_books()
    return json.dumps({
        'ebooks_to_upload': rs,
        'messages': msgs
    })