示例#1
0
    def posts(self, id=None):

        if id is None and request.is_get():
            posts = models.NewsroomPost.get_posts()
            return self._posts_results(posts)

        elif id and (request.is_get() or request.is_post()):
            post = models.NewsroomPost.get(id)
            if not post:
                return self._404()

            if request.is_get():
                return {"data": self._format_post(post)}

            elif request.is_post():
                if self.request_data:
                    _data = self.request_data

                    # __ACTION__
                    action = _data.get("__ACTION__")
                    if action == "DELETE":
                        post.delete()
                        return {}

        return self._error("Invalid request")
示例#2
0
    def sources(self, id=None):
        # GET
        if request.is_get():
            if id:
                entry = models.NewsroomSource.get(id)
                if not entry:
                    return self._404()
                return self._resp(entry.to_dict())
            else:
                sources = [s.to_dict() for s in models.NewsroomSource.query()]
                return self._resp(sources)

        # UPDATE
        elif request.is_post():
            if self.request_data:
                _data = self.request_data

                # __ACTION__
                action = _data.get("__ACTION__")
                if action:
                    if not id:
                        return self._404()
                    entry = models.NewsroomSource.get(id)
                    if not entry:
                        return self._404()
                    if action == 'DELETE':
                        entry.delete()
                    return {}

                # -->> Update/Create
                name = _data.get("name")
                type_ = _data.get("type")
                url = _data.get("url")

                if not name or not type_ or not url:
                    return self._error(
                        message="Unable to update. Missing name or type or url",
                        code=400)

                data = {
                    "name": name,
                    "type": type_,
                    "url": url,
                    "page_links_selector": _data.get("page_links_selector"),
                    "is_active": _data.get("is_active", True),
                    "limit": _data.get("limit", 30),
                    "fetch_frequency": _data.get("fetch_frequency", 60),
                }
                entry = None
                if id:
                    entry = models.NewsroomSource.get(id)
                    if entry:
                        entry.update(**data)
                else:
                    entry = models.NewsroomSource.new(**data)
                return self._resp(entry.to_dict())

        return self._error("Invalid request")
示例#3
0
    def before_request(self, page, *a, **kw):
        self._page = int(f_request.args.get("page", 1))
        self._per_page = int(f_request.args.get("per_page", 10))
        self.auth_id = None
        self.request_data = None

        # JWT
        try:
            jwt = request.get_auth_bearer()
            auth = ext.crypto.jwt_decode(jwt)
            if auth and auth["id"]:
                self.auth_id = auth["id"]
        except Exception as e:
            pass

        # Request Data
        if request.is_post():
            content_type = f_request.headers.get('Content-Type')
            if 'application/json' in content_type.lower():
                self.request_data = f_request.json["data"]

        # All method POST are required to have auth_id
        if page not in ["token", "register"] and request.is_post():
            if not self.auth_id:
                # Temporary CORS fix for errors
                headers = {
                    'Access-Control-Allow-Origin':
                    '*',
                    'Access-Control-Allow-Methods':
                    'DELETE, GET, POST, PUT',
                    'Access-Control-Allow-Headers':
                    f_request.headers.get('Access-Control-Request-Headers')
                }
                code = 403
                response = {
                    "error": True,
                    "code": code,
                    "message": "Unauthorize. Invalid token"
                }
                return self._403("Unauthorize. Invalid token"), headers
                return response, code, headers
