Exemple #1
0
    def test_with_compensation_1_mo(self):
        user = User.objects.create_user(username="******", password="******")
        premium = Generators.premium_subscription(
            user, "AstroBin Premium (autorenew)")
        ultimate = Generators.premium_subscription(user,
                                                   "AstroBin Ultimate 2020+")

        premium.expires = date.today() + timedelta(days=30)
        premium.unsubscribe()
        premium.save()

        ultimate.expires = date.today()
        ultimate.save()

        self.assertTrue(is_ultimate_2020(user))
        self.assertFalse(is_premium(user))

        DataLossCompensationRequest.objects.create(
            user=user, requested_compensation="1_MO_ULTIMATE")

        reactivate_previous_subscription_when_ultimate_compensation_expires.apply(
        )

        ultimate.expires = date.today() - timedelta(1)
        ultimate.save()

        self.assertFalse(is_ultimate_2020(user))
        self.assertTrue(is_premium(user))
Exemple #2
0
def image_post_delete(sender, instance, **kwargs):
    def decrease_counter(user):
        user.userprofile.premium_counter -= 1
        with transaction.atomic():
            user.userprofile.save(keep_deleted=True)

    ImageIndex().remove_object(instance)

    try:
        if instance.uploaded > datetime.datetime.now() - relativedelta(
                hours=24):
            decrease_counter(instance.user)
        elif is_lite(instance.user):
            usersub = premium_get_valid_usersubscription(instance.user)
            usersub_created = usersub.expires - relativedelta(years=1)
            dt = instance.uploaded.date() - usersub_created
            if dt.days >= 0:
                decrease_counter(instance.user)
        elif is_lite_2020(instance.user) or \
                is_premium(instance.user) or \
                is_premium_2020(instance.user) or \
                is_any_ultimate(instance.user):
            decrease_counter(instance.user)
    except IntegrityError:
        # Possibly the user is being deleted
        pass
Exemple #3
0
def has_access_to_premium_group_features(user):
    # type: (User) -> bool
    return is_lite(user) \
           or is_premium(user) \
           or is_lite_2020(user) \
           or is_premium_2020(user) \
           or is_ultimate_2020(user)
Exemple #4
0
    def test_without_compensation_request(self):
        user = User.objects.create_user(username="******", password="******")
        premium = Generators.premium_subscription(
            user, "AstroBin Premium (autorenew)")
        ultimate = Generators.premium_subscription(user,
                                                   "AstroBin Ultimate 2020+")

        premium.expires = date.today() + timedelta(days=30)
        premium.unsubscribe()

        ultimate.expires = date.today()

        self.assertTrue(is_ultimate_2020(user))
        self.assertFalse(is_premium(user))

        reactivate_previous_subscription_when_ultimate_compensation_expires.apply(
        )

        self.assertTrue(is_ultimate_2020(user))
        self.assertFalse(is_premium(user))
Exemple #5
0
def image_post_save(sender, instance, created, **kwargs):
    profile_saved = False

    groups = instance.user.joined_group_set.filter(autosubmission=True)
    for group in groups:
        if instance.is_wip:
            group.images.remove(instance)
        else:
            group.images.add(instance)

    if created:
        user_scores_index = instance.user.userprofile.get_scores(
        )['user_scores_index']
        if user_scores_index >= 1.00 or is_lite(instance.user) or is_premium(
                instance.user):
            instance.moderated_when = datetime.date.today()
            instance.moderator_decision = 1
            instance.save()

        instance.user.userprofile.premium_counter += 1
        instance.user.userprofile.save()
        profile_saved = True

        if not instance.is_wip:
            followers = [
                x.user for x in ToggleProperty.objects.filter(
                    property_type="follow",
                    content_type=ContentType.objects.get_for_model(User),
                    object_id=instance.user.pk)
            ]

            push_notification(
                followers, 'new_image', {
                    'object_url':
                    settings.BASE_URL + instance.get_absolute_url(),
                    'originator': instance.user.userprofile.get_display_name(),
                })

            if instance.moderator_decision == 1:
                add_story(instance.user,
                          verb='VERB_UPLOADED_IMAGE',
                          action_object=instance)

    if not profile_saved:
        # Trigger update of auto_add fields
        try:
            instance.user.userprofile.save()
        except UserProfile.DoesNotExist:
            pass

    # Trigger real time search index
    instance.user.save()
Exemple #6
0
def show_ads(user):
    if not settings.ADS_ENABLED:
        return False

    if is_donor(user) and not user.userprofile.allow_astronomy_ads:
        return False

    if is_lite(user) or is_premium(user):
        return False

    if (is_premium_2020(user) or is_ultimate_2020(user)) and not user.userprofile.allow_astronomy_ads:
        return False

    return True
Exemple #7
0
def show_ads(user):
    from astrobin_apps_donations.templatetags.astrobin_apps_donations_tags import is_donor
    from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import is_premium, is_lite

    if not settings.ADS_ENABLED:
        return False

    if is_donor(user):
        return False

    if settings.PREMIUM_ENABLED and (is_lite(user) or is_premium(user)):
        return False

    return True
