Exemplo n.º 1
0
    def put(self, request):

        payload = dict()

        try:
            payload["username"] = request.user.username

            fields = [
                'visibility', 'autoformat', 'twitter', 'facebook', 'linkedin',
                'slack'
            ]

            form_data = dict()
            for field in fields:
                form_data[field] = str2bool(
                    unicodedata.normalize('NFC', request.data[field]))

            request.user.pref_post_public_visibility = form_data["visibility"]
            request.user.pref_post_autoformat = form_data["autoformat"]

            request.user.pref_post_repost_TW = form_data["twitter"]
            request.user.pref_post_repost_FB = form_data["facebook"]
            request.user.pref_post_repost_LKin = form_data["linkedin"]
            request.user.pref_post_repost_Slack = form_data["slack"]

            request.user.save()
            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "modify personal Information"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 2
0
    def put(self, request, RSSArticle_AssocID=None):

        payload = dict()

        try:
            payload["username"] = request.user.username

            if RSSArticle_AssocID is not None:
                mark_RSSArticle_Assoc_as_read(RSSArticle_AssocID, request.user)

                payload["operation"] = "Mark RSSArticle_Assoc as Read"

            elif 'listing' in request.data:
                RSSArticle_Assoc_listing = unicodedata.normalize('NFC', request.POST['listing']).split(
                    ',')  # We separate each tag and create a list out of it.
                RSSArticle_Assoc_listing.pop()  # We remove the last element which is empty

                for article in RSSArticle_Assoc_listing:
                    mark_RSSArticle_Assoc_as_read(article, request.user)

                payload["operation"] = "Mark RSSArticles Listing as Read"

            else:
                raise Exception("Some Parameters are missing (rssArticleID or listing)")

            payload["success"] = True
            payload["RSSArticle_AssocID"] = RSSArticle_AssocID

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["rssArticleID"] = None

        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 3
0
    def delete(self, request, RSSFeed_SubID=None):

        payload = dict()

        try:
            RSSFeed_SubID = int(unicodedata.normalize('NFC', RSSFeed_SubID))
            if type(RSSFeed_SubID) is not int or RSSFeed_SubID < 1:
                raise Exception("RSSFeed_SubID parameter is not valid")

            payload["username"] = request.user.username

            RSSFeed_Sub_queryset = RSSFeed_Sub.objects.filter(
                id=RSSFeed_SubID, user=request.user)

            if RSSFeed_Sub_queryset.count() == 0:
                raise Exception("RSSFeed_Sub (id: " + RSSFeed_SubID +
                                ") does not exist for the user: "******"success"] = True
            payload["RSSFeed_SubID"] = str(RSSFeed_SubID)

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["RSSFeed_SubID"] = str(RSSFeed_SubID)

        payload["operation"] = "delete RSS Feed"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 4
0
    def get(self, request):

        payload = dict()

        try:
            payload["success"] = True
            payload["username"] = request.user.username

            date_array = get_N_time_period(21)

            ticks = []
            data = []

            for i, d in enumerate(date_array):
                count = request.user.rel_posts.filter(when__year=d.year,
                                                      when__month=d.month,
                                                      when__day=d.day).count()
                data.append([i, count])
                ticks.append([i, d.strftime("%d. %b")])

            payload["data"] = data
            payload["ticks"] = ticks

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "Get User Publication Stats"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 5
0
    def put(self, request):

        payload = dict()

        try:
            for team, channels in request.data.items():
                if channels != "":
                    # Need to test if all channels exists
                    print(
                        "Warning - ModifySlackPreferencesView:Test implementation missing to check if the channel exist"
                    )

                # get object
                slack_integration = request.user.rel_slack_integrations.filter(
                    team_name=team)[0]
                slack_integration.channels = channels
                slack_integration.save()

            payload["username"] = request.user.username
            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            print(str(e))
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "modify slack preferences"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 6
0
    def delete(self, request, social_network=None):

        payload = dict()

        try:
            social_network = auto_format_social_network(social_network)

            request.user.reset_social_network_credentials(
                network=social_network)

            payload["success"] = True
            payload["username"] = request.user.username
            payload["social_network"] = social_network

            if social_network == "twitter":
                payload["auth_url"] = TwitterAPI.get_authorization_url(request)
            elif social_network == "facebook":
                payload["auth_url"] = FacebookAPI.get_authorization_url()
            elif social_network == "linkedin":
                payload["auth_url"] = LinkedInAPI.get_authorization_url()
            elif social_network == "slack":
                payload["auth_url"] = SlackAPI.get_authorization_url()
            else:
                raise Exception("'social_network' (" + social_network +
                                ") is not supported.")

        except Exception as e:
            payload["success"] = False
            payload[
                "error"] = "FC_API.UnLinkUserSocialNetworkView() - An error occured in the process:  " + str(
                    e)

        payload["operation"] = "Unlink User Social_Network"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 7