示例#4
0
    def account(self):
        """
        To admin own account
        """
        if self.auth_id:
            user = models.NewsroomAuth.get(self.auth_id)
            if user and user.is_active:
                if request.is_post():
                    if self.request_data:
                        _data = self.request_data

                        # __ACTION__
                        action = _data.get("__ACTION__")

                        # CHANGE_EMAIL
                        if action == "CHANGE_EMAIL":
                            verify_password = _data.get("verif_password")
                            email = _data.get("new_email")
                            if not user.verify_password(verify_password):
                                return self._400("Invalid password")
                            elif not utils.is_email_valid(email):
                                return self._400("Invalid email")
                            elif models.NewsroomAuth.get_by_email(email):
                                return self._400("Email exists already")
                            else:
                                user.change_email(email)

                        # CHANGE_PASSWORD
                        elif action == "CHANGE_PASSWORD":
                            verify_password = _data.get("verif_password")
                            password = _data.get("new_password")
                            conf_password = _data.get("confirm_password")
                            if not user.verify_password(verify_password):
                                return self._400("Invalid password")
                            elif password != conf_password or not utils.is_password_valid(
                                    password):
                                return self._400(
                                    "Invalid password or passwords don't match"
                                )
                            else:
                                user.change_password(password)

                        # CHANGE_NAME
                        elif action == "CHANGE_NAME":
                            name = _data.get("name")
                            if name:
                                user.update(name=name)

                return self._resp(self._format_user(user))

        return self._403()
示例#5
0
    def register(self):
        """
        Register as admin 
        """
        query = models.NewsroomAuth.query()
        has_admin = True if query.count() else False

        if not has_admin and request.is_post():
            if self.request_data:
                _data = self.request_data

                # __ACTION__
                action = _data.get("__ACTION__")

                # CHANGE_EMAIL
                if action == "REGISTER":
                    name = _data.get("name")
                    email = _data.get("email")
                    password = _data.get("password")
                    conf_password = _data.get("confirm_password")
                    if not name:
                        return self._400("Invalid Name")
                    elif not utils.is_email_valid(email):
                        return self._400("Invalid email")
                    elif models.NewsroomAuth.get_by_email(email):
                        return self._400("Email exists already")
                    elif password != conf_password or not utils.is_password_valid(
                            password):
                        return self._400(
                            "Invalid password or passwords don't match")
                    else:
                        user = models.NewsroomAuth.new(email=email,
                                                       password=password,
                                                       name=name)
                        if user:
                            user.update(is_admin=True)
                            return self._resp({"registered": True})

        return self._403()
示例#6
0
    def feeds(self, id=None, list_sources=False, list_posts=False):
        """
        Feeds admin
        """

        # Get
        if request.is_get():
            if id:
                entry = models.NewsroomFeed.get(id)
                if not entry:
                    return self._404()

                # list sources
                if list_sources:
                    return self._resp(entry.list_sources())

                # list posts
                elif list_posts:
                    return self._posts_results(entry.get_posts())

                else:
                    return self._resp(entry.to_dict())
            else:
                # Show all feeds
                feed = [f.to_dict() for f in models.NewsroomFeed.query()]
                return self._resp(feed)

        # UPDATE:POST
        elif request.is_post():
            if self.request_data:
                _data = self.request_data

                # __ACTION__
                action = _data.get("__ACTION__")
                if action:
                    if not id:
                        return self._404()
                    entry = models.NewsroomFeed.get(id)

                    if not entry:
                        return self._404()

                    if action == 'DELETE':
                        entry.delete()

                    elif action == "UPDATE_SOURCES":
                        sources_ids = _data.get("sources_ids")

                        if type(sources_ids) != list:
                            return self._error(
                                message=
                                "Unable to update sources. Invalid sources_ids type",
                                code=400)

                        entry.update_sources(sources_ids)
                        return self._resp(entry.to_dict())
                    return {}

                # -->> Update/Create
                name = _data.get("name")

                if not name:
                    return self._error(
                        message="Unable to update. Missing name", code=400)

                data = {
                    "name": name,
                    "description": _data.get("description"),
                    "is_active": _data.get("is_active", True),
                    "is_nsfw": _data.get("is_nsfw", False),
                }
                entry = None
                if id:
                    entry = models.NewsroomFeed.get(id)
                    if entry:
                        entry.update(**data)
                else:
                    entry = models.NewsroomFeed.new(**data)
                return self._resp(entry.to_dict())

        return self._error("Invalid request")