1
0
mirror of https://github.com/creyD/asiimov.git synced 2026-06-12 09:02:23 +02:00
Files
asiimov/src/core/views.py

195 lines
6.2 KiB
Python

# Import the local models
from .models import Offer, Gamer
# Django shortcuts for certain things
from django.shortcuts import render, get_object_or_404, redirect
# For catching permission errors
from django.http import HttpResponseForbidden
# For permitting only logged in users to see their private area
from django.contrib.auth.decorators import login_required
# For Steam Open ID handling
from urllib import parse
# For requesting the identification check
import requests
# For manually creating system users
from django.contrib.auth.models import User
# For getting the API interaction methods
from .steam_api import getUserInfo, updateInventory
# Import for manually logging in user after creation
from django.contrib.auth import login
from .forms import ChangeTradeUrl, CreateOffer
# HELPER
def validate_steam_login(params):
steam_login_url_base = "https://steamcommunity.com/openid/login"
new_params = params.copy()
new_params["openid.mode"] = "check_authentication"
r = requests.post(steam_login_url_base, data=new_params)
if "is_valid:true" in r.text:
return True
return False
# STATIC PAGES
def help(request):
return render(request, 'static_pages/help.html')
def imprint(request):
return render(request, 'static_pages/imprint.html')
# PUBLIC AREA
def dashboard(request):
return render(request, 'core/dashboard.html')
def offer_overview(request):
return render(request, 'core/offer_overview.html', {'offers': Offer.objects.all()})
def offer(request, offerID):
offer = get_object_or_404(Offer, id=offerID)
return render(request, 'code/offer.html', {'offer': offer})
def search(request, filter):
# TODO: Implement
return render(request, 'core/filter.html')
# USER SIGNUP
def signup(request):
steam_openid_url = 'https://steamcommunity.com/openid/login'
u = {
'openid.ns': "http://specs.openid.net/auth/2.0",
'openid.identity': "http://specs.openid.net/auth/2.0/identifier_select",
'openid.claimed_id': "http://specs.openid.net/auth/2.0/identifier_select",
'openid.mode': 'checkid_setup',
'openid.return_to': 'http://' + request.META['HTTP_HOST'] + '/signup_confirm',
'openid.realm': 'http://' + request.META['HTTP_HOST'] + ''
}
query_string = parse.urlencode(u)
auth_url = steam_openid_url + '?' + query_string
return redirect(auth_url)
def signup_confirm(request):
if validate_steam_login(request.GET):
claimed_id = request.GET.get('openid.claimed_id')
claimed_id = claimed_id.split('/')[-1]
new_user, created = User.objects.get_or_create(username=claimed_id)
if created:
info = getUserInfo(claimed_id)
Gamer.objects.create(
steamid=claimed_id,
system_user=new_user,
communityvisibilitystate=(True if info['communityvisibilitystate'] == 3 else False),
profilestate=info['profilestate'],
personaname=info['personaname'],
profileurl=info['profileurl'],
avatar=info['avatar'],
commentpermission=info['commentpermission'],
timecreated=info['timecreated'] or None,
loccountrycode=info['loccountrycode'] or None
)
login(request, new_user)
return redirect(profile, steamID=claimed_id)
return HttpResponseForbidden()
# USER AREA
@login_required
def offer_refresh(request, offerID):
offer = get_object_or_404(Offer, id=offerID)
# TODO Refresh Info
return redirect(offer, offerID=offerID)
@login_required
def offer_delete(request, offerID):
offer = get_object_or_404(Offer, id=offerID)
if request.user == offer.offeror.system_user:
offer.delete()
return redirect(dashboard)
return HttpResponseForbidden()
@login_required
def offer_create(request):
form = CreateOffer(request.POST or None)
if request.method == 'POST' and form.is_valid():
form.offeror = request.user.gamer
form.save()
dude = get_object_or_404(Gamer, steamid=request.user.gamer.steamid)
context = {
'inventory': dude.inventory,
'form': form
}
return render(request, 'core/offer_create.html', context)
@login_required
def profile(request, steamID):
dude = get_object_or_404(Gamer, steamid=steamID)
return render(request, 'profile/profile.html', {'gamer': dude, 'live_offers': Offer.objects.filter(offeror=dude).count()})
@login_required
def profile_inventory(request, steamID):
dude = get_object_or_404(Gamer, steamid=steamID)
return render(request, 'profile/inventory.html', {'gamer': dude})
@login_required
def profile_update(request, steamID):
if request.user.steamid == steamID or request.user.is_staff:
the_gamer = get_object_or_404(Gamer, steamid=steamID)
info = getUserInfo(steamID)
the_gamer.communityvisibilitystate = (True if info['communityvisibilitystate'] == 3 else False)
the_gamer.profilestate = info['profilestate']
the_gamer.personaname = info['personaname']
the_gamer.profileurl = info['profileurl']
the_gamer.avatar = info['avatar']
the_gamer.commentpermission = info['commentpermission']
if 'timecreated' in info:
the_gamer.timecreated = info['timecreated']
if 'loccountrycode' in info:
the_gamer.loccountrycode = info['loccountrycode']
the_gamer.save()
return redirect(profile, steamID=steamID)
return HttpResponseForbidden()
# PRIVATE AREA
@login_required
def me(request):
return redirect(profile, steamID=request.user.gamer.steamid)
@login_required
def me_inventory(request):
return redirect(profile_inventory, steamID=request.user.gamer.steamid)
@login_required
def profile_inventory_update(request, steamID):
updateInventory(steamID)
return redirect(profile_inventory, steamID=steamID)
@login_required
def me_settings(request):
dude = get_object_or_404(Gamer, system_user=request.user)
trade_form = ChangeTradeUrl(request.POST or None, instance=dude)
if trade_form.is_valid() and request.method == 'POST':
dude.tradeurl = trade_form.cleaned_data['tradeurl']
dude.save()
return render(request, 'profile/settings.html', {'gamer': dude, 'form': trade_form})