0
    def post(self, request, filename=''):

        payload = dict()

        try:
            check_passed = check_admin_api(request.user)

            if check_passed != True:
                raise Exception(check_passed)

            if not 'opml_file' in request.data:
                raise Exception("opml_file not received")

            opml_file = request.data["opml_file"].read().decode(
                'iso-8859-1').encode('ascii', 'ignore').replace("  ", " ")

            payload["feed_errors"] = request.user.load_opml(opml_file)

            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "OPML Import"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 8
0
    def delete(self, request, post_id=None):

        payload = dict()

        try:
            check_passed = check_admin_api(request.user)

            post_id = int(unicodedata.normalize('NFC', post_id))
            if type(post_id) is not int or post_id < 1:
                raise Exception("post_id parameter is not valid")

            if not check_passed:
                raise Exception(check_passed)

            payload["username"] = request.user.username

            post = Post.objects.filter(id=post_id, user=request.user)
            if post.count() == 0:
                raise Exception("Post does not exist")

            post.delete()
            payload["success"] = True
            payload["post_id"] = post_id

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["post_id"] = None

        payload["operation"] = "delete article"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 9
0
    def get(self, request):
        try:
            return HttpResponse(request.user.export_opml(), content_type='text/xml')

        except Exception as e:
            payload = dict()
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["operation"] = "Export OPML"
            payload["timestamp"] = get_timestamp()
            return Response(payload)
Exemplo n.º 10
0
    def post(self, request):

        payload = dict()

        try:
            rssfeed = request.POST.get('rssfeed')

            if rssfeed == None:
                raise Exception("Link for the RSS Feed not provided")

            else:
                payload["rssfeed"] = rssfeed

                rssfeed_queryset = RSSFeed.objects.filter(link=rssfeed)

                if rssfeed_queryset.exists():
                    if RSSFeed.objects.filter(
                            link=rssfeed,
                            rel_sub_feed_assoc__user=request.user):
                        payload["valid"] = False
                        payload[
                            "error"] = "You already subscribed to this RSS Feed"
                    else:
                        payload["valid"] = True
                        payload["title"] = rssfeed_queryset[0].title

                else:
                    rss_data = feedparser.parse(rssfeed)

                    if validate_feed(rss_data):
                        payload["valid"] = True
                        payload["title"] = clean_html(rss_data.feed.title)

                    else:
                        payload["valid"] = False
                        payload[
                            "error"] = "The RSS Feed is not valid. Please check your link"

                payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "RSS Feed Validation"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 11
0
    def get(self, request):

        payload = dict()

        try:
            payload["preferences"] = dict()

            payload["preferences"][
                "visibility"] = request.user.pref_post_public_visibility
            payload["preferences"][
                "autoformat"] = request.user.pref_post_autoformat

            if request.user.is_twitter_enabled():
                payload["preferences"][
                    "twitter"] = request.user.pref_post_repost_TW
            else:
                payload["preferences"]["twitter"] = "disabled"

            if request.user.is_facebook_enabled():
                payload["preferences"][
                    "facebook"] = request.user.pref_post_repost_FB
            else:
                payload["preferences"]["facebook"] = "disabled"

            if request.user.is_linkedin_enabled():
                payload["preferences"][
                    "linkedin"] = request.user.pref_post_repost_LKin
            else:
                payload["preferences"]["linkedin"] = "disabled"

            if request.user.is_slack_enabled():
                payload["preferences"][
                    "slack"] = request.user.pref_post_repost_Slack
            else:
                payload["preferences"]["slack"] = "disabled"

            payload["success"] = True

        except Exception as e:
            payload["error"] = "UserPreferencesView - GET: " + str(e)
            payload["success"] = False

        payload["operation"] = "Get personal preferences"
        payload["timestamp"] = get_timestamp()

        return Response(payload)
