Merge branch 'master' into forced-username

Conflicts:

	sso/forms.py
This commit is contained in:
2010-03-14 10:20:58 +00:00
9 changed files with 66 additions and 36 deletions

View File

@@ -28,6 +28,17 @@ def import_eve_account(api_key, user_id):
#print account_doc.body #print account_doc.body
dom = minidom.parseString(account_doc.body) dom = minidom.parseString(account_doc.body)
if dom.getElementsByTagName('error'):
try:
account = EVEAccount.objects.get(id=user_id)
except EVEAccount.DoesNotExist:
return
account.api_status = API_STATUS_OTHER_ERROR
account.save()
return
characters_node_children = dom.getElementsByTagName('rowset')[0].childNodes characters_node_children = dom.getElementsByTagName('rowset')[0].childNodes
# Create or retrieve the account last to make sure everything # Create or retrieve the account last to make sure everything

View File

@@ -3,6 +3,7 @@ import logging
from django_cron import cronScheduler, Job from django_cron import cronScheduler, Job
from eve_api.models.api_player import EVEAccount, EVEPlayerCorporation from eve_api.models.api_player import EVEAccount, EVEPlayerCorporation
import eve_api.api_puller.accounts import eve_api.api_puller.accounts
from eve_api.api_exceptions import APIAuthException, APINoUserIDException
class UpdateAPIs(Job): class UpdateAPIs(Job):
""" """

View File

@@ -2,14 +2,35 @@ from django.contrib import admin
from reddit.models import RedditAccount from reddit.models import RedditAccount
from reddit.forms import RedditAccountForm from reddit.forms import RedditAccountForm
from datetime import date
class RedditAccountAdmin(admin.ModelAdmin): class RedditAccountAdmin(admin.ModelAdmin):
list_display = ('username', 'user', 'date_created', 'link_karma', 'comment_karma', 'last_update') list_display = ('username', 'user', 'date_created', 'link_karma', 'comment_karma', 'last_update', 'is_valid')
search_fields = ['username', 'user'] search_fields = ['username', 'user']
fields = ('user', 'username') fields = ('user', 'username')
form = RedditAccountForm form = RedditAccountForm
def is_valid(self, obj):
if not obj.date_created:
return False
# Account 3 months old?
if (date.today() - obj.date_created.date()).days >= 90:
return True
# Account created after 9/2/10 and before 13/2/10
if obj.date_created.date() >= date(2010, 2, 9) and obj.date_created.date() <= date(2010, 2, 13):
return True
return False
is_valid.short_description = 'Dreddit Eligible'
is_valid.boolean = True
def save_model(self, request, obj, form, change): def save_model(self, request, obj, form, change):
obj.api_update() obj.api_update()
obj.save() obj.save()

View File

@@ -26,23 +26,16 @@ class RemoveInvalidUsers(Job):
# Check each service account and delete access if they're not allowed # Check each service account and delete access if they're not allowed
for servacc in ServiceAccount.objects.filter(user=user): for servacc in ServiceAccount.objects.filter(user=user):
if not (set(user.groups.all()) & set(servacc.service.groups.all())):
print servacc.service.groups.all()
print user.groups.all()
allowedgroups = servacc.service.groups.all()
print set(servacc.service.groups.all()) & set(servacc.service.groups.all())
if not (set(servacc.service.groups.all()) & set(servacc.service.groups.all())):
print "User %s is not in allowed group for %s, deleting account" % (user.username, servacc.service) print "User %s is not in allowed group for %s, deleting account" % (user.username, servacc.service)
#servacc.delete() servacc.delete()
pass pass
# For users set to not active, delete all accounts # For users set to not active, delete all accounts
if not user.is_active: if not user.is_active:
print "User %s is inactive, deleting related service accounts" % user.username print "User %s is inactive, deleting related service accounts" % user.username
for servacc in ServiceAccount.objects.filter(user=user): for servacc in ServiceAccount.objects.filter(user=user):
#servacc.delete() servacc.delete()
pass pass

View File

