Exemple #1
0
def key_list(request):
    '''
    For:
        GET /keys
        POST /keys
    '''
    api = API(request)
    api.authenticated_or_raise()
    if api.get:
        keys = Key.list_user(
            user=request.user
        )
        return api.respond(
            data=keys,
            paginate=True
        )
    elif api.post:
        key = Key.create_one(
            user=request.user,
            address=api.required('address'),
            type=api.required('type'),
            action=api.required('action'),
            users=api.required('users')
        )
        return api.respond(
            data=key
        )
    else:
        return api.raise_method_not_allowed()
Exemple #2
0
def builds(request, id=None):
    api = API(request)
    if id is None:
        if api.get:
            builds = Build.list()
            return api.respond(
                builds,
                template='builds/builds.html'
            )
        elif api.post:
            build = Build.create(
                user=request.user,
                package=api.required('package'),
                flavour=api.required('flavour'),
                version=api.required('version'),
                commit=api.required('commit'),
                platform=api.optional('platform'),
                url=api.optional('url')
            )
            return api.respond(build)
    else:
        if api.get:
            build = Build.objects.get(
                id=id
            )
            return api.respond(build)

    raise API.MethodNotAllowedError(
        method=request.method
    )
Exemple #3
0
def components(request, id=None, type=None):
    '''
    Standard API endpoint for components
    '''
    api = API(request)
    if api.get:
        filters = {}
        if type:
            type = type[:-1] # Remove the trailing 's' that is in the URL
            filters['type'] = type
        components = Component.list(
            user=request.user,
            address=api.optional('address'),
            published=api.optional('published', True, lambda value: bool(int(value))),
            filters=filters,
            sort=api.optional('sort', 'id')
        )
        return api.respond(
            data=components,
            paginate=25
        )
    elif api.post:
        api.authenticated_or_raise()
        component = Component.create_one(
            user=request.user,
            address=api.required('address'),
            type=api.required('type'),
        )
        return api.respond(
            data=component
        )
    else:
        api.raise_method_not_allowed()
Exemple #4
0
def address_list(request):
    '''
    For:
        GET /addresses
        POST /addresses
    '''
    api = API(request)
    api.authenticated_or_raise()
    if api.get:
        addresses = Address.list(
            user=request.user
        )
        return api.respond(
            data=addresses,
            paginate=100
        )
    elif api.post:
        address = Address.create_one(
            user=request.user,
            address=api.required('address'),
            type=api.required('type'),
            action=api.required('action'),
            users=api.required('users')
        )
        return api.respond(
            data=address
        )
    else:
        return api.raise_method_not_allowed()
Exemple #5
0
def content(request, address):
    '''
    Get or set the content of a stencil
    '''
    api = API(request)
    if api.get:
        component = Component.get(
            id=None,
            user=request.user,
            action=READ,
            address=address
        )
        result = component.content_get(
            format=api.optional('format', 'html'),
        )
    elif api.put:
        component = Component.get(
            id=None,
            user=request.user,
            action=UPDATE,
            address=address
        )
        result = component.content_set(
            user=request.user,
            format=api.required('format'),
            content=api.required('content'),
            revision=api.required('revision')
        )
    return api.respond(result)
Exemple #6
0
def sessions(request, id=None):
    api = API(request)
    if id is None:
        if api.get:
            # Get a list of sessions
            sessions = Session.list(user=request.user, filter={"active": True})
            return api.respond(
                sessions,
                template="sessions/list.html",
                context={
                    "sessions": sessions,
                    "types": SessionType.objects.order_by("rank").all(),
                    "images": SessionImage.objects.all(),
                },
            )
        elif api.post:
            # Launch a session for the user
            session = Session.launch(user=request.user, type_id=api.required("type"), image_name=api.require("image"))
            return api.respond(session)
    else:
        if api.get:
            # Get a session, updating it first
            session = Session.get(id=id, user=request.user)
            if session.active:
                session.update()
            return api.respond(session)

    return api.respond(status=405)
Exemple #7
0
def events(request):
    api = API(request)
    if api.post:
        UserEvent.create(
            user=request.user,
            name=api.required('name'),
            data=api.required('data')
        )
        return api.respond()
    else:
        return api.respond(status=405)
Exemple #8
0
def new(request):
    """
    List session types, create a new session, launch it and redirect the
    user to it's page
    """
    api = API(request)
    if api.get:
        return api.respond(
            template="sessions/new.html",
            context={
                "sessions": Session.list(user=request.user, filter={"active": True}).count(),
                "types": SessionType.objects.order_by("rank").all(),
                "images": SessionImage.objects.all(),
            },
        )
    elif api.post:
        session = Session.launch(user=request.user, type_id=api.required("type"), image_name=api.required("image"))
        return api.respond_created(url=session.url())

    return api.respond_bad()
Exemple #9
0
def received(request, address):
    '''
    Endpoint for the `curator` to ping when a component has
    received an update e.g. from `git push`. A token is used to protect access.
    But this endpoint only accepts the address of the component and then fetches an
    update from the `curator`, so a malicious user can not read or write data anyway.
    '''
    api = API(request)
    # Check access token
    token = api.required('token')
    if token != settings.COMMS_TOKEN:
        return JsonResponse(
            {'error': 'invalid token'},
            status=403
        )
    # Update the component
    component = Component.objects.get(
        address=address
    )
    component.update()
    return api.respond()
Exemple #10
0
def component_fork(request, id):
    '''
    Fork a component
    For:
        POST /components/{id}/fork
    '''
    api = API(request)
    api.authenticated_or_raise()
    component = Component.get(
        id=id,
        user=request.user,
        action=READ,
    )
    if api.post:
        fork = component.fork(
            user=request.user,
            to=api.required('to')
        )
        return api.respond(fork)
    else:
        api.raise_method_not_allowed()