Exemplo n.º 12
0
    def get(self, request):

        payload = dict()

        try:

            payload["success"] = True
            payload["username"] = request.user.username

            first_subscribers_record_date = datetime.datetime(2017, 3,
                                                              29).date()

            if (first_subscribers_record_date >
                    request.user.date_joined.replace(tzinfo=None).date()):
                date_array = get_N_time_period(
                    21, 14, max_date=first_subscribers_record_date)
            else:
                date_array = get_N_time_period(
                    21,
                    14,
                    max_date=request.user.date_joined.replace(
                        tzinfo=None).date())

            today = datetime.datetime.now().date()

            ticks = []
            data = []

            for i, d in enumerate(date_array):
                delta = (today - d.date()).days
                data.append(
                    [i, request.user.get_user_subscribers_count(delta)])
                ticks.append([i, d.strftime("%d. %b")])

            payload["data"] = data
            payload["ticks"] = ticks

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "Get User Subscriber Stats"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 13
0
    def get(self, request):

        payload = dict()

        try:
            tags = Tag.objects.all().order_by('name')

            payload["tags"] = [tag.name for tag in tags]

            payload["success"] = True
            payload["username"] = request.user.username

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "Get All Tags"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 14
0
    def get(self, request, social_network=None):

        payload = dict()

        try:
            social_network = auto_format_social_network(social_network)

            payload["success"] = True
            payload["username"] = request.user.username
            payload["social_network"] = social_network
            payload["status"] = request.user.is_social_network_activated(network=social_network)

        except Exception as e:
            payload["success"] = False
            payload["error"] = "FC_API.UserSocialNetworkStatusView() - An error occured in the process: " + str(e)

        payload["operation"] = "User Social_Network Status"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 15
0
    def post(self, request):

        payload = dict()

        try:
            title = unicodedata.normalize('NFC', request.POST['rssfeed_title'])
            link = unicodedata.normalize('NFC', request.POST['rssfeed_link'])

            rssfeed_queryset = RSSFeed.objects.filter(link=link)

            if not rssfeed_queryset.exists():
                tmp_rssfeed = RSSFeed.objects.create(title=title, link=link)
                tasks.check_rss_feed.delay(rss_id=tmp_rssfeed.id)

                old_articles = None

            else:
                tmp_rssfeed = rssfeed_queryset[0]
                old_articles = RSSArticle_Assoc.objects.filter(
                    article__rssfeed=tmp_rssfeed)

            tmp_sub = RSSFeed_Sub.objects.create(user=request.user,
                                                 feed=tmp_rssfeed,
                                                 title=title)

            if ((old_articles is not None) and (old_articles.count() > 0)):
                for article in old_articles:
                    article.subscription = tmp_sub
                    article.save()

            payload["RSSFeed_Sub_ID"] = str(tmp_sub.id)
            payload["RSSFeedID"] = str(tmp_rssfeed.id)
            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "subscribe to RSS Feed"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 16
