Exemple #1
0
def delete_application(request, application_id):
    application = ApplicationModel.get_by_id(long(application_id))
    if application is None:
        raise Http404
    if request.user.permission != UserPermission.root and\
                    request.user.key().id() not in application.root_ids:
        raise Http403
    application.delete()
    return HttpResponse()
Exemple #2
0
def get_application(request, application_id):
    application = ApplicationModel.get_by_id(long(application_id))
    if application is None:
        raise Http404
    if request.user.permission != UserPermission.root and\
                    request.user.key().id() not in application.member_ids:
        raise Http403
    result = application.dict()
    result['members'] = [x.dict() for x in UserModel.get_by_id(application.member_ids) if not x is None]
    return JsonResponse(result)
Exemple #3
0
def add_application_member(request, application_id):
    form = UserForm(name='invite', **json.loads(request.body))
    if not form.validate():
        raise Http400
    application = ApplicationModel.get_by_id(long(application_id))
    if application is None:
        raise Http404
    if request.user.permission != UserPermission.root and\
                    request.user.key().id() not in application.root_ids:
        raise Http403
    user = UserModel.invite_user(request, form.email.data)
    application.member_ids.append(user.key().id())
    application.put()
    return JsonResponse(user)
Exemple #4
0
def update_application(request, application_id):
    form = ApplicationForm(**json.loads(request.body))
    # if form.app_key.data is True -> update app key.
    if not form.app_key.data and not form.validate():
        raise Http400

    application = ApplicationModel.get_by_id(long(application_id))
    if application is None:
        raise Http404
    if request.user.permission != UserPermission.root and\
                    request.user.key().id() not in application.root_ids:
        raise Http403
    if form.app_key.data:
        application.app_key = str(uuid.uuid1())
    else:
        application.title = form.title.data
        application.description = form.description.data
        application.member_ids = form.member_ids.data
        application.root_ids = form.root_ids.data
        application.email_notification = form.email_notification.data
    application.put()
    return JsonResponse(application)
Exemple #5
0
def get_logs(request, application_id):
    application_id = long(application_id)
    form = SearchForm(**request.GET.dict())

    if application_id == 0:
        # fetch the first application
        if request.user.permission == UserPermission.root:
            applications = ApplicationModel.all().order("title").fetch(1)
        else:
            applications = ApplicationModel.gql(
                "where member_ids in :1 order by title", [request.user.key().id()]
            ).fetch(1)
        if len(applications):
            application = applications[0]
        else:
            # no applications
            return JsonResponse(PageList(0, 20, 0, []))
    else:
        application = ApplicationModel.get_by_id(application_id)
        if application is None:
            raise Http404
        if request.user.permission != UserPermission.root and request.user.key().id() not in application.member_ids:
            # no permission for this application
            raise Http403

    if form.keyword.data:
        source = [x for x in form.keyword.data.split()]
        plus = [x for x in source if not x.startswith("-")]
        minus = [x[1:] for x in source if x.startswith("-")]

        query_string = ""
        if len(plus) > 0:
            keyword = " ".join(plus)
            query_string += "(users:{1}) OR (title:{1}) OR (document:{1}) OR (user_agent:{1}) OR (ip:{1})".replace(
                "{1}", keyword
            )
        if len(minus) > 0:
            keyword = " ".join(minus)
            query_string += "NOT ((users:{1}) OR (title:{1}) OR (document:{1}) OR (user_agent:{1}) OR (ip:{1}))".replace(
                "{1}", keyword
            )
        update_time_desc = search.SortExpression(
            expression="update_time", direction=search.SortExpression.DESCENDING, default_value=0
        )
        options = search.QueryOptions(
            offset=utils.default_page_size * form.index.data,
            limit=utils.default_page_size,
            sort_options=search.SortOptions(expressions=[update_time_desc], limit=1000),
            returned_fields=["doc_id"],
        )
        query = search.Query(query_string=query_string, options=options)
        search_result = search.Index(namespace="Logs", name=str(application.key().id())).search(query)
        total = search_result.number_found
        logs = LogModel.get_by_id([long(x.doc_id) for x in search_result])
        logs = [x for x in logs if not x is None]
    else:
        query = LogModel.all().filter("application =", application.key()).order("-update_time")
        total = query.count()
        logs = query.fetch(utils.default_page_size, form.index.data * utils.default_page_size)
    result = PageList(form.index.data, utils.default_page_size, total, logs).dict()
    result["application"] = {"id": application.key().id(), "title": application.title}
    return JsonResponse(result)