Custom service passwords now available.

- mumble, phpbb, ipboard, jabber
Addresses an evemail request.
This commit is contained in:
Adarnof
2016-01-06 06:56:00 +00:00
parent 1a3d37a93a
commit 0586f0f6d5
9 changed files with 219 additions and 8 deletions

View File

@@ -35,3 +35,11 @@ class FleetFormatterForm(forms.Form):
class DiscordForm(forms.Form):
email = forms.CharField(label="Email Address", required=True)
password = forms.CharField(label="Password", required=True, widget=forms.PasswordInput)
class ServicePasswordForm(forms.Form):
password = forms.CharField(label="Password", required=True)
def clean_password(self):
password = self.cleaned_data['password']
if not len(password) >= 8:
raise forms.ValidationError("Password must be at least 8 characters long.")
return password

View File

@@ -137,8 +137,9 @@ class IPBoardManager:
IPBoardManager.remove_user_from_group(username, g)
@staticmethod
def update_user_password(username, email):
def update_user_password(username, email, plain_password=None):
logger.debug("Settings new IPBoard password for user %s" % username)
plain_password = IPBoardManager.__generate_random_pass()
if not plain_password:
plain_password = IPBoardManager.__generate_random_pass()
IPBoardManager.update_user(username, email, plain_password)
return plain_password

View File

@@ -213,10 +213,11 @@ class MumbleManager:
return False
@staticmethod
def update_user_password(username):
def update_user_password(username, password=None):
logger.debug("Updating mumble user %s password." % username)
dbcursor = connections['mumble'].cursor()
password = MumbleManager.__generate_random_pass()
if not password:
password = MumbleManager.__generate_random_pass()
pwhash = MumbleManager._gen_pwhash(password)
logger.debug("Proceeding with mumble user %s password update - pwhash starts with %s" % (username, pwhash[0:5]))
if MumbleManager.check_user_exist(username):

View File

@@ -82,10 +82,11 @@ class OpenfireManager:
logger.info("Unlocked openfire user %s" % username)
@staticmethod
def update_user_pass(username):
def update_user_pass(username, password=None):
logger.debug("Updating openfire user %s password." % username)
try:
password = OpenfireManager.__generate_random_pass()
if not password:
password = OpenfireManager.__generate_random_pass()
api = ofUsers(settings.OPENFIRE_ADDRESS, settings.OPENFIRE_SECRET_KEY)
api.update_user(username, password=password)
logger.info("Updated openfire user %s password." % username)

View File

@@ -248,10 +248,11 @@ class Phpbb3Manager:
return False
@staticmethod
def update_user_password(username, characterid):
def update_user_password(username, characterid, password=None):
logger.debug("Updating phpbb user %s password" % username)
cursor = connections['phpbb3'].cursor()
password = Phpbb3Manager.__generate_random_pass()
if not password:
password = Phpbb3Manager.__generate_random_pass()
if Phpbb3Manager.check_user(username):
pwhash = Phpbb3Manager.__gen_hash(password)
logger.debug("Proceeding to update phpbb user %s password with pwhash starting with %s" % (username, pwhash[0:5]))

View File

@@ -26,6 +26,7 @@ from celerytask.tasks import update_discord_groups
from forms import JabberBroadcastForm
from forms import FleetFormatterForm
from forms import DiscordForm
from forms import ServicePasswordForm
from util import check_if_user_has_permission
import threading
@@ -457,3 +458,128 @@ def activate_discord(request):
logger.debug("Rendering form for user %s with success %s" % (request.user, success))
context = {'form': form, 'success': success}
return render_to_response('registered/discord.html', context, context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
def set_forum_password(request):
logger.debug("set_forum_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 = Phpbb3Manager.update_user_password(authinfo.forum_username, authinfo.main_char_id, password=password)
if result != "":
AuthServicesInfoManager.update_user_forum_info(authinfo.forum_username, result, request.user)
logger.info("Succesfully reset forum password for user %s" % request.user)
return HttpResponseRedirect("/services/")
else:
logger.error("Failed to install custom forum 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': 'Forum'}
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
def set_mumble_password(request):
logger.debug("set_mumble_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 = MumbleManager.update_user_password(authinfo.mumble_username, password=password)
if result != "":
AuthServicesInfoManager.update_user_mumble_info(authinfo.mumble_username, result, request.user)
logger.info("Succesfully reset forum password for user %s" % request.user)
return HttpResponseRedirect("/services/")
else:
logger.error("Failed to install custom mumble 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': 'Mumble', 'error': error}
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
def set_jabber_password(request):
logger.debug("set_jabber_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 = OpenfireManager.update_user_pass(authinfo.jabber_username, password=password)
if result != "":
AuthServicesInfoManager.update_user_jabber_info(authinfo.jabber_username, result, request.user)
logger.info("Succesfully reset forum password for user %s" % request.user)
return HttpResponseRedirect("/services/")
else:
logger.error("Failed to install custom jabber 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': 'Jabber', 'error': error}
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))
@login_required
@user_passes_test(service_blue_alliance_test)
def set_ipboard_password(request):
logger.debug("set_forum_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 = IPBoardManager.update_user_password(authinfo.ipboard_username, request.user.email, plain_password=password)
if result != "":
AuthServicesInfoManager.update_user_ipboard_info(authinfo.ipboard_username, result, request.user)
logger.info("Succesfully reset forum password for user %s" % request.user)
return HttpResponseRedirect("/services/")
else:
logger.error("Failed to install custom ipboard 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': 'IPBoard', 'error': error}
return render_to_response('registered/service_password.html', context, context_instance=RequestContext(request))