Example #1
0
def admin_users_edit_post():
    payload = get_payload(request)
    user_id = payload.get('user_id')
    if user_id:
        user = User.get(user_id)
        return_value = success('All profile values have been updated.')
    else:
        user = User()
        user.insert()
        return_value = success('User created.')
        if not payload.get('password'):
            return jsonify(failure('You must set a password for new users'))
        if not payload.get('email'):
            return jsonify(failure('You must set an email for new users'))
        if not payload.get('name'):
            return jsonify(failure('You must set a name for new users'))

    for key in payload:
        if key == 'password':
            user.set_password(payload[key])
        elif key != 'user_id':
            setattr(user, key, payload[key])

    g.user.insert()
    safe_commit()

    return jsonify(return_value)
Example #2
0
def retrieve_content():
    return_value = success('The content was retrieved.')
    return_value['contents'] = []

    payload = get_payload(request)

    content_id = payload.get('id')
    if content_id:
        content = Content.get(content_id)
        if content:
            return_value['contents'] = [content.to_dict(camel_case=True)]
        else:
            return_value['success'] = False
            return_value['messages'] = ['No content found with that ID.']
    else:
        # No ID passed... we should return more than one result.
        current_page = payload.get('current_page', 1)
        page_size = payload.get('page_size', 5)
        content_type = payload.get('content_type', 'post')
        published = payload.get('published', True)
        contents = Content.filter(Content.type == content_type)\
                          .filter(Content.published == published)\
                          .order_by(Content.published_on.desc())

        contents, maxpages = paginate(contents, current_page, page_size)
        if contents:
            return_value['contents'] = results_to_dict(contents, camel_case=True)

    return jsonify(return_value)
Example #3
0
def upload_ajax():
    return_value = success('The file was uploaded.')
    payload = get_payload(request)
    ufile = request.files['file']
    file_id = upload_file(payload, ufile)
    return_value['id'] = file_id
    return jsonify(return_value)
Example #4
0
def retrieve_content():
    return_value = success('The content was retrieved.')
    return_value['contents'] = []

    payload = get_payload(request)

    content_id = payload.get('id')
    if content_id:
        content = Content.get(content_id)
        if content:
            return_value['contents'] = [content.to_dict(camel_case=True)]
        else:
            return_value['success'] = False
            return_value['messages'] = ['No content found with that ID.']
    else:
        # No ID passed... we should return more than one result.
        current_page = payload.get('current_page', 1)
        page_size = payload.get('page_size', 5)
        content_type = payload.get('content_type', 'post')
        published = payload.get('published', True)
        contents = Content.filter(Content.type == content_type)\
                          .filter(Content.published == published)\
                          .order_by(Content.published_on.desc())

        contents, maxpages = paginate(contents, current_page, page_size)
        if contents:
            return_value['contents'] = results_to_dict(
                contents, camel_case=True)

    return jsonify(return_value)
Example #5
0
def upload_ajax():
    return_value = success('The file was uploaded.')
    payload = get_payload(request)
    ufile = request.files['file']
    file_id = upload_file(payload, ufile)
    return_value['id'] = file_id
    return jsonify(return_value)
Example #6
0
def upload():
    payload = get_payload(request)
    ufile = request.files['file']
    file_id = upload_file(payload, ufile)
    if file_id:
        flash("File uploaded!")
    else:
        flash("There was a problem uploading that file.")
    return redirect("/admin/files/add")
Example #7
0
def upload():
    payload = get_payload(request)
    ufile = request.files['file']
    file_id = upload_file(payload, ufile)
    if file_id:
        flash("File uploaded!")
    else:
        flash("There was a problem uploading that file.")
    return redirect("/admin/files/add")
Example #8
0
def search_page():
    payload = get_payload(request)
    search = payload.get('search')
    contents = Content.filter(or_(Content.body.ilike('%{}%'.format(search)),
                                  Content.tags.ilike('%{}%'.format(search)),
                                  Content.title.ilike('%{}%'.format(search))))\
        .filter(Content.published == True).all()

    return render('search.html', user=import_user(), contents=contents,
                  menu_items=get_menu_items())
Example #9
0
def admin_content_delete():
    return_value = success('The content has been deleted.')
    payload = get_payload(request)
    content = Content.get(payload.get('id'))
    if content:
        content.delete()
        safe_commit()
    else:
        return_value = failure('Content not found.')

    return jsonify(return_value)
