Exemple #1
0
    def get(self):
        """
        Paginated access to users
        """
        parser = reqparse.RequestParser()
        parser.add_argument("me",       type=bool, default=None)
        parser.add_argument("signups",  type=bool, default=None)
        parser.add_argument("page",     type=int, required=False, default=1)
        parser.add_argument("per_page", type=int, required=False, default=10)
        args = parser.parse_args()

        # Let unauthenticated users see if they can register an account
        if args.signups:
            if "PERMIT_NEW_ACCOUNTS" in app.config:
                return app.config["PERMIT_NEW_ACCOUNTS"]
            return None
        
        user = auth(session, required=True)

        if args.me:
            s = Session.query.filter(Session.session_id == session['session']).first()
            response            = user.jsonify()
            response['session'] = s.jsonify()
            return response

        if not user.can("see_all"):
            return {}, 403

        query = User.query.order_by(desc(User.created)).paginate(args.page, args.per_page)
        return make_response(request.url, query, revisions=True)
Exemple #2
0
    def get(self, username):
        user = auth(session, required=True)

        parser = reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args = parser.parse_args()  

        if user.username != username and not user.can("see_all"):
            return {}, 403

        if user.username != username:
            user = User.query.filter(User.username == username).first()
            if not user:
                return {}, 404

        query = Friend.query.filter(Friend.user == user)\
            .order_by(desc(Friend.created)).paginate(args.page, args.per_page)

        response = make_response(request.url, query)

        # Check the remote side of each request
        for i, friend_request in enumerate(response['data']):
            address = friend_request['address']
            network, node_id, uid = address.split('/')
            router = app.routes.get(network, None)
            if router != None:
                message_body = {"add": {"from": user.uid, "to": address}}
                remote_state = router.protocol.rpc_friend(message_body)
                if remote_state[0]:
                    response['data'][i]['status'] = remote_state[0]['status']

        return response
Exemple #3
0
    def get(self, query):
        user   = auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args   = parser.parse_args()

        revisions = [_ for _ in Revision.query.all() if query in _.url and \
                    (_.user == user or _.public)]
        pages     = Pagination(revisions, args.page, args.per_page)
        response  = make_response(request.url, pages)
        return response
Exemple #4
0
    def get(self):
        """
        A paginated resource for Domains
        """
        auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page", type=int, required=False, default=1)
        parser.add_argument("per_page", type=int, required=False, default=10)
        args = parser.parse_args()

        query = Domain.query.paginate(args.page, args.per_page)

        return make_response(request.url, query)
Exemple #5
0
    def get(self):
        user = auth(session, required=True)

        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args = parser.parse_args()  

        if user.can("see_all"):
            query = Revision.query.order_by(desc(Revision.created)).paginate(args.page, args.per_page)
        else:
            query = Revision.query.filter(or_(Revision.public == True, Revision.user == user))\
                .order_by(desc(Revision.created)).paginate(args.page, args.per_page)

        return make_response(request.url, query)
Exemple #6
0
    def get(self, domain):
        """

        """
        auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page", type=int, help="", required=False, default=1)
        parser.add_argument("per_page", type=int, help="", required=False, default=10)
        args = parser.parse_args()

        domain = Domain.query.filter(Domain.name == domain).first()
        if not domain:
            return {}, 404

        pages = Pagination(domain.resources, args.page, args.per_page)
        return make_response(request.url, pages)
Exemple #7
0
    def get(self):
        """
        Implements /v1/privs
        """
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, required=False, default=1)
        parser.add_argument("per_page", type=int, required=False, default=10)
        args = parser.parse_args()

        user = auth(session, required=True)

        if not user.can("see_all"):
            return {}, 403

        query = Priv.query.order_by(desc(Priv.created)).paginate(args.page, args.per_page)
        return make_response(request.url, query)
Exemple #8
0
    def get(self, network):
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args = parser.parse_args()

        routes = app.routes.get(network, None)
        if not routes:
            return {}, 404

        peers    = [peer for peer in routes]
        pages    = Pagination(peers, args.page, args.per_page)
        response = routes.jsonify()

        response.update(make_response(request.url, pages))

        return response
Exemple #9
0
    def get(self, username):
        user = auth(session, required=True)

        if user.username != username and not user.can("see_all"):
            return {}, 403

        parser = reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=20)
        args = parser.parse_args()  

        user = User.query.filter(User.username == username).first()
        if user == None:
            return 404

        query = Revision.query.filter(Revision.user == user)\
            .order_by(desc(Revision.created)).paginate(args.page, args.per_page)
        return make_response(request.url, query)
Exemple #10
0
    def get(self):
        auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        parser.add_argument("network",  type=str, default=None)
        args = parser.parse_args()

        if not args.network:
            routes = app.routes._default
        else:
            routes = app.routes.get(args.network, None)
            if not routes:
                return {}, 404
 
        peers = [peer for peer in routes]
        pages = Pagination(peers, args.page, args.per_page)
        return make_response(request.url, pages)
Exemple #11
0
    def get(self):
        auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, required=False, default=1)
        parser.add_argument("per_page", type=int, required=False, default=10)
        args = parser.parse_args()

        routes      = app.routes.values()
        pages       = Pagination(routes, args.page, args.per_page)
        response    = make_response(request.url, pages)

        # Calculate the number of unique nodes we know of
        peers = []
        for router in routes:
            peers.extend([peer.threeple for peer in router])
        peers = set(peers)
        response['peers'] = len(peers)

        return response
Exemple #12
0
    def get(self, network):
        auth(session, required=True)
        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args = parser.parse_args()

        routes = app.routes.get(network, None)
        if not routes:
            return {}, 404
 
        peers       = [peer for peer in routes]
        pages       = Pagination(peers, args.page, args.per_page)
        pages.items = [p.jsonify(string_id=True) for p in pages.items]

        # Would like to make the following more elegant.
#        for i, j in enumerate(pages.items):
#            pages.items[i]['node'] = (str(j['node'][0]), j['node'][1], j['node'][2])

        return make_response(request.url, pages, jsonify=False)
Exemple #13
0
    def get(self):
        """
        Return all DHT downloads across all networks.
        """
        user = auth(session, required=True)

        parser = restful.reqparse.RequestParser()
        parser.add_argument("page",     type=int, default=1)
        parser.add_argument("per_page", type=int, default=10)
        args = parser.parse_args()  

        if not user.can("see_all") and not user.can("review_downloads"):
            return {}, 403

        response = []
        for routes in app.routes.values():
            r = {'network': routes.network}
            r['downloads'] = [{f: routes.protocol.downloads[f]} for \
                f in routes.protocol.downloads]
            response.append(r)
        
        pages = Pagination(response, args.page, args.per_page)
        return make_response(request.url, pages, jsonify=False)