mirror of
https://github.com/viq/NewsBlur.git
synced 2025-04-13 09:38:09 +00:00
189 lines
5.6 KiB
Python
189 lines
5.6 KiB
Python
import hashlib
|
|
|
|
from django.conf import settings
|
|
from django.contrib.auth.models import User
|
|
from django.core.cache import cache
|
|
from django.http import HttpResponse, HttpResponseForbidden
|
|
from django.utils.http import urlquote
|
|
from simplejson.decoder import JSONDecodeError
|
|
|
|
from utils import json_functions as json
|
|
|
|
|
|
def ajax_login_required(function=None):
|
|
def _dec(view_func):
|
|
def _view(request, *args, **kwargs):
|
|
if request.user.is_anonymous:
|
|
return HttpResponseForbidden()
|
|
else:
|
|
return view_func(request, *args, **kwargs)
|
|
|
|
_view.__name__ = view_func.__name__
|
|
_view.__dict__ = view_func.__dict__
|
|
_view.__doc__ = view_func.__doc__
|
|
|
|
return _view
|
|
|
|
if function is None:
|
|
return _dec
|
|
else:
|
|
return _dec(function)
|
|
|
|
|
|
def oauth_login_required(function=None):
|
|
def _dec(view_func):
|
|
def _view(request, *args, **kwargs):
|
|
if request.user.is_anonymous:
|
|
return HttpResponse(
|
|
content=json.encode(
|
|
{
|
|
"message": "You must have a valid OAuth token.",
|
|
}
|
|
),
|
|
status=401,
|
|
)
|
|
else:
|
|
try:
|
|
setattr(request, "body_json", json.decode(request.body))
|
|
except JSONDecodeError:
|
|
return HttpResponse(
|
|
content=json.encode(
|
|
{
|
|
"message": "Your JSON body is malformed.",
|
|
}
|
|
),
|
|
status=400,
|
|
)
|
|
return view_func(request, *args, **kwargs)
|
|
|
|
_view.__name__ = view_func.__name__
|
|
_view.__dict__ = view_func.__dict__
|
|
_view.__doc__ = view_func.__doc__
|
|
|
|
return _view
|
|
|
|
if function is None:
|
|
return _dec
|
|
else:
|
|
return _dec(function)
|
|
|
|
|
|
def admin_only(function=None):
|
|
def _dec(view_func):
|
|
def _view(request, *args, **kwargs):
|
|
if not request.user.is_staff:
|
|
return HttpResponseForbidden()
|
|
else:
|
|
return view_func(request, *args, **kwargs)
|
|
|
|
_view.__name__ = view_func.__name__
|
|
_view.__dict__ = view_func.__dict__
|
|
_view.__doc__ = view_func.__doc__
|
|
|
|
return _view
|
|
|
|
if function is None:
|
|
return _dec
|
|
else:
|
|
return _dec(function)
|
|
|
|
|
|
def get_user(request):
|
|
if not hasattr(request, "user"):
|
|
user = request
|
|
else:
|
|
user = request.user
|
|
|
|
if user.is_anonymous and hasattr(request, "POST"):
|
|
# Check secret_token parameter
|
|
secret_token = request.POST.get("secret_token", None) or request.GET.get("secret_token", None)
|
|
if secret_token:
|
|
try:
|
|
user = User.objects.get(profile__secret_token=secret_token)
|
|
request.user = user
|
|
except User.DoesNotExist:
|
|
pass
|
|
|
|
if user.is_anonymous:
|
|
try:
|
|
user = User.objects.get(username=settings.HOMEPAGE_USERNAME)
|
|
except User.DoesNotExist:
|
|
user = User.objects.create(username=settings.HOMEPAGE_USERNAME)
|
|
user.set_password("")
|
|
user.save()
|
|
return user
|
|
|
|
|
|
def invalidate_template_cache(fragment_name, *variables):
|
|
args = hashlib.md5((":".join([urlquote(var) for var in variables]).encode("utf-8")))
|
|
cache_key = "template.cache.%s.%s" % (fragment_name, args.hexdigest())
|
|
cache.delete(cache_key)
|
|
|
|
|
|
def generate_secret_token(phrase, size=12):
|
|
"""Generate a (SHA1) security hash from the provided info."""
|
|
info = f"{phrase} {settings.SECRET_KEY}".encode("utf-8")
|
|
return hashlib.sha256(info).hexdigest()[:size]
|
|
|
|
|
|
def extract_user_agent(request):
|
|
user_agent = request.environ.get("HTTP_USER_AGENT", "").lower()
|
|
platform = "------"
|
|
if "ipad app" in user_agent:
|
|
platform = "iPad"
|
|
elif "iphone app" in user_agent:
|
|
platform = "iPhone"
|
|
elif "blar" in user_agent:
|
|
platform = "Blar"
|
|
elif "Android app" in user_agent:
|
|
platform = "Androd"
|
|
elif "android" in user_agent:
|
|
platform = "androd"
|
|
elif "pluggio" in user_agent:
|
|
platform = "Plugio"
|
|
elif "msie" in user_agent:
|
|
platform = "IE"
|
|
if "msie 9" in user_agent:
|
|
platform += "9"
|
|
elif "msie 10" in user_agent:
|
|
platform += "10"
|
|
elif "msie 8" in user_agent:
|
|
platform += "8"
|
|
elif "trident/7" in user_agent:
|
|
platform = "IE11"
|
|
elif "chrome" in user_agent:
|
|
platform = "Chrome"
|
|
elif "safari" in user_agent:
|
|
platform = "Safari"
|
|
elif "meego" in user_agent:
|
|
platform = "MeeGo"
|
|
elif "firefox" in user_agent:
|
|
platform = "FF"
|
|
elif "opera" in user_agent:
|
|
platform = "Opera"
|
|
elif "wp7" in user_agent:
|
|
platform = "WP7"
|
|
elif "wp8" in user_agent:
|
|
platform = "WP8"
|
|
elif "tafiti" in user_agent:
|
|
platform = "Tafiti"
|
|
elif "readkit" in user_agent:
|
|
platform = "ReadKt"
|
|
elif "reeder" in user_agent:
|
|
platform = "Reeder"
|
|
elif "metroblur" in user_agent:
|
|
platform = "Metrob"
|
|
elif "feedme" in user_agent:
|
|
platform = "FeedMe"
|
|
elif "theoldreader" in user_agent:
|
|
platform = "OldRdr"
|
|
elif "fever" in user_agent:
|
|
platform = "Fever"
|
|
elif "superfeedr" in user_agent:
|
|
platform = "Suprfd"
|
|
elif "feed reader-window" in user_agent:
|
|
platform = "FeedRe"
|
|
elif "feed reader-background" in user_agent:
|
|
platform = "FeReBg"
|
|
|
|
return platform
|