Exemple #8
0
def show_ads(user):
    from astrobin_apps_donations.templatetags.astrobin_apps_donations_tags import is_donor
    from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import is_premium, is_lite

    if not settings.ADS_ENABLED:
        return False

    if is_donor(user):
        return False

    if settings.PREMIUM_ENABLED and (is_lite(user) or is_premium(user)):
        return False

    return True
    def has_object_permission(self, request, view, obj: ImageRevision) -> bool:
        if request.method in permissions.SAFE_METHODS:
            return True

        if is_any_ultimate(request.user) or is_premium(
                request.user) or is_lite(request.user):
            return True

        revision_count: int = obj.image.revisions.count()

        if is_premium_2020(request.user):
            return revision_count < settings.PREMIUM_MAX_REVISIONS_PREMIUM_2020

        if is_lite_2020(request.user):
            return revision_count < settings.PREMIUM_MAX_REVISIONS_LITE_2020

        return revision_count < settings.PREMIUM_MAX_REVISIONS_FREE_2020
Exemple #10
0
def image_post_save(sender, instance, created, **kwargs):
    profile_saved = False

    groups = instance.user.joined_group_set.filter(autosubmission = True)
    for group in groups:
        if instance.is_wip:
            group.images.remove(instance)
        else:
            group.images.add(instance)

    if created:
        user_scores_index = instance.user.userprofile.get_scores()['user_scores_index']
        if user_scores_index >= 1.00 or is_lite(instance.user) or is_premium(instance.user):
            instance.moderated_when = datetime.date.today()
            instance.moderator_decision = 1
            instance.save()

        instance.user.userprofile.premium_counter += 1
        instance.user.userprofile.save()
        profile_saved = True

        if not instance.is_wip:
            followers = [x.user for x in ToggleProperty.objects.filter(
                property_type = "follow",
                content_type = ContentType.objects.get_for_model(User),
                object_id = instance.user.pk)]

            push_notification(followers, 'new_image',
                {
                    'object_url': settings.BASE_URL + instance.get_absolute_url(),
                    'originator': instance.user.userprofile.get_display_name(),
                })

            if instance.moderator_decision == 1:
                add_story(instance.user, verb = 'VERB_UPLOADED_IMAGE', action_object = instance)

    if not profile_saved:
        # Trigger update of auto_add fields
        try:
            instance.user.userprofile.save()
        except UserProfile.DoesNotExist:
            pass

    # Trigger real time search index
    instance.user.save()
Exemple #11
0
def pybb_premoderation(user, post_content):
    # Paying members always approved
    from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import (
        is_lite, is_premium)
    if is_lite(user) or is_premium(user):
        return True

    # Users with sufficient index are always approved
    from django.conf import settings
    index = user.userprofile.get_scores()['user_scores_index']
    if index >= settings.MIN_INDEX_TO_LIKE:
        return True

    # Users that have had 5 messages approved before are always approved
    from pybb.models import Post
    posts = Post.objects.filter(user = user, on_moderation = False)
    if posts.count() >= 5:
        return True

    return False
Exemple #12
0
def pybb_premoderation(user, post_content):
    # Paying members always approved
    from astrobin_apps_premium.templatetags.astrobin_apps_premium_tags import (
        is_lite, is_premium)
    if is_lite(user) or is_premium(user):
        return True

    # Users with sufficient index are always approved
    from django.conf import settings
    index = user.userprofile.get_scores()['user_scores_index']
    if index >= settings.MIN_INDEX_TO_LIKE:
        return True

    # Users that have had 5 messages approved before are always approved
    from pybb.models import Post
    posts = Post.objects.filter(user=user, on_moderation=False)
    if posts.count() >= 5:
        return True

    return False
Exemple #13
0
    def test_submit_1_mo_ultimate(self):
        user = User.objects.create_user('test', '*****@*****.**', 'password')
        premium = Generators.premium_subscription(user, 'AstroBin Premium')
        premium.expires = datetime(2020, 2, 16)
        premium.save()

        self.client.login(username='******', password='******')

        response = self.client.post(
            reverse('astrobin_apps_premium.data_loss_compensation_request'),
            {
                'requested_compensation': '1_MO_ULTIMATE'
            })

        self.assertRedirects(
            response,
            reverse('astrobin_apps_premium.data_loss_compensation_request_success'),
            status_code=302,
            target_status_code=200)

        compensation_request = DataLossCompensationRequest.objects.get(user=user)
        self.assertEquals(compensation_request.requested_compensation, '1_MO_ULTIMATE')

        ultimate = get_object_or_None(UserSubscription, user=user, subscription__name='AstroBin Ultimate 2020+')
        premium = get_object_or_None(UserSubscription, user=user, subscription__name='AstroBin Premium')

        self.assertIsNotNone(ultimate)
        self.assertTrue(ultimate.active)
        self.assertTrue(ultimate.cancelled)
        self.assertTrue(ultimate.expires > date.today() + timedelta(days=29))
        self.assertTrue(ultimate.expires < date.today() + timedelta(days=31))

        self.assertTrue(is_ultimate_2020(user))

        self.assertFalse(premium.active)
        self.assertFalse(is_premium(user))
Exemple #14
0
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True

        return is_any_ultimate(request.user) or is_premium(request.user)