Example #10
0
def create_content():
    return_value = success('The content was created.')
    payload = get_payload(request)

    editing = False
    if payload.get('id'):
        content = Content.get(payload.get('id'))
        editing = True
        return_value = success('The content was updated.')
    else:
        content = Content()

    content.type = payload.get('type').lower()
    content.template = '{}.html'.format(content.type)
    content.title = payload.get('title')
    content.body = payload.get('body') or ''
    content.theme = payload.get('theme')
    content.preview = payload.get('preview') or ''
    content.user_id = payload.get('user_id')
    tags = [t.strip() for t in payload.get('tags', '').split(',') if t.strip()]
    for tag in tags:
        count = Tag.filter(Tag.name == tag).count()
        if not count:
            new_tag = Tag(name=tag)
            new_tag.insert()

    content.tags = ",".join(tags)
    content.parser = payload.get('parser', 'markdown')

    published = json.loads(payload.get('published', 'false'))
    content.published = published

    menu_item = json.loads(payload.get('menu_item', 'false'))
    content.menu_item = menu_item

    if not editing:
        content.slug = make_slug(content.title)
    else:
        published_on = payload.get('published_on')
        if published_on:
            content.published_on = parser.parse(published_on)

    valid = content.validate()
    if valid['success'] or editing:
        print(content.to_dict())
        content.insert()
        safe_commit()
        return_value['id'] = content.id
        # with app.context():
        #    cache.clear()
    else:
        return_value = valid

    return jsonify(return_value)
Example #11
0
def admin_settings_post():
    return_value = success('All settings have been updated.')
    payload = get_payload(request)

    for key in payload:
        setting = Setting.filter(Setting.name == key).first()
        setting.value = payload[key]
        setting.insert()

    safe_commit()

    return jsonify(return_value)
Example #12
0
def retrieve_user():
    return_value = success('The user was retrieved.')
    payload = get_payload(request)
    user = User.get(payload.get('id'))

    if not user:
        return_value = failure('That user does not exist.')
    else:
        return_value['user'] = user.to_dict(camel_case=True)
        return_value['user'].pop('password')
        return_value['user'].pop('openid')

    return jsonify(return_value)
Example #13
0
def retrieve_user():
    return_value = success('The user was retrieved.')
    payload = get_payload(request)
    user = User.get(payload.get('id'))

    if not user:
        return_value = failure('That user does not exist.')
    else:
        return_value['user'] = user.to_dict(camel_case=True)
        return_value['user'].pop('password')
        return_value['user'].pop('openid')

    return jsonify(return_value)
Example #14
0
def delete_user():
    return_value = success('The user was deleted.')
    payload = get_payload(request)

    if not g.user or g.user.id != payload.get('id'):
        user = User.filter(User.id == payload.get('id')).first()
        if user:
            user.delete()
            safe_commit()
        else:
            return_value = failure('That user does not exist.')
    else:
        return_value = failure('You cannot delete the current user.')

    return jsonify(return_value)
Example #15
0
def delete_user():
    return_value = success('The user was deleted.')
    payload = get_payload(request)

    if not g.user or g.user.id != payload.get('id'):
        user = User.filter(User.id == payload.get('id')).first()
        if user:
            user.active = False
            user.insert()
            safe_commit()
        else:
            return_value = failure('That user does not exist.')
    else:
        return_value = failure('You cannot delete the current user.')

    return jsonify(return_value)
Example #16
0
def post_login():
    payload = get_payload(request)
    user = User.filter(User.email == payload.get('email')).first()
    if user:
        if check_password_hash(user.password, payload['password']):
            session['userid'] = user.id
            next_url = request.args.get('next', '')
            if next_url:
                return redirect(next_url)
            else:
                return redirect(url_for('admin'))
        else:
            flash("Incorrect password")
    else:
        flash("Invalid user")

    return redirect(url_for('login'))
Example #17
0
def create_user():
    return_value = success('The user was created.')
    payload = get_payload(request)

    user = User(username=payload.get('email'), password=payload.get('password'),
                name=payload.get('name'))

    valid = user.validate()

    if valid['success']:
        user.insert()
        safe_commit()
        return_value['id'] = user.id
    else:
        del(user)
        return_value = valid

    return jsonify(return_value)
Example #18
0
def create_content():
    return_value = success('The content was created.')
    payload = get_payload(request)

    editing = False
    if payload.get('id'):
        content = Content.get(payload.get('id'))
        editing = True
        return_value = success('The content was updated.')
    else:
        content = Content()

    content.type = payload.get('type').lower()
    content.title = payload.get('title')
    content.body = payload.get('body')
    content.user_id = payload.get('user_id')
    tags = [t.strip() for t in payload.get('tags', '').split(',') if t.strip()]
    for tag in tags:
        count = Tag.filter(Tag.name == tag).count()
        if not count:
            new_tag = Tag(name=tag)
            new_tag.insert()

    content.tags = ",".join(tags)
    content.parser = payload.get('parser', 'markdown')
    content.published = bool(payload.get('published', False))

    if not editing:
        content.slug = make_slug(content.title)
    else:
        created_on = payload.get('created_on')
        if created_on:
            content.created_on = parser.parse(created_on)

    valid = content.validate()
    if valid['success'] or editing:
        content.insert()
        safe_commit()
        return_value['id'] = content.id
    else:
        return_value = valid

    return jsonify(return_value)
