Beispiel #1
0
def define_group_project_perms(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown project')

    if not project.get_permission(cydra_user, '*', 'admin'):
        raise InsufficientPermissions()

    groupid = request.form.get('groupid', None)

    if groupid is None:
        raise BadRequest("No group supplied")

    group = cydra_instance.translator.groupid_to_group(groupid)

    if group is None:
        raise BadRequest("Unknown Group")

    for perm in ['read', 'write', 'create', 'admin']:
        if request.form.get(perm, '') == 'true':
            project.set_group_permission(group, '*', perm, True)
        else:
            project.set_group_permission(group, '*', perm, None)

    flash('Permissions successufully set', 'success')
    return redirect(url_for('.project', projectname=projectname))
Beispiel #2
0
def add_pubkey():
    if cydra_user.is_guest:
        raise InsufficientPermissions()

    try:
        from twisted.conch.ssh import keys
        import base64
    except:
        return redirect(url_for('.usersettings'))

    pubkey = request.form.get('key_data', None)
    name = request.form.get('key_name', None)

    if pubkey is None or name is None:
        raise BadRequest('Key or Name missing')

    try:
        pubkey = keys.Key.fromString(pubkey)
    except:
        logger.exception("Unable to parse key")
        flash('Unable to parse key', 'error')
    else:
        store = ExtensionPoint(IPubkeyStore, component_manager=cydra_instance)
        store.add_pubkey(cydra_user, pubkey.blob(), name, pubkey.fingerprint())

    return redirect(url_for('.usersettings'))
Beispiel #3
0
def project_perms(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound("Unknown Project")

    if not project.get_permission(cydra_user, '*', 'read'):
        raise InsufficientPermissions()

    username = request.args.get('username', None)
    userid = request.args.get('userid', None)

    if username is None and userid is None:
        raise BadRequest("Either username or userid has to be supplied")

    user = None
    if username is not None and username != '':
        user = cydra_instance.translator.username_to_user(username)
    else:
        user = cydra_instance.translator.userid_to_user(userid)

    if user is None:
        raise BadRequest("Invalid User")

    return jsonify(userid=user.userid,
                   username=user.username,
                   user_full_name=user.full_name,
                   perms=project.get_permissions(user, '*'))
Beispiel #4
0
def define_user_project_perms(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown project')

    if not project.get_permission(cydra_user, '*', 'admin'):
        raise InsufficientPermissions()

    username = request.form.get('username', None)
    userid = request.form.get('userid', None)

    if (username is None or username == '') and userid is None:
        raise BadRequest("Either username or userid has to be supplied")

    user = None
    if username is not None and username != '':
        user = cydra_instance.translator.username_to_user(username)
    else:
        user = cydra_instance.translator.userid_to_user(userid)

    if user is None:
        raise BadRequest("Unknown User")

    for perm in ['read', 'write', 'create', 'admin'] if not user.is_guest else ['read']:
        if request.form.get(perm, '') == 'true':
            project.set_permission(user, '*', perm, True)
        else:
            project.set_permission(user, '*', perm, None)

    flash('Permissions successufully set', 'success')
    return redirect(url_for('.project', projectname=projectname))
Beispiel #5
0
def project(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        abort(404)

    if not project.get_permission(cydra_user, '*', 'read'):
        raise InsufficientPermissions()

    repo_viewer_providers = ExtensionPoint(IRepositoryViewerProvider,
                                           component_manager=cydra_instance)
    project_action_providers = ExtensionPoint(IProjectActionProvider,
                                              component_manager=cydra_instance)
    repository_action_providers = ExtensionPoint(
        IRepositoryActionProvider, component_manager=cydra_instance)
    featurelist_item_providers = ExtensionPoint(
        IProjectFeaturelistItemProvider, component_manager=cydra_instance)

    return render_template(
        'project.jhtml',
        project=project,
        get_viewers=get_collator(repo_viewer_providers.get_repository_viewers),
        project_actions=get_collator(
            project_action_providers.get_project_actions)(project),
        get_repository_actions=get_collator(
            repository_action_providers.get_repository_actions),
        featurelist=get_collator(
            featurelist_item_providers.get_project_featurelist_items)(project))
Beispiel #6
0
def login():
    from flask import request, redirect, url_for
    from cydra.web.wsgihelper import InsufficientPermissions

    if request.environ['cydra_user'].is_guest:
        raise InsufficientPermissions()

    return redirect(url_for('frontend.userhome'))
Beispiel #7
0
def userhome():
    if cydra_user.is_guest:
        raise InsufficientPermissions()

    return render_template('userhome.jhtml',
                           get_global_permission=cydra_instance.get_permission,
                           owned_projects=cydra_instance.get_projects_owned_by(cydra_user),
                           other_projects=cydra_instance.get_projects_user_has_permissions_on(cydra_user))
Beispiel #8
0
def is_projectname_available():
    if not cydra_instance.get_permission(cydra_user, 'projects', 'create'):
        raise InsufficientPermissions()

    projectname = request.args.get('projectname', None)

    if projectname:
        if cydra_instance.get_project(projectname) is None:
            return jsonify(available=True)

    return jsonify(available=False)
Beispiel #9
0
        def create(projectname):
            project = cydra_instance.get_project(projectname)
            if project is None:
                raise NotFound('Unknown project')

            if not project.get_permission(cydra_user, '*', 'admin'):
                raise InsufficientPermissions()

            self.create(project)
            return redirect(
                url_for('frontend.project', projectname=projectname))
Beispiel #10
0
def confirm_delete_project(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown project')

    if project.owner != cydra_user:
        raise InsufficientPermissions()

    # if not project.get_permission(cydra_user, '*', 'admin'):
    #     raise InsufficientPermissions()

    return render_template('confirm_delete_project.jhtml', project=project)
Beispiel #11
0
def remove_pubkey():
    if cydra_user.is_guest:
        raise InsufficientPermissions()

    fingerprint = request.form.get('fingerprint', None)
    if fingerprint is None:
        raise BadRequest('Fingerprint missing')

    store = ExtensionPoint(IPubkeyStore, component_manager=cydra_instance)
    store.remove_pubkey(cydra_user, fingerprint=fingerprint)

    return redirect(url_for('.usersettings'))
Beispiel #12
0
def delete_project(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown project')

    if project.owner != cydra_user:
        raise InsufficientPermissions()

    # if not project.get_permission(cydra_user, '*', 'admin'):
    #     raise InsufficientPermissions()

    project.delete()

    flash('Project ' + projectname + ' deleted', 'success')
    return redirect(url_for('.userhome'))
Beispiel #13
0
        def register_repository(projectname, repositorytype, repositoryname):
            project = cydra_instance.get_project(projectname)
            if project is None:
                raise NotFound('Unknown project')

            if not project.get_permission(cydra_user, '*', 'admin'):
                raise InsufficientPermissions()

            repository = project.get_repository(repositorytype, repositoryname)
            if repository is None:
                raise NotFound('Unknown repository')

            self.register_repository(repository)
            return redirect(
                url_for('frontend.project', projectname=projectname))
Beispiel #14
0
def usersettings():
    if cydra_user.is_guest:
        raise InsufficientPermissions()

    pubkey_support = True
    pubkeys = []
    try:
        from twisted.conch.ssh import keys
    except:
        pubkey_support = False
    else:
        store = ExtensionPoint(IPubkeyStore, component_manager=cydra_instance)
        pubkey_support = len(store) > 0
        pubkeys = store.get_pubkeys(cydra_user)

    return render_template('usersettings.jhtml', pubkey_support=pubkey_support, pubkeys=pubkeys)
Beispiel #15
0
def delete_repository(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown Project')

    repository_type = project.get_repository_type(request.form.get('repository_type'))
    if repository_type is None:
        raise NotFound('Unknown Repository Type')

    repository = repository_type.get_repository(project, request.form.get('repository_name'))
    if repository is None:
        raise NotFound('Unknown Repository')

    if not repository.can_delete(cydra_user):
        raise InsufficientPermissions()

    repository.delete()
    return redirect(url_for('.project', projectname=projectname))
Beispiel #16
0
def project_group_perms(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound("Unknown Project")

    if not project.get_permission(cydra_user, '*', 'read'):
        raise InsufficientPermissions()

    groupid = request.args.get('groupid', None)

    if groupid is None:
        raise BadRequest("groupid has to be supplied")

    group = cydra_instance.translator.groupid_to_group(groupid)

    if group is None:
        raise BadRequest("Invalid Group")

    return jsonify(groupid=group.groupid, group_name=group.name, perms=project.get_group_permissions(group, '*'))
Beispiel #17
0
def create_project():
    if not cydra_instance.get_permission(cydra_user, 'projects', 'create'):
        raise InsufficientPermissions()

    projectname = request.form.get('projectname')

    if not projectname:
        raise BadRequest('Missing project name')

    if cydra_instance.get_project(projectname) is not None:
        flash('There already exists a project with this name', 'error')
        return redirect(url_for('.userhome'))

    project = cydra_instance.datasource.create_project(projectname, cydra_user)
    if project:
        flash('Successfully created new project', 'success')
        return redirect(url_for('.project', projectname=projectname))
    else:
        flash('Project creation failed', 'error')
        return redirect(url_for('.userhome'))
Beispiel #18
0
def set_repository_param(projectname):
    project = cydra_instance.get_project(projectname)
    if project is None:
        raise NotFound('Unknown Project')

    repository_type = project.get_repository_type(request.form.get('repository_type'))
    if repository_type is None:
        raise NotFound('Unknown Repository Type')

    repository = repository_type.get_repository(project, request.form.get('repository_name'))
    if repository is None:
        raise NotFound('Unknown Repository')

    if not repository.can_modify_params(cydra_user):
        raise InsufficientPermissions()

    if 'param' not in request.form or 'value' not in request.form:
        raise BadRequest()

    repository.set_params(**{request.form['param']: request.form['value']})
    return redirect(url_for('.project', projectname=projectname))