0
    def put(self, request, RSSFeed_SubID=None):

        payload = dict()

        try:
            RSSFeed_SubID = int(unicodedata.normalize('NFC', RSSFeed_SubID))
            if type(RSSFeed_SubID) is not int or RSSFeed_SubID < 1:
                raise Exception("RSSFeed_SubID parameter is not valid")

            payload["username"] = request.user.username

            RSSFeed_Sub_queryset = RSSFeed_Sub.objects.filter(
                id=RSSFeed_SubID, user=request.user)

            if RSSFeed_Sub_queryset.count() == 0:
                raise Exception("RSSFeed_Sub (id: " + RSSFeed_SubID +
                                ") does not exist for the user: "******"":
                raise Exception("Title and/or Link is/are missing")

            RSSFeed_Sub_obj.title = title

            RSSFeed_Sub_obj.save()

            payload["success"] = True
            payload["RSSFeed_SubID"] = str(RSSFeed_SubID)

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["RSSFeed_SubID"] = str(RSSFeed_SubID)

        payload["operation"] = "modify RSSFeed"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 17
0
    def put(self, request):

        payload = dict()

        try:
            payload["username"] = request.user.username

            form_fields = [
                'old_password',
                'new_password_1',
                'new_password_2',
            ]

            form_data = dict()

            for field in form_fields:
                form_data[field] = unicodedata.normalize(
                    'NFC', request.data[field])

            if (not request.user.check_password(form_data['old_password'])):
                raise Exception("Old Password is incorrect")

            if (form_data['new_password_1'] != form_data['new_password_2']):
                raise Exception(
                    "Your have input two different passwords, please retry.")

            request.user.set_password(form_data['new_password_1'])

            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["post_id"] = None

        payload["operation"] = "modify password"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 18
0
    def post(self, request):

        payload = dict()

        try:
            username = request.POST.get('username')
            payload["username"] = username

            if username == None:
                raise Exception("Username not provided")

            else:
                username = username.lower()  # Make it Lowercase
                payload["available"] = not FeedUser.objects.filter(username=username).exists()
                payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "Username Validation"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 19
0
    def put(self, request):

        payload = dict()

        try:
            payload["username"] = request.user.username

            url_validator = URLValidator()

            fields = [
                'firstname',
                'lastname',
                'email',
                'birthdate',
                'country',
                'gender',
                'feedtitle',  # not Checked
                'description',  # not Checked
                'job',  # not Checked
                'company_name',  # not Checked
                'company_website',
                "newsletter_subscription",  # Not Saved yet !
            ]

            form_data = dict()
            for field in fields:
                form_data[field] = unicodedata.normalize(
                    'NFC', request.data[field])

            ###############################################################################
            #                               DATA VALIDATION                               #
            ###############################################################################

            if form_data["firstname"] != "":
                FeedUser.objects._validate_firstname(form_data["firstname"])

            if form_data["lastname"] != "":
                FeedUser.objects._validate_lastname(form_data["lastname"])

            if form_data["gender"] != "":
                FeedUser.objects._validate_gender(form_data["gender"])

            FeedUser.objects._validate_email(form_data["email"])
            url_validator(form_data["company_website"])

            ###############################################################################
            #               DATA VALIDATION & Set Attributes - Special Attr               #
            ###############################################################################

            if form_data["birthdate"] != "":
                FeedUser.objects._validate_birthdate(form_data["birthdate"])
                request.user.birthdate = datetime.datetime.strptime(
                    form_data["birthdate"], '%d/%m/%Y').date()
            else:
                request.user.birthdate = None

            if form_data["country"] != "":
                FeedUser.objects._validate_country(form_data["country"])
                request.user.country = Country.objects.get(
                    name=form_data["country"])
            else:
                request.user.country = None

            ###############################################################################
            #                              SAVING ATTRIBUTES                              #
            ###############################################################################

            request.user.first_name = form_data["firstname"]
            request.user.last_name = form_data["lastname"]
            request.user.gender = form_data["gender"]
            request.user.email = form_data["email"]
            request.user.rss_feed_title = form_data["feedtitle"]
            request.user.description = form_data["description"]
            request.user.job = form_data["job"]
            request.user.company_name = form_data["company_name"]
            request.user.company_website = form_data["company_website"]
            request.user.pref_newsletter_subscription = str2bool(
                form_data["newsletter_subscription"])

            request.user.save()

            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["post_id"] = None

        payload["operation"] = "modify personal Information"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 20
0
    def put(self, request):

        payload = dict()

        try:
            payload["username"] = request.user.username

            url_validator = URLValidator()

            social_networks = [
                'dribbble', 'facebook', 'flickr', 'gplus', 'instagram',
                'linkedin', 'pinterest', 'stumble', 'twitter', 'vimeo',
                'youtube', 'docker', 'git', 'kaggle', 'stackoverflow',
                'coursera', 'googlescholar', 'orcid', 'researchgate',
                'mendeley', 'blog', 'website'
            ]

            social_data = dict()
            for social in social_networks:
                url = unicodedata.normalize('NFC', request.data[social])
                if url != '':
                    try:
                        url_validator(
                            url
                        )  # Raise a ValidationError if the URL is invalid.
                    except:
                        raise Exception("URL Not Valid: " + social)
                social_data[social] = url

            # Main Social Networks
            request.user.social_dribbble = social_data['dribbble']
            request.user.social_facebook = social_data['facebook']
            request.user.social_flickr = social_data['flickr']
            request.user.social_gplus = social_data['gplus']
            request.user.social_instagram = social_data['instagram']
            request.user.social_linkedin = social_data['linkedin']
            request.user.social_pinterest = social_data['pinterest']
            request.user.social_stumble = social_data['stumble']
            request.user.social_twitter = social_data['twitter']
            request.user.social_vimeo = social_data['vimeo']
            request.user.social_youtube = social_data['youtube']

            # Computer Science Networks
            request.user.social_docker = social_data['docker']
            request.user.social_git = social_data['git']
            request.user.social_kaggle = social_data['kaggle']
            request.user.social_stackoverflow = social_data['stackoverflow']

            # MooC Profiles
            request.user.social_coursera = social_data['coursera']

            # Research Social Networks
            request.user.social_google_scholar = social_data['googlescholar']
            request.user.social_orcid = social_data['orcid']
            request.user.social_researchgate = social_data['researchgate']
            request.user.social_mendeley = social_data['mendeley']

            # Personal Pages
            request.user.social_blog = social_data['blog']
            request.user.social_personalwebsite = social_data['website']

            request.user.save()
            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "modify social networks"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 21
0
    def get(self, request):

        payload = dict()

        try:
            user = request.user

            if user.is_superuser and 'posting_user' in request.GET:
                tmp_username = unicodedata.normalize(
                    'NFC', request.GET['posting_user'])

                try:
                    user = FeedUser.objects.get(username=tmp_username)

                except ObjectDoesNotExist:
                    raise Exception("The Provided posting_user ('" +
                                    tmp_username + "') does not exist")

            article_link = unicodedata.normalize('NFC', request.GET['link'])

            if article_link[:7] == "http://":
                article_link_base = article_link[7:]
            elif article_link[:8] == "https://":
                article_link_base = article_link[8:]
            elif article_link[:2] == "//":
                article_link_base = article_link[2:]
            else:
                raise Exception(
                    "The link provided is invalid (http/https missing): " +
                    article_link)

            if article_link_base[-1:] == "/":
                article_link_base = article_link_base[:-1]

            link_http_slash = "http://" + article_link_base + "/"
            link_https_slash = "https://" + article_link_base + "/"
            link_http_noslash = "http://" + article_link_base
            link_https_noslash = "https://" + article_link_base

            links = [
                link_http_slash, link_https_slash, link_http_noslash,
                link_https_noslash
            ]

            payload["exists"] = False
            payload["username"] = user.username

            for art_link in links:
                query_set = Post.objects.filter(link=art_link, user=user)
                if query_set.exists():
                    payload["exists"] = True
                    payload["post_data"] = {
                        'id': query_set[0].id,
                        'title': query_set[0].title,
                        'link': query_set[0].link
                    }
                    break

            payload["success"] = True

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "Get Article Exists"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 22
0
    def put(self, request, post_id=None):

        payload = dict()

        try:
            check_passed = check_admin_api(request.user)

            post_id = int(post_id)

            if type(post_id) is not int or post_id < 1:
                raise Exception("post_id parameter is not valid")

            if not check_passed:
                raise Exception(check_passed)

            payload["username"] = request.user.username

            title = unicodedata.normalize('NFC', request.data['title'])
            link = unicodedata.normalize('NFC', request.data['link'])

            if title == "" or link == "":
                raise Exception("Title and/or Link is/are missing")

            tags = unicodedata.normalize('NFC', request.data['tags']).split(
                ',')  # We separate each tag and create a list out of it.

            activated_bool = str2bool(
                unicodedata.normalize('NFC', request.data['activated']))

            twitter_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['twitter']))
            facebook_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['facebook']))
            linkedin_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['linkedin']))
            slack_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['slack']))

            if str2bool(
                    unicodedata.normalize('NFC', request.data['autoformat'])):
                title = format_title(title)

            tmp_post = Post.objects.get(id=post_id, user=request.user)

            tmp_post.title = title
            tmp_post.link = link
            tmp_post.activeLink = activated_bool
            tmp_post.tags.clear()

            for i, tag in enumerate(tags):

                tag = tag.replace(" ", "")
                tags[i] = tag

                if tag != "":
                    tmp_obj, created_bool = Tag.objects.get_or_create(name=tag)
                    tmp_post.tags.add(tmp_obj)

                else:
                    tags.pop(i)

            tmp_post.save()

            if twitter_bool and request.user.is_social_network_enabled(
                    network="twitter"):
                tasks.publish_on_twitter.delay(id_article=tmp_post.id)

            if facebook_bool and request.user.is_social_network_enabled(
                    network="facebook"):
                tasks.publish_on_facebook.delay(id_article=tmp_post.id)

            if linkedin_bool and request.user.is_social_network_enabled(
                    network="linkedin"):
                tasks.publish_on_linkedin.delay(id_article=tmp_post.id)

            if slack_bool and request.user.is_social_network_enabled(
                    network="slack"):
                tasks.publish_on_slack.delay(id_article=tmp_post.id)

            payload["success"] = True
            payload["post_id"] = str(post_id)

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)
            payload["post_id"] = None

        payload["operation"] = "modify article"
        payload["timestamp"] = get_timestamp()
        return Response(payload)
