mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-07 07:36:20 +01:00
Evernus Alliance Market Integration (#369)
* Added SMF Forum Support * removed comment * Fixed bugs. * removed unused SQL statement * Fixed Grammer in debug code * Fixed Null Bug * Update operationmanagement.html * fixed bug * fixed error * Users now show up on the posts correctly * Evernus Alliance Market Integration * removed duplicate function * empty string handling
This commit is contained in:
145
services/managers/market_manager.py
Normal file
145
services/managers/market_manager.py
Normal file
@@ -0,0 +1,145 @@
|
||||
import logging
|
||||
from django.conf import settings
|
||||
import requests
|
||||
import os
|
||||
|
||||
from django.db import connections
|
||||
from passlib.hash import bcrypt
|
||||
## requires yum install libffi-devel and pip install bcrypt
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
class marketManager:
|
||||
|
||||
SQL_ADD_USER = r"INSERT INTO fos_user (username, username_canonical, email, email_canonical, enabled, salt, password," \
|
||||
r"locked, expired, roles, credentials_expired, characterid, characterName)" \
|
||||
r"VALUES (%s, %s, %s, %s, 1,%s, %s, 0, 0, 'a:0:{}', 0, %s, %s) "
|
||||
SQL_GET_USER_ID = r"SELECT id FROM fos_user WHERE username = %s"
|
||||
SQL_DISABLE_USER = r"UPDATE fos_user SET enabled = '0' WHERE username = %s"
|
||||
SQL_ENABLE_USER = r"UPDATE fos_user SET enabled = '1' WHERE username = %s"
|
||||
SQL_UPDATE_PASSWORD = r"UPDATE fos_user SET password = %s, salt = %s WHERE username = %s"
|
||||
SQL_CHECK_EMAIL = r"SELECT email FROM fos_user WHERE email = %s"
|
||||
SQL_CHECK_USERNAME = r"SELECT username FROM fos_user WHERE username = %s"
|
||||
SQL_UPDATE_USER = r"UPDATE fos_user SET password = %s, salt = %s, enabled = '1' WHERE username = %s"
|
||||
|
||||
|
||||
@staticmethod
|
||||
def __santatize_username(username):
|
||||
sanatized = username.replace(" ", "_")
|
||||
sanatized = sanatized.replace("'", "")
|
||||
return sanatized.lower()
|
||||
|
||||
@staticmethod
|
||||
def __generate_random_pass():
|
||||
return os.urandom(8).encode('hex')
|
||||
|
||||
@staticmethod
|
||||
def check_username(username):
|
||||
logger.debug("Checking alliance market username %s" % username)
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_CHECK_USERNAME, [marketManager.__santatize_username(username)])
|
||||
row = cursor.fetchone()
|
||||
if row:
|
||||
logger.debug("Found user %s on alliance market" % username)
|
||||
return True
|
||||
logger.debug("User %s not found on alliance market" % username)
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def check_user_email(username, email):
|
||||
logger.debug("Checking if alliance market email exists for user %s" % username)
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_CHECK_EMAIL, [email])
|
||||
row = cursor.fetchone()
|
||||
if row:
|
||||
logger.debug("Found user %s email address on alliance market" % username)
|
||||
return True
|
||||
logger.debug("User %s email address not found on alliance market" % username)
|
||||
return False
|
||||
|
||||
|
||||
@staticmethod
|
||||
def add_user(username, email, characterid, charactername):
|
||||
logger.debug("Adding new market user %s" % username)
|
||||
plain_password = marketManager.__generate_random_pass()
|
||||
hash = bcrypt.encrypt(plain_password, rounds=13)
|
||||
hash_result = hash
|
||||
rounds_striped = hash_result.strip('$2a$13$')
|
||||
salt = rounds_striped[:22]
|
||||
username_clean = marketManager.__santatize_username(username)
|
||||
if marketManager.check_username(username)== False:
|
||||
if marketManager.check_user_email(username, email) == False:
|
||||
try:
|
||||
logger.debug("Adding user %s to alliance market" % username)
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_ADD_USER, [username_clean, username_clean, email, email, salt,
|
||||
hash, characterid, charactername])
|
||||
return username_clean, plain_password
|
||||
except:
|
||||
logger.debug("Unsuccessful attempt to add market user %s" % username)
|
||||
return "", ""
|
||||
else:
|
||||
logger.debug("Alliance market email %s already exists Updating instead" % email)
|
||||
username_clean, password = marketManager.update_user_info(username)
|
||||
return username_clean, password
|
||||
else:
|
||||
logger.debug("Alliance market username %s already exists Updating instead" % username)
|
||||
username_clean, password = marketManager.update_user_info(username)
|
||||
return username_clean, password
|
||||
|
||||
@staticmethod
|
||||
def disable_user(username):
|
||||
logger.debug("Disabling alliance market user %s " % username)
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_DISABLE_USER, [username])
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def update_custom_password(username, plain_password):
|
||||
logger.debug("Updating alliance market user %s password" % username)
|
||||
if marketManager.check_username(username):
|
||||
username_clean = marketManager.__santatize_username(username)
|
||||
hash = bcrypt.encrypt(plain_password, rounds=13)
|
||||
hash_result = hash
|
||||
rounds_striped = hash_result.strip('$2a$13$')
|
||||
salt = rounds_striped[:22]
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_UPDATE_PASSWORD, [hash, salt, username_clean])
|
||||
return plain_password
|
||||
else:
|
||||
logger.error("Unable to update alliance market user %s password" % username)
|
||||
return ""
|
||||
|
||||
@staticmethod
|
||||
def update_user_password(username):
|
||||
logger.debug("Updating alliance market user %s password" % username)
|
||||
if marketManager.check_username(username):
|
||||
username_clean = marketManager.__santatize_username(username)
|
||||
plain_password = marketManager.__generate_random_pass()
|
||||
hash = bcrypt.encrypt(plain_password, rounds=13)
|
||||
hash_result = hash
|
||||
rounds_striped = hash_result.strip('$2a$13$')
|
||||
salt = rounds_striped[:22]
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_UPDATE_PASSWORD, [hash, salt, username_clean])
|
||||
return plain_password
|
||||
else:
|
||||
logger.error("Unable to update alliance market user %s password" % username)
|
||||
return ""
|
||||
|
||||
@staticmethod
|
||||
def update_user_info(username):
|
||||
logger.debug("Updating alliance market user %s" % username)
|
||||
try:
|
||||
username_clean = marketManager.__santatize_username(username)
|
||||
plain_password = marketManager.__generate_random_pass()
|
||||
hash = bcrypt.encrypt(plain_password, rounds=13)
|
||||
hash_result = hash
|
||||
rounds_striped = hash_result.strip('$2a$13$')
|
||||
salt = rounds_striped[:22]
|
||||
cursor = connections['market'].cursor()
|
||||
cursor.execute(marketManager.SQL_UPDATE_USER, [hash, salt, username_clean])
|
||||
return username_clean, plain_password
|
||||
except:
|
||||
logger.debug("Alliance market update user failed for %s" % username)
|
||||
return "", ""
|
||||
@@ -16,6 +16,7 @@ from managers.teamspeak3_manager import Teamspeak3Manager
|
||||
from managers.discord_manager import DiscordManager
|
||||
from managers.ips4_manager import Ips4Manager
|
||||
from managers.smf_manager import smfManager
|
||||
from managers.market_manager import marketManager
|
||||
from authentication.managers import AuthServicesInfoManager
|
||||
from eveonline.managers import EveManager
|
||||
from celerytask.tasks import update_jabber_groups
|
||||
@@ -763,5 +764,84 @@ def set_smf_password(request):
|
||||
form = ServicePasswordForm()
|
||||
|
||||
logger.debug("Rendering form for user %s" % request.user)
|
||||
context = {'form': form, 'service': 'Forum'}
|
||||
context = {'form': form, 'service': 'SMF'}
|
||||
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def activate_market(request):
|
||||
logger.debug("activate_market called by user %s" % request.user)
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
# Valid now we get the main characters
|
||||
character = EveManager.get_character_by_id(authinfo.main_char_id)
|
||||
logger.debug("Adding market user for user %s with main character %s" % (request.user, character))
|
||||
result = marketManager.add_user(character.character_name, request.user.email, authinfo.main_char_id, character.character_name)
|
||||
# if empty we failed
|
||||
if result[0] != "":
|
||||
AuthServicesInfoManager.update_user_market_info(result[0], result[1], request.user)
|
||||
logger.debug("Updated authserviceinfo for user %s with market credentials." % request.user)
|
||||
logger.info("Succesfully activated market for user %s" % request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
logger.error("Unsuccesful attempt to activate market for user %s" % request.user)
|
||||
return HttpResponseRedirect("/dashboard")
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def deactivate_market(request):
|
||||
logger.debug("deactivate_market called by user %s" % request.user)
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
result = marketManager.disable_user(authinfo.market_username)
|
||||
# false we failed
|
||||
if result:
|
||||
AuthServicesInfoManager.update_user_market_info("", "", request.user)
|
||||
logger.info("Succesfully deactivated market for user %s" % request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
logger.error("Unsuccesful attempt to activate market for user %s" % request.user)
|
||||
return HttpResponseRedirect("/dashboard")
|
||||
|
||||
|
||||
@login_required
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def reset_market_password(request):
|
||||
logger.debug("reset_market_password called by user %s" % request.user)
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
result = marketManager.update_user_password(authinfo.market_username)
|
||||
# false we failed
|
||||
if result != "":
|
||||
AuthServicesInfoManager.update_user_market_info(authinfo.market_username, result, request.user)
|
||||
logger.info("Succesfully reset market password for user %s" % request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
logger.error("Unsuccessful attempt to reset market password for user %s" % request.user)
|
||||
return HttpResponseRedirect("/dashboard")
|
||||
|
||||
@login_required
|
||||
@user_passes_test(service_blue_alliance_test)
|
||||
def set_market_password(request):
|
||||
logger.debug("set_market_password called by user %s" % request.user)
|
||||
error = None
|
||||
if request.method == 'POST':
|
||||
logger.debug("Received POST request with form.")
|
||||
form = ServicePasswordForm(request.POST)
|
||||
logger.debug("Form is valid: %s" % form.is_valid())
|
||||
if form.is_valid():
|
||||
password = form.cleaned_data['password']
|
||||
logger.debug("Form contains password of length %s" % len(password))
|
||||
authinfo = AuthServicesInfoManager.get_auth_service_info(request.user)
|
||||
result = marketManager.update_custom_password(authinfo.market_username, password)
|
||||
if result != "":
|
||||
AuthServicesInfoManager.update_user_market_info(authinfo.market_username, result, request.user)
|
||||
logger.info("Succesfully reset market password for user %s" % request.user)
|
||||
return HttpResponseRedirect("/services/")
|
||||
else:
|
||||
logger.error("Failed to install custom market password for user %s" % request.user)
|
||||
error = "Failed to install custom password."
|
||||
else:
|
||||
error = "Invalid password provided"
|
||||
else:
|
||||
logger.debug("Request is not type POST - providing empty form.")
|
||||
form = ServicePasswordForm()
|
||||
|
||||
logger.debug("Rendering form for user %s" % request.user)
|
||||
context = {'form': form, 'service': 'Market'}
|
||||
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))
|
||||
Reference in New Issue
Block a user