diff --git a/eve_api/api_puller/accounts.py b/eve_api/api_puller/accounts.py index 383199b..1620d61 100755 --- a/eve_api/api_puller/accounts.py +++ b/eve_api/api_puller/accounts.py @@ -28,6 +28,17 @@ def import_eve_account(api_key, user_id): #print 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 # Create or retrieve the account last to make sure everything diff --git a/eve_api/cron.py b/eve_api/cron.py index f004bfb..920850e 100644 --- a/eve_api/cron.py +++ b/eve_api/cron.py @@ -3,6 +3,7 @@ import logging from django_cron import cronScheduler, Job from eve_api.models.api_player import EVEAccount, EVEPlayerCorporation import eve_api.api_puller.accounts +from eve_api.api_exceptions import APIAuthException, APINoUserIDException class UpdateAPIs(Job): """ diff --git a/reddit/admin.py b/reddit/admin.py index 4cfe1dd..96d499d 100644 --- a/reddit/admin.py +++ b/reddit/admin.py @@ -2,14 +2,35 @@ from django.contrib import admin from reddit.models import RedditAccount from reddit.forms import RedditAccountForm +from datetime import date + 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'] fields = ('user', 'username') 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): obj.api_update() obj.save() diff --git a/sso/cron.py b/sso/cron.py index 94344cc..2a9c614 100644 --- a/sso/cron.py +++ b/sso/cron.py @@ -26,23 +26,16 @@ class RemoveInvalidUsers(Job): # Check each service account and delete access if they're not allowed for servacc in ServiceAccount.objects.filter(user=user): - - 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())): + if not (set(user.groups.all()) & set(servacc.service.groups.all())): print "User %s is not in allowed group for %s, deleting account" % (user.username, servacc.service) - #servacc.delete() + servacc.delete() pass # For users set to not active, delete all accounts if not user.is_active: print "User %s is inactive, deleting related service accounts" % user.username for servacc in ServiceAccount.objects.filter(user=user): - #servacc.delete() + servacc.delete() pass diff --git a/sso/forms.py b/sso/forms.py index 758b34b..16871c3 100644 --- a/sso/forms.py +++ b/sso/forms.py @@ -37,6 +37,16 @@ def UserServiceAccountForm(user): character = forms.ChoiceField(chars) 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): 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']) diff --git a/sso/models.py b/sso/models.py index 492fddc..1610de8 100644 --- a/sso/models.py +++ b/sso/models.py @@ -44,22 +44,23 @@ class SSOUser(models.Model): # Create a list of Char groups chargroups = [] for eacc in EVEAccount.objects.filter(user=self.user): - for char in eacc.characters.all(): - if char.corporation.group: - chargroups.append(char.corporation.group) + if eacc.api_status == 1: + for char in eacc.characters.all(): + if char.corporation.group: + chargroups.append(char.corporation.group) # Generate the list of groups to add/remove delgroups = set(set(self.user.groups.all()) & set(corpgroups)) - set(chargroups) addgroups = set(chargroups) - set(set(self.user.groups.all()) & set(corpgroups)) - print "Del:", delgroups for g in delgroups: self.user.groups.remove(g) - print "Add:", addgroups for g in addgroups: self.user.groups.add(g) + print "%s, Add: %s, Del: %s, Current: %s" % (self.user, addgroups, delgroups, self.user.groups.all()) + def __str__(self): return self.user.__str__() diff --git a/sso/services/__init__.py b/sso/services/__init__.py index cabf784..bad0c6b 100644 --- a/sso/services/__init__.py +++ b/sso/services/__init__.py @@ -32,7 +32,7 @@ class BaseService(): def add_user(self, username, password): """ Add a user, returns a UID for that user """ - pass + return username def check_user(self, username): """ Check if the username exists """ diff --git a/sso/views.py b/sso/views.py index b7e5b24..69970d7 100644 --- a/sso/views.py +++ b/sso/views.py @@ -67,9 +67,7 @@ def eveapi_add(request): else: form = EveAPIForm() # An unbound form - return render_to_response('sso/eveapi.html', { - 'form': form, - }) + return render_to_response('sso/eveapi.html', locals()) @login_required 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 } form = clsform() # An unbound form - return render_to_response('sso/serviceaccount.html', { - 'form': form, - }) + return render_to_response('sso/serviceaccount.html', locals()) @login_required def service_del(request, serviceid=0): @@ -150,9 +146,7 @@ def reddit_add(request): defaults = { 'username': request.user.username, } form = RedditAccountForm(defaults) # An unbound form - return render_to_response('sso/redditaccount.html', { - 'form': form, - }) + return render_to_response('sso/redditaccount.html', locals()) @login_required def reddit_del(request, redditid=0): @@ -180,13 +174,9 @@ def user_view(request, user=None): if form.is_valid(): user = form.cleaned_data['username'] else: - return render_to_response('sso/userlookup.html', { - 'form': form, - }) + return render_to_response('sso/userlookup.html', locals()) else: - return render_to_response('sso/userlookup.html', { - 'form': form, - }) + return render_to_response('sso/userlookup.html', locals()) is_admin = request.user.is_staff diff --git a/test.py b/test.py index 149338d..2d62731 100644 --- a/test.py +++ b/test.py @@ -1,9 +1,12 @@ import os os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' -from sso.models import Service -from sso.services.jabber import JabberService +from eve_api.cron import UpdateAPIs -b = JabberService() +b = UpdateAPIs() +b.job() -print b.check_user('matalok') +from sso.cron import RemoveInvalidUsers + +b = RemoveInvalidUsers() +b.job()