Example #19
0
def admin_files_delete():
    return_value = success('The file has been deleted.')
    payload = get_payload(request)
    afile = File.get(payload.get('id'))
    if afile:
        try:
            os.unlink(afile.path)
        except OSError:
            pass
        try:
            os.unlink(afile.thumbnail_path)
        except OSError:
            pass
        afile.delete()
        safe_commit()
    else:
        return_value = failure('File not found.')

    return jsonify(return_value)
Example #20
0
def update_user():
    return_value = success('The user was updated.')
    payload = get_payload(request)
    user = User.get(payload.get('id'))

    if not user:
        return_value = failure('That user does not exist.')
    else:
        if payload.get('password'):
            user.set_password(payload.get('password'))
        if payload.get('email'):
            user.email = payload.get('email')
        if payload.get('name'):
            user.name = payload.get('name')

        safe_commit()
        return_value['user'] = user.to_dict(camel_case=True)

    return jsonify(return_value)
Example #21
0
def update_user():
    return_value = success('The user was updated.')
    payload = get_payload(request)
    user = User.get(payload.get('id'))

    if not user:
        return_value = failure('That user does not exist.')
    else:
        if payload.get('password'):
            hashed_password = generate_password_hash(payload.get('password'))
        if payload.get('email'):
            user.email = payload.get('email')
        if payload.get('name'):
            user.name = payload.get('name')

        user.password = hashed_password
        safe_commit()
        return_value['user'] = user.to_dict(camel_case=True)

    return jsonify(return_value)
Example #22
0
def create_user():
    return_value = success('The user was created.')
    payload = get_payload(request)

    hashed_password = generate_password_hash(payload.get('password'))

    user = User()
    user.email = payload.get('email')
    user.name = payload.get('name')
    user.password = hashed_password
    valid = user.validate()

    if valid['success']:
        user.insert()
        safe_commit()
        return_value['id'] = user.id
    else:
        del(user)
        return_value = valid

    return jsonify(return_value)
Example #23
0
def setup():
    import shlex
    import subprocess
    user_count = User.count()
    # print(user_count)
    if user_count > 0:
        # We already have a user. No running setup.
        return redirect(url_for('.index'))

    if request.method == 'POST':
        payload = get_payload(request)
        if payload.get('email') and payload.get('password'):

            user = User(username=payload.get('email'),
                        password=payload.get('password'),
                        firstname=payload.get('firstname'),
                        lastname=payload.get('lastname'))

            my_role = Role(name='admin')
            my_role.add_abilities('create_users', 'delete_users', 'create_content',
                                  'delete_content', 'upload_files', 'delete_files',
                                  'change_settings')

            user.add_roles('admin', 'superadmin')

            login_user(user)

            args = shlex.split("alembic history")
            p = subprocess.Popen(args, stdout=subprocess.PIPE)
            output, error = p.communicate()
            data = output.split('\n')
            latest_alembic = None
            for row in data:
                if "(head)" in row:
                    cols = row.split(" ")
                    latest_alembic = cols[2].strip()

            if latest_alembic:
                print("Stamping with latest Alembic revision: %s" %
                      latest_alembic)
                args = shlex.split("alembic stamp %s" % latest_alembic)
                subprocess.Popen(args, stdout=subprocess.PIPE)

            from impression.upgrade import THEMES, SYNTAX_THEMES
            # Create some system settings
            Setting(name='blog-title', vartype='str', system=True).insert()
            Setting(name='blog-copyright', vartype='str', system=True).insert()
            Setting(name='blog-theme', vartype='str',
                    system=True, value='impression').insert()
            Setting(name='posts-per-page', vartype='int',
                    system=True, value=4).insert()
            Setting(name='bootstrap-theme', vartype='str', system=True,
                    value='sandstone', allowed=json.dumps(THEMES)).insert()
            Setting(name='syntax-highlighting-theme', vartype='str', system=True,
                    value='monokai.css', allowed=json.dumps(SYNTAX_THEMES)).insert()
            Setting(name='custom-front-page',
                    vartype='str', system=True).insert()
            Setting(name='allowed-extensions', vartype='list', system=True,
                    value="['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'tiff']").insert()
            Setting(name='upload-directory', vartype='str', system=True, value='uploads/').insert()
            Setting(name='max-file-size', vartype='int',
                    system=True, value=16777216).insert()
            safe_commit()
            flash("Initial Setup Complete", "success")
            return redirect(url_for('admin_controller.admin_settings'))

    return render('setup.html')