Exemplo n.º 23
0
    def post(self, request, apikey=""):

        payload = dict()

        try:
            if apikey == "":
                check_passed = check_admin_api(request.user)

                if not check_passed:
                    raise Exception(check_passed)

                user = request.user

            else:
                try:
                    user = FeedUser.objects.filter(apikey=apikey)[:1][0]
                except IndexError:
                    raise Exception("The apikey Used is not Valid")

                if user.is_superuser and 'posting_user' in request.POST:
                    tmp_username = unicodedata.normalize(
                        'NFC', request.POST['posting_user'])
                    try:
                        user = FeedUser.objects.get(username=tmp_username)
                    except ObjectDoesNotExist:
                        raise Exception(
                            "The Provided posting_user `%s` does not exist" %
                            tmp_username)

            payload["username"] = user.username

            if 'article_id' in request.POST:
                RSSArticle_Assoc_id = unicodedata.normalize(
                    'NFC', request.POST['article_id'])
                RSSArticle_Assoc_QuerySet = RSSArticle_Assoc.objects.filter(
                    id=RSSArticle_Assoc_id, user=user)

                if not RSSArticle_Assoc_QuerySet.exists():
                    _err = "The given RSSArticle (id: %d) with the given username `%s`doesn't exist." % (
                        RSSArticle_Assoc_id, user.username)
                    raise Exception(_err)

                RSSArticle_Assoc_obj = RSSArticle_Assoc_QuerySet[0]

            else:
                RSSArticle_Assoc_id = -1

            title = unicodedata.normalize('NFC', request.POST['title'])
            link = unicodedata.normalize('NFC', request.POST['link'])

            # We separate each tag and create a list out of it.
            tags = unicodedata.normalize('NFC',
                                         request.POST['tags']).split(',')

            activated_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['activated']))

            twitter_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['twitter']))
            facebook_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['facebook']))
            linkedin_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['linkedin']))
            slack_bool = str2bool(
                unicodedata.normalize('NFC', request.POST['slack']))

            if str2bool(
                    unicodedata.normalize('NFC', request.POST['autoformat'])):
                title = format_title(title)

            if title == "" or link == "":
                raise Exception("Title and/or Link is/are missing")

            tmp_post = Post.objects.create(title=title,
                                           link=link,
                                           clicks=0,
                                           user=user,
                                           activeLink=activated_bool)

            for i, tag in enumerate(tags):

                tag = tag.replace(" ", "")
                tags[i] = tag

                if tag != "":
                    tmp_obj, created_bool = Tag.objects.get_or_create(name=tag)
                    tmp_post.tags.add(tmp_obj)

                else:
                    tags.pop(i)

            tmp_post.save()

            if RSSArticle_Assoc_id != -1:
                RSSArticle_Assoc_obj.reposted = True
                RSSArticle_Assoc_obj.marked_read = True
                RSSArticle_Assoc_obj.save()

            if twitter_bool and user.is_social_network_enabled(
                    network="twitter"):
                tasks.publish_on_twitter.delay(id_article=tmp_post.id)

            if facebook_bool and user.is_social_network_enabled(
                    network="facebook"):
                tasks.publish_on_facebook.delay(id_article=tmp_post.id)

            if linkedin_bool and user.is_social_network_enabled(
                    network="linkedin"):
                tasks.publish_on_linkedin.delay(id_article=tmp_post.id)

            if slack_bool and user.is_social_network_enabled(network="slack"):
                tasks.publish_on_slack.delay(id_article=tmp_post.id)

            payload["success"] = True
            payload["post_id"] = str(tmp_post.id)

        except Exception as e:
            payload["success"] = False
            payload["error"] = "An error occured in the process: " + str(e)

        payload["operation"] = "submit article"
        payload["timestamp"] = get_timestamp()
        return Response(payload)