From f381d1d1af233c51e6046c0d283b61035bf31eaa Mon Sep 17 00:00:00 2001
From: some weird guy <120821766+Mistake35@users.noreply.github.com>
Date: Tue, 29 Aug 2023 11:56:34 -0700
Subject: [PATCH] deez
---
closedverse_main/admin.py | 5 +-
closedverse_main/context_processors.py | 11 ++--
closedverse_main/middleware.py | 1 -
closedverse_main/models.py | 53 ++++++++++++-------
.../elements/community_post.html | 2 +-
.../templates/closedverse_main/post-view.html | 2 +-
.../templates/closedverse_main/user_view.html | 4 +-
closedverse_main/templatetags/__init__.py | 1 -
.../templatetags/closedverse_tags.py | 2 -
closedverse_main/urls.py | 8 +--
closedverse_main/util.py | 8 +--
closedverse_main/views.py | 16 ++----
static/blueness.css | 2 +-
static/closedverse.js | 50 ++++++++++-------
14 files changed, 88 insertions(+), 77 deletions(-)
diff --git a/closedverse_main/admin.py b/closedverse_main/admin.py
index 4d426d0..ab8b38a 100644
--- a/closedverse_main/admin.py
+++ b/closedverse_main/admin.py
@@ -1,9 +1,8 @@
from django.contrib import admin
#from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import Group
-from django.forms import ModelForm, PasswordInput
-from closedverse_main import models
-from closedverse import settings
+#from django.forms import ModelForm, PasswordInput
+from django.conf import settings
from . import models
diff --git a/closedverse_main/context_processors.py b/closedverse_main/context_processors.py
index f3ec51f..bba6467 100644
--- a/closedverse_main/context_processors.py
+++ b/closedverse_main/context_processors.py
@@ -1,14 +1,13 @@
-try:
- from closedverse.settings import brand_name
-except ImportError:
+from closedverse import settings
+if not hasattr(settings, 'brand_name'):
# use default app name by default as brand name
from closedverse_main import apps
brand_name = apps.ClosedverseMainConfig.verbose_name
+else:
+ brand_name = settings.brand_name
-# for brand logo
-from closedverse.settings import STATIC_URL
# variable for this and name are here for imports
-brand_logo = STATIC_URL + 'img/menu-logo.svg'
+brand_logo = settings.STATIC_URL + 'img/menu-logo.svg'
# the name of the function is merely what's imported into settings.py
def brand_name_universal(request):
diff --git a/closedverse_main/middleware.py b/closedverse_main/middleware.py
index 02c7dd5..82fad41 100644
--- a/closedverse_main/middleware.py
+++ b/closedverse_main/middleware.py
@@ -1,7 +1,6 @@
from django.http import HttpResponseForbidden
from closedverse import settings
from django.shortcuts import redirect
-from django.contrib.auth import logout
from .models import Ban
from django.utils import timezone
from re import compile
diff --git a/closedverse_main/models.py b/closedverse_main/models.py
index a57c9c9..61b3e42 100644
--- a/closedverse_main/models.py
+++ b/closedverse_main/models.py
@@ -2,13 +2,13 @@ from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.base_user import AbstractBaseUser
from django.contrib.auth.models import BaseUserManager
-from django.db.models import Q, QuerySet, Max, F, Count, Case, When, Exists, OuterRef, Subquery
+from django.db.models import Q, Max, F, Count, Exists, OuterRef, Subquery #, QuerySet, Case, When,
from django.utils import timezone
+from django.http import Http404
from django.core.validators import RegexValidator, URLValidator
from django.core.exceptions import ValidationError
from datetime import timedelta, time
#from passlib.hash import bcrypt_sha256
-# you may want to import django.conf.settings instead (then change checks for DEFAULT_FROM_EMAIL)
from closedverse import settings
from closedverse_main.context_processors import brand_name, brand_logo
from . import util
@@ -128,7 +128,7 @@ class Role(models.Model):
organization = models.CharField(max_length=255, blank=True, null=True, help_text='Text that shows above one\'s username')
def __str__(self):
- return "role \"" + str(self.organization) + "\""
+ return "role \"" + str(self.organization) + "\", name " + str(self.image)
#mii_domain = 'https://mii-secure.cdn.nintendo.net'
# as of writing, mii-secure is unstable, nintendo please do not f*ck me for this
@@ -195,13 +195,17 @@ class User(AbstractBaseUser):
return self.warned
def get_warned_reason(self):
return self.warned_reason
- def profile(self, thing=None):
- # If thing is specified, that field is retrieved
- if thing:
+ def profile(self, attr=None):
+ # If attr is specified, that field is retrieved
+ if attr:
# could this be shortened? or discontinued in general
- return self.profile_set.all().values_list(thing, flat=True).first()
+ return self.profile_set.all().values_list(attr, flat=True).first()
# Otherwise just get full profile
- return self.profile_set.filter().first()
+ result = self.profile_set.filter().first()
+ if not result:
+ # hacky but should make any page that requests this where it's not there, return a 404
+ raise Http404()
+ return result
def gravatar(self):
g = util.get_gravatar(self.email)
if not g:
@@ -344,7 +348,7 @@ class User(AbstractBaseUser):
# trailing
if UserBlock.objects.filter(source=source, target=self).exists():
return False
- if not self.can_block(source):
+ if not self.can_block(source) or self == source:
return False
fs = Friendship.find_friendship(self, source)
if fs:
@@ -378,18 +382,29 @@ class User(AbstractBaseUser):
for post in posts:
post.setup(request)
return posts
- def get_yeahed(self, type=0, limit=20, offset=0):
+ def get_yeahed(self, type, limit, offset, user):
# 0 - post, 1 - comment, 2 - any
- if type == 2:
- yeahs = self.yeah_set.select_related('post').select_related('comment').select_related('comment__original_post').select_related('comment__original_post__creator').annotate(num_yeahs_post=Count('post__yeah', distinct=True), num_yeahs_comment=Count('comment__yeah', distinct=True), num_comments=Count('post__comment', distinct=True)).filter().order_by('-created')[offset:offset + limit]
+ yeahs = self.yeah_set.select_related('post', 'comment', 'comment__original_post', 'comment__original_post__creator').annotate(
+ # todo clean up all queries like this lmao
+ num_yeahs_post=Count('post__yeah', distinct=True),
+ num_yeahs_comment=Count('comment__yeah', distinct=True),
+ num_comments=Count('post__comment', distinct=True)
+ )
+ # add type= if NOT selecting all
+ type_query = Q(type=type) if type != 2 else Q()
+ if not user.is_authenticated:
+ # if user is not authenticated then only search yeahs in communities that don't require auth
+ require_auth_query = Q(post__community__require_auth=False) | Q(comment__community__require_auth=False)
else:
- yeahs = self.yeah_set.select_related('post').select_related('post__creator').annotate(num_yeahs_post=Count('post__yeah', distinct=True), num_comments=Count('post__comment', distinct=True)).filter(type=type, post__is_rm=False).order_by('-created')[offset:offset + limit]
- for thing in yeahs:
- if thing.post:
- thing.post.num_yeahs = thing.num_yeahs_post
- thing.post.num_comments = thing.num_comments
- elif thing.comment:
- thing.comment.num_yeahs = thing.num_yeahs_comment
+ require_auth_query = Q()
+ # sometimes is_rm'ed posts are searched so it's necessary to specifically specify non deleted
+ yeahs = yeahs.filter(type_query, require_auth_query, Q(post__is_rm=False) | Q(comment__is_rm=False)).order_by('-created')[offset:offset + limit]
+ for yeah in yeahs:
+ if yeah.post:
+ yeah.post.num_yeahs = yeah.num_yeahs_post
+ yeah.post.num_comments = yeah.num_comments
+ elif yeah.comment:
+ yeah.comment.num_yeahs = yeah.num_yeahs_comment
return yeahs
def get_following(self, limit=50, offset=0, request=None):
return self.follow_source.select_related('target').filter().order_by('-created')[offset:offset + limit]
diff --git a/closedverse_main/templates/closedverse_main/elements/community_post.html b/closedverse_main/templates/closedverse_main/elements/community_post.html
index 6831ee6..19f2f5b 100644
--- a/closedverse_main/templates/closedverse_main/elements/community_post.html
+++ b/closedverse_main/templates/closedverse_main/elements/community_post.html
@@ -41,7 +41,7 @@
{% endif %}
{% endif %}
{% if post.screenshot %}
{% endif %}
- {% if post.video %}
{% endif %}
+ {% if post.video %}{% endif %}
{% if post.spoils and not post.is_mine and not post.creator.banned %}
This post contains spoilers.
diff --git a/closedverse_main/templates/closedverse_main/post-view.html b/closedverse_main/templates/closedverse_main/post-view.html
index f62f374..68c0fe2 100644
--- a/closedverse_main/templates/closedverse_main/post-view.html
+++ b/closedverse_main/templates/closedverse_main/post-view.html
@@ -88,7 +88,7 @@
{% if post.yt_vid %}
{% elif post.video %}
-
+
{% elif post.discord_vid %}
diff --git a/closedverse_main/templates/closedverse_main/user_view.html b/closedverse_main/templates/closedverse_main/user_view.html
index a44624f..ba13d2e 100644
--- a/closedverse_main/templates/closedverse_main/user_view.html
+++ b/closedverse_main/templates/closedverse_main/user_view.html
@@ -18,7 +18,7 @@
{% endif %}
View posts
- {% if profile.yeahs_visible and request.user.is_authenticated %}
+ {% if profile.yeahs_visible %}
Recently yeahed posts
{% if yeahed.count < 1 %}
@@ -37,4 +37,4 @@
View all yeahs
{% endif %}
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/closedverse_main/templatetags/__init__.py b/closedverse_main/templatetags/__init__.py
index 0519ecb..e69de29 100644
--- a/closedverse_main/templatetags/__init__.py
+++ b/closedverse_main/templatetags/__init__.py
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/closedverse_main/templatetags/closedverse_tags.py b/closedverse_main/templatetags/closedverse_tags.py
index fd9f8b4..aface20 100644
--- a/closedverse_main/templatetags/closedverse_tags.py
+++ b/closedverse_main/templatetags/closedverse_tags.py
@@ -1,9 +1,7 @@
from django import template
-from closedverse_main.models import User
from closedverse_main.util import HumanTime
from closedverse_main.models import mii_domain
from closedverse import settings
-import re
register = template.Library()
diff --git a/closedverse_main/urls.py b/closedverse_main/urls.py
index a3e68bb..a9c05fe 100644
--- a/closedverse_main/urls.py
+++ b/closedverse_main/urls.py
@@ -1,10 +1,10 @@
from django.conf.urls import url, re_path
-from django.conf.urls.static import static
from django.views.static import serve
-from django.shortcuts import redirect
+#from django.conf.urls.static import static
+#from django.shortcuts import redirect
from . import views
-from closedverse.settings import MEDIA_URL, MEDIA_ROOT
+from django.conf import settings
username = r'(?P[A-Za-z0-9-\'-._ ]+)'
community = r'(?P[0-9]+)'
@@ -113,4 +113,4 @@ urlpatterns = [
]
# + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# serve static and media i think???? mighTTT???????
-urlpatterns += [re_path(r'^i/(?P.*)$', serve, {'document_root': MEDIA_ROOT, }), ]
+urlpatterns += [re_path(r'^media/(?P.*)$', serve, {'document_root': settings.MEDIA_ROOT, }), ]
diff --git a/closedverse_main/util.py b/closedverse_main/util.py
index 44cb758..d3c2a49 100644
--- a/closedverse_main/util.py
+++ b/closedverse_main/util.py
@@ -2,22 +2,16 @@ import urllib.request, urllib.error
# requests is only used for get_mii which is not being used currently
#import requests
from lxml import etree
-from random import choice
import json
import time
import os.path
-import random
-from PIL import Image, ExifTags, ImageFile
+from PIL import Image, ImageFile #, ExifTags,
from datetime import datetime
-from binascii import crc32
from math import floor
from hashlib import md5, sha1
import io
-from uuid import uuid4
-import imghdr
import base64
from closedverse import settings
-import re
from os import remove, rename
def HumanTime(date, full=False):
diff --git a/closedverse_main/views.py b/closedverse_main/views.py
index f95167e..fb15540 100644
--- a/closedverse_main/views.py
+++ b/closedverse_main/views.py
@@ -208,7 +208,7 @@ def login_page(request):
'title': 'Log in',
'form': form,
'allow_signups': settings.allow_signups,
- 'reset_supported': hasattr(settings, 'DEFAULT_FROM_EMAIL'),
+ 'reset_supported': settings.DEBUG or hasattr(settings, 'EMAIL_HOST_USER'),
})
def signup_page(request):
@@ -369,8 +369,7 @@ def forgot_passwd(request):
if not request.POST['password'] == request.POST['password_again']:
return HttpResponseBadRequest("Your passwords don't match.")
try:
- new = request.POST['password']
- validate_password(new, user=user)
+ validate_password(request.POST['password'], user=user)
except ValidationError as error:
return HttpResponseBadRequest(error)
user.set_password(request.POST['password'])
@@ -383,7 +382,7 @@ def forgot_passwd(request):
})
return render(request, 'closedverse_main/forgot_page.html', {
'title': 'Reset password',
- 'reset_supported': hasattr(settings, 'DEFAULT_FROM_EMAIL'),
+ 'reset_supported': settings.DEBUG or hasattr(settings, 'EMAIL_HOST_USER'),
#'classes': ['no-login-btn'],
})
@@ -586,7 +585,7 @@ def user_view(request, username):
user.save()
return HttpResponse()
posts = user.get_posts(3, 0, request, timezone.now())
- yeahed = user.get_yeahed(0, 3)
+ yeahed = user.get_yeahed(0, 3, 0, request.user)
for yeah in yeahed:
if user.is_me(request):
yeah.post.yeah_given = True
@@ -668,8 +667,6 @@ def user_yeahs(request, username):
user = get_object_or_404(User, username__iexact=username)
if user.is_me(request):
title = 'My yeahs'
- elif not request.user.is_authenticated:
- raise Http404()
else:
if request.user.is_authenticated and not user.can_view(request.user):
raise Http404()
@@ -686,10 +683,7 @@ def user_yeahs(request, username):
if not profile.yeahs_visible:
raise Http404()
- if request.GET.get('offset'):
- yeahs = user.get_yeahed(2, 20, int(request.GET['offset']))
- else:
- yeahs = user.get_yeahed(2, 20, 0)
+ yeahs = user.get_yeahed(2, 20, int(request.GET.get('offset', 0)), request.user)
if yeahs.count() > 19:
if request.GET.get('offset'):
next_offset = int(request.GET['offset']) + 20
diff --git a/static/blueness.css b/static/blueness.css
index a1fcc3c..547a0c1 100644
--- a/static/blueness.css
+++ b/static/blueness.css
@@ -18,7 +18,7 @@ input[type=text], input[type=password], input[type=email], input:not([type]), se
}
.guest .guest-message p {
color: #ccc;
- background: #1b1b1b;
+ background: #15151f;
}
.guest-message .arrow-button {
border-top: 1px solid #000 !important;
diff --git a/static/closedverse.js b/static/closedverse.js
index acb01d3..aff7c8a 100644
--- a/static/closedverse.js
+++ b/static/closedverse.js
@@ -616,10 +616,18 @@ var Olv = Olv || {};
a(window).on("click submit", this.onMayLeavePage)
},
onDataHrefClick: function(c) {
- if (a(c.target).attr("data-href")) {
+ // if is video then don't navigate
+ // bc most of the time you click on a video it plays in the background while navigating to the next post
+ // this may make it more inconvenient to click on the post but it's a win to me
+ //if (a(c.target).is('video')) {
+ if (a(c.target).attr('controls')) {
+ // ignore
+ return;
+ }
+ if (a(c.target).attr("data-href")) {
b.Net.go($(this).attr("data-href"));
return;
- }
+ }
if (!c.isDefaultPrevented() && !a(c.target).closest("a,button").length) {
var d = a(this);
if (!d.hasClass("disabled")) {
@@ -1118,10 +1126,15 @@ var Olv = Olv || {};
b.ModalWindowManager.setup()
}),
a(document).on("olv:pagechange", function() {
- b.ModalWindowManager.closeAll();
- if(!Olv.ModalWindowManager._windows.length && $('.mask').length) {
- b.ModalWindowManager.toggleMask();
- }
+ // hackily re-add modals that were open on page forward/backwards, restoring their functionality
+ b.ModalWindowManager._windows = [];
+ a('.modal-window-open').each(function(i, v) {
+ var modal = new b.ModalWindow(v);
+ modal.triggerOpenHandlers(a.Deferred());
+ b.ModalWindowManager._windows.push(modal);
+ b.ModalWindowManager.currentWindow = modal;
+ });
+ //b.ModalWindowManager.closeAll()
}),
b.ModalWindow = function(b, c) {
this.element = a(b),
@@ -1949,23 +1962,25 @@ var Olv = Olv || {};
var handleFileChange = function(event) {
//var fileList;
- console.log('handleFileChange: files is being assigned...');
+ //console.log('handleFileChange: files is being assigned...');
+ var files;
switch(true) {
case event.target.files !== undefined:
- uploadFile[0].files = event.target.files;
+ files = event.target.files;
break;
case event.originalEvent.dataTransfer !== undefined:
- uploadFile[0].files = event.originalEvent.dataTransfer.files;
+ files = event.originalEvent.dataTransfer.files;
break;
case event.originalEvent.clipboardData !== undefined:
- uploadFile[0].files = event.originalEvent.clipboardData.files;
+ files = event.originalEvent.clipboardData.files;
break;
default:
return;
}
- if (!(null === uploadFile[0].files || uploadFile[0].files.length < 1 || void 0 === uploadFile[0].files[0] || uploadFile[0].files[0].type.indexOf("image") < 0)) {
+ if (!(null === files || files.length < 1 || void 0 === files[0] || files[0].type.indexOf("image") < 0)) {
event.preventDefault();
+ uploadFile[0].files = files;
Olv.Form.toggleDisabled($("input.black-button"), false);
uploadPreview.hide();
uploadPreviewContainer.hide();
@@ -1977,7 +1992,7 @@ var Olv = Olv || {};
console.log('here is your fileList, and uploadFile')
*/
var blobURL = URL.createObjectURL(uploadFile[0].files[0]);
- console.log(uploadFile[0].files[0])
+ //console.log(uploadFile[0].files[0])
uploadPreview.attr("src", blobURL);
uploadPreview.show();
@@ -2021,9 +2036,7 @@ var Olv = Olv || {};
event.preventDefault();
});
- c.on("drop", handleFileChange);
- // upon choosing an image, and pasting plain text after, no image would be uploaded for some reason.
- // yeah i got no fucking clue how to fix this shit.
+ c.on("drop paste", handleFileChange);
c.on("olv:entryform:post:done", function() {
imageDimensions.text(b.EntryForm.tempPollutionButImageFormAllowedText);
@@ -2597,7 +2610,6 @@ var Olv = Olv || {};
b.Closed.changesel("news");
$('.received-request-button').on('click', function(a) {
a.preventDefault()
- window.ass = a
fr = new b.ModalWindow($('div[data-modal-types=accept-friend-request][data-action="'+ $(this).parent().parent().data('action') +'"]'));fr.open();
})
$('div[data-modal-types=accept-friend-request] .ok-button.post-button').on('click', function(a){
@@ -2916,7 +2928,7 @@ $('.post-poll .poll-votes').on('click', function() {
$('.edit-post-button').on('click',function(){
if($('.post-content-memo').length) {
b.showMessage("", "You can't edit a drawing, sorry.");
- } else if($('.vidya').length) {
+ } if($('.screenshot-container > video').length) {
b.showMessage("", "You can't edit your uploaded video, sorry. But you can edit the contents of the post.");
et();
b.Form.toggleDisabled(submit_btn, true);
@@ -2948,7 +2960,9 @@ $('.post-poll .poll-votes').on('click', function() {
lock_comments_button.on('click',function(){
b.showConfirm("Lock comments", "Really lock up the comments? This cannot be undone.")
$('.ok-button').on('click',function(){
- b.Form.post(lock_comments_button.attr('data-action')).done
+ b.Form.post(lock_comments_button.attr('data-action')).done(function() {
+ b.Net.reload();
+ });
})
})
}