@@ -37,6 +37,16 @@ def UserServiceAccountForm(user):
character = forms.ChoiceField(chars) character = forms.ChoiceField(chars)
service = forms.ChoiceField(services) service = forms.ChoiceField(services)
def clean_username(self):
field = self.cleaned_data.get('username', '')
# Checks that usernames consist of letters and numbers only
if not re.match("^[A-Za-z0-9_-]*$", field):
raise forms.ValidationError("Invalid character in username, use letters and numbers only")
return field
def clean(self): def clean(self):
if not self.cleaned_data['character'].corporation.group in self.cleaned_data['service'].groups.all(): if not self.cleaned_data['character'].corporation.group in self.cleaned_data['service'].groups.all():
raise form.ValidationError("%s is not in a corporation allowed to access %s" % (self.cleaned_data['character'].name, self.cleaned_data['service']) raise form.ValidationError("%s is not in a corporation allowed to access %s" % (self.cleaned_data['character'].name, self.cleaned_data['service'])

View File

@@ -44,22 +44,23 @@ class SSOUser(models.Model):
# Create a list of Char groups # Create a list of Char groups
chargroups = [] chargroups = []
for eacc in EVEAccount.objects.filter(user=self.user): for eacc in EVEAccount.objects.filter(user=self.user):
for char in eacc.characters.all(): if eacc.api_status == 1:
if char.corporation.group: for char in eacc.characters.all():
chargroups.append(char.corporation.group) if char.corporation.group:
chargroups.append(char.corporation.group)
# Generate the list of groups to add/remove # Generate the list of groups to add/remove
delgroups = set(set(self.user.groups.all()) & set(corpgroups)) - set(chargroups) delgroups = set(set(self.user.groups.all()) & set(corpgroups)) - set(chargroups)
addgroups = set(chargroups) - set(set(self.user.groups.all()) & set(corpgroups)) addgroups = set(chargroups) - set(set(self.user.groups.all()) & set(corpgroups))
print "Del:", delgroups
for g in delgroups: for g in delgroups:
self.user.groups.remove(g) self.user.groups.remove(g)
print "Add:", addgroups
for g in addgroups: for g in addgroups:
self.user.groups.add(g) self.user.groups.add(g)
print "%s, Add: %s, Del: %s, Current: %s" % (self.user, addgroups, delgroups, self.user.groups.all())
def __str__(self): def __str__(self):
return self.user.__str__() return self.user.__str__()

View File

@@ -32,7 +32,7 @@ class BaseService():
def add_user(self, username, password): def add_user(self, username, password):
""" Add a user, returns a UID for that user """ """ Add a user, returns a UID for that user """
pass return username
def check_user(self, username): def check_user(self, username):
""" Check if the username exists """ """ Check if the username exists """

View File

@@ -67,9 +67,7 @@ def eveapi_add(request):
else: else:
form = EveAPIForm() # An unbound form form = EveAPIForm() # An unbound form
return render_to_response('sso/eveapi.html', { return render_to_response('sso/eveapi.html', locals())
'form': form,
})
@login_required @login_required
def eveapi_del(request, userid=0): def eveapi_del(request, userid=0):
@@ -113,9 +111,7 @@ def service_add(request):
#defaults = { 'username': request.user.username, 'password': request.user.get_profile().default_service_passwd } #defaults = { 'username': request.user.username, 'password': request.user.get_profile().default_service_passwd }
form = clsform() # An unbound form form = clsform() # An unbound form
return render_to_response('sso/serviceaccount.html', { return render_to_response('sso/serviceaccount.html', locals())
'form': form,
})
@login_required @login_required
def service_del(request, serviceid=0): def service_del(request, serviceid=0):
@@ -150,9 +146,7 @@ def reddit_add(request):
defaults = { 'username': request.user.username, } defaults = { 'username': request.user.username, }
form = RedditAccountForm(defaults) # An unbound form form = RedditAccountForm(defaults) # An unbound form
return render_to_response('sso/redditaccount.html', { return render_to_response('sso/redditaccount.html', locals())
'form': form,
})
@login_required @login_required
def reddit_del(request, redditid=0): def reddit_del(request, redditid=0):
@@ -180,13 +174,9 @@ def user_view(request, user=None):
if form.is_valid(): if form.is_valid():
user = form.cleaned_data['username'] user = form.cleaned_data['username']
else: else:
return render_to_response('sso/userlookup.html', { return render_to_response('sso/userlookup.html', locals())
'form': form,
})
else: else:
return render_to_response('sso/userlookup.html', { return render_to_response('sso/userlookup.html', locals())
'form': form,
})
is_admin = request.user.is_staff is_admin = request.user.is_staff

11
test.py
View File

@@ -1,9 +1,12 @@
import os import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from sso.models import Service from eve_api.cron import UpdateAPIs
from sso.services.jabber import JabberService
b = JabberService() b = UpdateAPIs()
b.job()
print b.check_user('matalok') from sso.cron import RemoveInvalidUsers
b = RemoveInvalidUsers()
b.job()