Added more stuff and multiple api keys

This commit is contained in:
Raynaldo Rivera 2014-10-06 02:31:23 -07:00
parent 7521d9fc4d
commit eacb3d03b8
15 changed files with 176 additions and 147 deletions

View File

@ -6,12 +6,15 @@ Note2: Most importantly though it works....
Requirments:
django 1.6.1
django-evolution
django-bootstrap-form
python-mysql-connector
python-mysqld
django-evolution
python-passlib
python-evelink
python-openfire
bcrypt
Services Interaction:

View File

@ -53,6 +53,7 @@ INSTALLED_APPS = (
'django.contrib.messages',
'django.contrib.staticfiles',
'django_evolution',
'bootstrapform',
'authentication',
'portal',
'registration',
@ -154,8 +155,8 @@ ALLIANCE_ID = 0
ALLIANCE_NAME = ''
# Jabber Prosody Info
OPENFIRE_ADDRESS = "http://someaddress.com:9090/"
OPENFIRE_SECRET_KEY = "somesecretkey"
OPENFIRE_ADDRESS = "http://something.com:9090/"
OPENFIRE_SECRET_KEY = "somekey"
# Mumble settings
MUMBLE_SERVER_ID = 1

View File

@ -20,8 +20,9 @@ urlpatterns = patterns('',
url(r'^logout_user/', 'authentication.views.logout_user', name='auth_logout_user'),
# None views
url(r'^main_character_change/(\d+)/$', 'portal.views.main_character_change', name='auth_main_character_change'),
url(r'^main_character_change/(\w+)/$', 'portal.views.main_character_change', name='auth_main_character_change'),
url(r'^activate_forum/$', 'portal.views.activate_forum', name='auth_activate_forum'),
url(r'^activate_jabber/$', 'portal.views.activate_jabber', name='auth_activate_jabber'),
url(r'^activate_mumble/$', 'portal.views.activate_mumble', name='auth_activate_mumble'),
url(r'^delete_api_pair/(\w+)/$', 'portal.views.api_key_removal', name='auth_api_key_removal')
)

View File

@ -5,7 +5,7 @@ from django.contrib.auth.models import AbstractBaseUser
class AllianceUserManager(BaseUserManager):
def create_user(self, username, email , password=None):
def create_user(self, username, email, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
@ -23,27 +23,6 @@ class AllianceUserManager(BaseUserManager):
user.save(using=self._db)
return user
def create_user_withapi(self, username, email, password, api_id, api_key):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not username:
raise ValueError('Users must have a username')
if not email:
raise ValueError('Users must have an email address')
user = AllianceUser()
user.set_username(username)
user.set_email(email)
user.set_password(password)
user.api_id = api_id
user.api_key = api_key
user.save(using=self._db)
return user
def create_superuser(self, username, email, password):
"""
Creates and saves a superuser with the given email, date of
@ -95,8 +74,6 @@ class AllianceUser(AbstractBaseUser):
is_admin = models.BooleanField(default=False)
is_moderator = models.BooleanField(default=False)
is_banned = models.BooleanField(default=False)
api_id = models.CharField(max_length=254)
api_key = models.CharField(max_length=254)
main_char_id = models.IntegerField(default=0)
# Login information stuff

View File

@ -1,16 +1,18 @@
from models import EveCharacter
from models import EveApiKeyPair
from services.eveapi_manager import EveApiManager
class EveCharacterManager():
class EveManager():
def __init__(self):
pass
def create_character(self, character_id, character_name, corporation_id,
corporation_name, corporation_ticker, alliance_id,
alliance_name, allianceuser_owner):
alliance_name, user, api_id):
if not EveCharacter.objects.filter(character_id=character_id).exists():
eve_char = EveCharacter();
eve_char.character_id = character_id
eve_char.character_name = character_name
@ -19,11 +21,11 @@ class EveCharacterManager():
eve_char.corporation_ticker = corporation_ticker
eve_char.alliance_id = alliance_id
eve_char.alliance_name = alliance_name
eve_char.allianceuser_owner = allianceuser_owner
eve_char.user = user
eve_char.api_id = api_id
eve_char.save()
def create_characters_from_list(self, chars, owner):
def create_characters_from_list(self, chars, user, api_id):
evemanager = EveApiManager()
for char in chars.result:
@ -35,13 +37,42 @@ class EveCharacterManager():
evemanager.get_corporation_ticker_from_id(chars.result[char]['corp']['id']),
chars.result[char]['alliance']['id'],
chars.result[char]['alliance']['name'],
owner)
user, api_id)
def create_api_keypair(self, api_id, api_key, user_id):
if not EveApiKeyPair.objects.filter(api_id=api_id).exists():
api_pair = EveApiKeyPair()
api_pair.api_id = api_id
api_pair.api_key = api_key
api_pair.user = user_id
api_pair.save()
def get_api_key_pairs(self, user_id):
if EveApiKeyPair.objects.filter(user=user_id).exists():
return EveApiKeyPair.objects.filter(user=user_id)
def delete_api_key_pair(self, api_id, user_id):
if EveApiKeyPair.objects.filter(api_id=api_id).exists():
# Check that its owned by our user_id
apikeypair = EveApiKeyPair.objects.get(api_id=api_id)
if apikeypair.user.id == user_id:
apikeypair.delete()
def delete_characters_by_api_id(self, api_id, user_id):
if EveCharacter.objects.filter(api_id=api_id).exists():
# Check that its owned by our user_id
characters = EveCharacter.objects.filter(api_id=api_id)
for char in characters:
if char.user.id == user_id:
char.delete()
def check_if_character_exist(self, char_name):
return EveCharacter.objects.filter(character_name=char_name).exists()
def get_characters_by_owner_id(self, owner_id):
return EveCharacter.objects.all().filter(allianceuser_owner=owner_id)
def get_characters_by_owner_id(self, user_id):
return EveCharacter.objects.all().filter(user_id=user_id)
def get_character_by_id(self, char_id):
if EveCharacter.objects.filter(character_id = char_id).exists():

View File

@ -11,4 +11,11 @@ class EveCharacter(models.Model):
corporation_ticker = models.CharField(max_length=254)
alliance_id = models.CharField(max_length=254)
alliance_name = models.CharField(max_length=254)
allianceuser_owner = models.ForeignKey(AllianceUser)
api_id = models.CharField(max_length=254)
user = models.ForeignKey(AllianceUser)
class EveApiKeyPair(models.Model):
api_id = models.CharField(max_length=254)
api_key = models.CharField(max_length=254)
user = models.ForeignKey(AllianceUser)

View File

@ -3,7 +3,8 @@ from django.shortcuts import render_to_response, HttpResponseRedirect
from django.template import RequestContext
from django.contrib.auth.decorators import login_required
from evespecific.managers import EveCharacterManager
from services.eveapi_manager import EveApiManager
from evespecific.managers import EveManager
from authentication.models import AllianceUserManager
from services.phpbb3_manager import Phpbb3Manager
from services.jabber_manager import JabberManager
@ -23,25 +24,43 @@ def dashboard_view(request):
@login_required
def characters_view(request):
characterManager = EveCharacterManager()
evemanager = EveManager()
render_items = {'characters':characterManager.get_characters_by_owner_id(request.user.id)}
render_items = {'characters': evemanager.get_characters_by_owner_id(request.user.id)}
return render_to_response('registered/characters.html', render_items, context_instance=RequestContext(request))
@login_required
def api_key_management_view(request):
api = EveApiManager()
evemanager = EveManager()
if request.method == 'POST':
form = UpdateKeyForm(request.POST)
if form.is_valid():
evemanager.create_api_keypair(form.cleaned_data['api_id'],
form.cleaned_data['api_key'],
request.user)
return HttpResponseRedirect("/")
# Grab characters associated with the key pair
characters = api.get_characters_from_api(form.cleaned_data['api_id'], form.cleaned_data['api_key'])
evemanager.create_characters_from_list(characters, request.user, form.cleaned_data['api_id'])
return HttpResponseRedirect("/api_key_management/")
else:
form = UpdateKeyForm(initial={'api_id':request.user.api_id,'api_key':request.user.api_key})
form = UpdateKeyForm()
context = {'form': form, 'apikeypairs': evemanager.get_api_key_pairs(request.user.id)}
return render_to_response('registered/apikeymanagment.html', context,
context_instance=RequestContext(request))
return render_to_response('registered/apikeymanagment.html', {'form':form}, context_instance=RequestContext(request))
@login_required
def api_key_removal(request, api_id):
evemanager = EveManager()
evemanager.delete_api_key_pair(api_id, request.user.id)
evemanager.delete_characters_by_api_id(api_id, request.user.id)
return HttpResponseRedirect("/api_key_management/")
@login_required
def applications_view(request):
@ -51,7 +70,7 @@ def applications_view(request):
@login_required
def main_character_change(request, id):
userManager = AllianceUserManager()
characterManager = EveCharacterManager()
characterManager = EveManager()
if characterManager.check_if_character_owned_by_user(id,request.user.id) == True:
userManager.update_user_main_character(id,request.user.id)
return HttpResponseRedirect("/")
@ -65,7 +84,7 @@ def activate_forum(request):
if userManager.check_if_user_exist(request.user.id):
# Valid now we get the main characters
characterManager = EveCharacterManager()
characterManager = EveManager()
character = characterManager.get_character_by_id(request.user.main_char_id)
if forumManager.check_user(character.character_name) == False:
@ -80,7 +99,7 @@ def activate_jabber(request):
userManager = AllianceUserManager()
jabberManager = JabberManager()
if userManager.check_if_user_exist(request.user.id):
characterManager = EveCharacterManager()
characterManager = EveManager()
character = characterManager.get_character_by_id(request.user.main_char_id)
jabberManager.add_user(character.character_name,"test")
@ -93,11 +112,11 @@ def activate_jabber(request):
@login_required
def activate_mumble(request):
userManager = AllianceUserManager()
characterManager = EveCharacterManager()
characterManager = EveManager()
mumbleManager = MumbleManager()
if userManager.check_if_user_exist(request.user.id):
characterManager = EveCharacterManager()
characterManager = EveManager()
character = characterManager.get_character_by_id(request.user.main_char_id)
mumbleManager.create_user(character.character_name, "test")

View File

@ -2,7 +2,7 @@ from django.http import Http404,HttpResponseRedirect
from django.shortcuts import render_to_response, render
from django.template import RequestContext
from authentication.models import AllianceUserManager
from evespecific.managers import EveCharacterManager
from evespecific.managers import EveManager
from services.eveapi_manager import EveApiManager
from forms import RegistrationForm
@ -10,7 +10,7 @@ from forms import RegistrationForm
def register(request):
api = EveApiManager()
charmanager = EveCharacterManager()
evemanager = EveManager()
if request.method == 'POST':
form = RegistrationForm(request.POST)
@ -18,18 +18,18 @@ def register(request):
if form.is_valid():
usermanager = AllianceUserManager()
if not usermanager.check_if_user_exist_by_name(form.cleaned_data['username']):
user = usermanager.create_user_withapi(
user = usermanager.create_user(
form.cleaned_data['username'],
form.cleaned_data['email'],
form.cleaned_data['password'],
form.cleaned_data['api_id'],
form.cleaned_data['api_key']
form.cleaned_data['password']
)
# Populate character data
# Create api key object
evemanager.create_api_keypair(form.cleaned_data['api_id'], form.cleaned_data['api_key'], user)
# Populate character data
characters = api.get_characters_from_api(form.cleaned_data['api_id'], form.cleaned_data['api_key'])
charmanager.create_characters_from_list(characters, user)
evemanager.create_characters_from_list(characters, user, form.cleaned_data['api_id'])
return HttpResponseRedirect("/dashboard")
else:

View File

@ -24,11 +24,9 @@ class EveApiManager():
def get_corporation_ticker_from_id(self, corp_id):
ticker = ""
try:
print corp_id
api = evelink.api.API()
corp = evelink.corp.Corp(api)
response = corp.corporation_sheet(corp_id)
print response
ticker = response[0]['ticker']
except evelink.api.APIError as error:
print error

View File

@ -1,26 +1,24 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Login Page{% endblock page_title %}
{% block content %}
<div class="container">
<div class="row-fluid">
<div class="center-block" style="center">
<p>
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
{% if error %}
<div class="alert alert-danger" role="alert">Username/Password Invalid</div>
{% endif %}
<form class="form-signin" role="form" action="{% url 'auth_login_user' %}" method="POST">
{% csrf_token %}
<h2 class="form-signin-heading">Please sign in</h2>
{{form.as_p}}
{{form|bootstrap}}
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
<p><a href="{% url 'auth_register' %}">Register Here</a>
</p>
</div>
</div>
<p><a href="{% url 'auth_register' %}">Register Here</a></p>
</div>
</div>
{% endblock content %}

View File

@ -1,36 +1,22 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% block title %}Alliance Auth{% endblock %}
{% block page_title %}Register Page{% endblock page_title %}
{% block content %}
<div class="container">
<div class="row-fluid">
<div class="center-block" style="center">
<p>
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
{% if error %}
<div class="alert alert-danger" role="alert">Username Already Registered</div>
{% endif %}
<form action="{% url 'auth_register' %}" method="POST">
{% csrf_token %}
<h2 class="form-signin-heading">Register Account</h2>
<p>
Username:<br/>
{{form.username.errors}}
{{form.username}}<br/> Email:<br/>
{{form.email.errors}}
{{form.email}}<br/> Password:<br/>
{{form.password.errors}}
{{form.password}}<br/>Api ID: <br/>
{{form.api_id.errors}}
{{form.api_id}}<br/>Api Key: <br/>
{{form.api_key.errors}}
{{form.api_key}}<br/>
</p>
<input type="submit" value="submit" />
{{ form|bootstrap }}
<button class="btn btn-lg btn-primary btn-block" type="submit">Register</button>
</form>
</p>
</div>
</div>
</div>

View File

@ -1,4 +1,5 @@
{% extends "public/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% block title %}Alliance Auth{% endblock %}
@ -8,25 +9,34 @@
{% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
<p> ONE API KEY ONLY ONE SERIOUSLY ONE! BECUASE ONE</p>
<div class="row-fluid">
<div class="center-block" style="center">
<p>
<form action="{% url 'auth_api_key_management' %}" method="POST">
<div class="row">
<h1 class="page-header text-center">API Key Management</h1>
<table class="table table-bordered">
<tr>
<th class="text-center">API ID</th>
<th class="text-center">API Key</th>
<th class="text-center">Action</th>
</tr>
{% for pair in apikeypairs %}
<tr>
<td class="text-center">{{ pair.api_id }}</td>
<td class="text-center">{{ pair.api_key }}</td>
<td class="text-center">
<a href="/delete_api_pair/{{ pair.api_id }}">
<button type="button" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span></button>
</a>
<a href="{% url 'auth_activate_forum' %}">
<button type="button" class="btn btn-primary"><span class="glyphicon glyphicon-refresh"></span></button>
</a>
</td>
</tr>
{% endfor %}
</table>
<form class="form-signin" role="form" action="{% url 'auth_api_key_management' %}" method="POST">
{% csrf_token %}
<h2 class="form-signin-heading">Update Api:</h2>
<p>
API_ID:<br/>
{{form.api_id.errors}}
{{form.api_id}}<br/>API_KEY:<br/>
{{form.api_key.errors}}
{{form.api_key}}<br/>
</p>
<input type="submit" value="submit" class="btn btn-default"/>
<button type="button" class="btn btn-primary">Refresh</button>
{{ form|bootstrap_horizontal }}
<button class="btn btn-lg btn-primary btn-block" type="submit">Create Key</button>
</form>
</p>
</div>
</div>
</div>

View File

@ -8,9 +8,8 @@
{% block content %}
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
{% for character in characters %}
<div class="row">
<div class="col-md-offset-2 col-md-8 col-lg-offset-3 col-lg-6">
{% for character in characters %}
<div class="well well-sm profile">
<div class="col-sm-12">
<div class="col-xs-12 col-sm-8">
@ -28,10 +27,9 @@
<div class="col-md-offset-8">
<a href="/main_character_change/{{character.character_id}}"><button type="button" class="btn btn-primary">Make Primary</button></a>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock content %}