예제 #1
0
def activate_ips4(request):
    logger.debug("activate_ips4 called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding IPS4 user for user %s with main character %s" %
                 (request.user, character))
    result = Ips4Manager.add_user(character.character_name, request.user.email)
    # if empty we failed
    if result[0] != "" and not Ips4Tasks.has_account(request.user):
        ips_user = Ips4User.objects.create(user=request.user,
                                           id=result[2],
                                           username=result[0])
        logger.debug(
            "Updated authserviceinfo for user %s with IPS4 credentials." %
            request.user)
        # update_ips4_groups.delay(request.user.pk)
        logger.info("Successfully activated IPS4 for user %s" % request.user)
        messages.success(request, 'Activated IPSuite4 account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'IPSuite4'
                      })
    else:
        logger.error("Unsuccessful attempt to activate IPS4 for user %s" %
                     request.user)
        messages.error(
            request,
            'An error occurred while processing your IPSuite4 account.')
    return redirect("auth_services")
예제 #2
0
def activate_teamspeak3(request):
    logger.debug("activate_teamspeak3 called by user %s" % request.user)

    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    ticker = character.corporation_ticker

    if authinfo.state == BLUE_STATE:
        logger.debug("Adding TS3 user for blue user %s with main character %s" % (request.user, character))
        # Blue members should have alliance ticker (if in alliance)
        if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists():
            alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0]
            ticker = alliance.alliance_ticker
        result = Teamspeak3Manager.add_blue_user(character.character_name, ticker)
    else:
        logger.debug("Adding TS3 user for user %s with main character %s" % (request.user, character))
        result = Teamspeak3Manager.add_user(character.character_name, ticker)

    # if its empty we failed
    if result[0] is not "":
        Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
        logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
        logger.info("Successfully activated TS3 for user %s" % request.user)
        messages.success(request, 'Activated TeamSpeak3 account.')
        return redirect("auth_verify_teamspeak3")
    logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
    messages.error(request, 'An error occurred while processing your TeamSpeak3 account.')
    return redirect("auth_services")
예제 #3
0
def reset_smf_password(request):
    logger.debug("reset_smf_password called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    if SmfTasks.has_account(request.user) and character is not None:
        result = SmfManager.update_user_password(request.user.smf.username,
                                                 character.character_id)
        # false we failed
        if result != "":
            logger.info("Successfully reset smf password for user %s" %
                        request.user)
            messages.success(request, 'Reset SMF password.')
            credentials = {
                'username': request.user.smf.username,
                'password': result,
            }
            return render(request,
                          'registered/service_credentials.html',
                          context={
                              'credentials': credentials,
                              'service': 'SMF'
                          })
    logger.error("Unsuccessful attempt to reset smf password for user %s" %
                 request.user)
    messages.error(request,
                   'An error occurred while processing your SMF account.')
    return redirect("auth_services")
예제 #4
0
def activate_jabber(request):
    logger.debug("activate_jabber called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding jabber user for user %s with main character %s" %
                 (request.user, character))
    info = OpenfireManager.add_user(character.character_name)
    # If our username is blank means we already had a user
    if info[0] is not "":
        OpenfireUser.objects.update_or_create(user=request.user,
                                              defaults={'username': info[0]})
        logger.debug(
            "Updated authserviceinfo for user %s with jabber credentials. Updating groups."
            % request.user)
        OpenfireTasks.update_groups.delay(request.user.pk)
        logger.info("Successfully activated jabber for user %s" % request.user)
        messages.success(request, 'Activated jabber account.')
        credentials = {
            'username': info[0],
            'password': info[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'Jabber'
                      })
    else:
        logger.error("Unsuccessful attempt to activate jabber for user %s" %
                     request.user)
        messages.error(
            request, 'An error occurred while processing your jabber account.')
    return redirect("auth_services")
예제 #5
0
def set_smf_password(request):
    logger.debug("set_smf_password called by user %s" % request.user)
    if request.method == 'POST':
        logger.debug("Received POST request with form.")
        form = ServicePasswordForm(request.POST)
        logger.debug("Form is valid: %s" % form.is_valid())
        character = EveManager.get_main_character(request.user)
        if form.is_valid() and SmfTasks.has_account(request.user) and character is not None:
            password = form.cleaned_data['password']
            logger.debug("Form contains password of length %s" % len(password))
            result = SmfManager.update_user_password(request.user.smf.username, character.character_id,
                                                     password=password)
            if result != "":
                logger.info("Successfully set smf password for user %s" % request.user)
                messages.success(request, 'Set SMF password.')
            else:
                logger.error("Failed to install custom smf password for user %s" % request.user)
                messages.error(request, 'An error occurred while processing your SMF account.')
            return redirect("auth_services")
    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': 'SMF'}
    return render(request, 'registered/service_password.html', context=context)
예제 #6
0
파일: views.py 프로젝트: iAddz/allianceauth
def activate_teamspeak3(request):
    logger.debug("activate_teamspeak3 called by user %s" % request.user)

    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    ticker = character.corporation_ticker
    with Teamspeak3Manager() as ts3man:
        if authinfo.state == BLUE_STATE:
            logger.debug("Adding TS3 user for blue user %s with main character %s" % (request.user, character))
            # Blue members should have alliance ticker (if in alliance)
            if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists():
                alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0]
                ticker = alliance.alliance_ticker
            result = ts3man.add_blue_user(character.character_name, ticker)
        else:
            logger.debug("Adding TS3 user for user %s with main character %s" % (request.user, character))
            result = ts3man.add_user(character.character_name, ticker)

    # if its empty we failed
    if result[0] is not "":
        Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
        logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
        logger.info("Successfully activated TS3 for user %s" % request.user)
        messages.success(request, 'Activated TeamSpeak3 account.')
        return redirect("auth_verify_teamspeak3")
    logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
    messages.error(request, 'An error occurred while processing your TeamSpeak3 account.')
    return redirect("auth_services")
예제 #7
0
def reset_forum_password(request):
    logger.debug("reset_forum_password called by user %s" % request.user)
    if Phpbb3Tasks.has_account(request.user):
        character = EveManager.get_main_character(request.user)
        result = Phpbb3Manager.update_user_password(
            request.user.phpbb3.username, character.character_id)
        # false we failed
        if result != "":
            logger.info("Successfully reset forum password for user %s" %
                        request.user)
            messages.success(request, 'Reset forum password.')
            credentials = {
                'username': request.user.phpbb3.username,
                'password': result,
            }
            return render(request,
                          'registered/service_credentials.html',
                          context={
                              'credentials': credentials,
                              'service': 'Forum'
                          })

    logger.error("Unsuccessful attempt to reset forum password for user %s" %
                 request.user)
    messages.error(request,
                   'An error occurred while processing your forum account.')
    return redirect("auth_services")
예제 #8
0
def activate_xenforo_forum(request):
    logger.debug("activate_xenforo_forum called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding XenForo user for user %s with main character %s" %
                 (request.user, character))
    result = XenForoManager.add_user(character.character_name,
                                     request.user.email)
    # Based on XenAPI's response codes
    if result['response']['status_code'] == 200:
        XenforoUser.objects.update_or_create(
            user=request.user, defaults={'username': result['username']})
        logger.info(
            "Updated user %s with XenForo credentials. Updating groups." %
            request.user)
        messages.success(request, 'Activated XenForo account.')
        credentials = {
            'username': result['username'],
            'password': result['password'],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'XenForo'
                      })

    else:
        logger.error("Unsuccessful attempt to activate xenforo for user %s" %
                     request.user)
        messages.error(
            request,
            'An error occurred while processing your XenForo account.')
    return redirect("auth_services")
예제 #9
0
파일: views.py 프로젝트: iAddz/allianceauth
def reset_teamspeak3_perm(request):
    logger.debug("reset_teamspeak3_perm called by user %s" % request.user)
    if not Teamspeak3Tasks.has_account(request.user):
        return redirect("auth_services")
    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Deleting TS3 user for user %s" % request.user)
    with Teamspeak3Manager() as ts3man:
        ts3man.delete_user(request.user.teamspeak3.uid)

        if authinfo.state == BLUE_STATE:
            logger.debug(
                "Generating new permission key for blue user %s with main character %s" % (request.user, character))
            result = ts3man.generate_new_blue_permissionkey(request.user.teamspeak3.uid,
                                                            character.character_name,
                                                            character.corporation_ticker)
        else:
            logger.debug("Generating new permission key for user %s with main character %s" % (request.user, character))
            result = ts3man.generate_new_permissionkey(request.user.teamspeak3.uid, character.character_name,
                                                       character.corporation_ticker)

    # if blank we failed
    if result[0] != "":
        Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
        logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
        Teamspeak3Tasks.update_groups.delay(request.user.pk)
        logger.info("Successfully reset TS3 permission key for user %s" % request.user)
        messages.success(request, 'Reset TeamSpeak3 permission key.')
    else:
        logger.error("Unsuccessful attempt to reset TS3 permission key for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your TeamSpeak3 account.')
    return redirect("auth_services")
예제 #10
0
def activate_market(request):
    logger.debug("activate_market called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    if character is not None:
        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,
                                        character.character_id,
                                        character.character_name)
        # if empty we failed
        if result[0] != "":
            MarketUser.objects.create(user=request.user, username=result[0])
            logger.debug(
                "Updated authserviceinfo for user %s with market credentials."
                % request.user)
            logger.info("Successfully activated market for user %s" %
                        request.user)
            messages.success(request, 'Activated Alliance Market account.')
            credentials = {
                'username': result[0],
                'password': result[1],
            }
            return render(request,
                          'registered/service_credentials.html',
                          context={
                              'credentials': credentials,
                              'service': 'Alliance Market'
                          })
    logger.error("Unsuccessful attempt to activate market for user %s" %
                 request.user)
    messages.error(
        request,
        'An error occurred while processing your Alliance Market account.')
    return redirect("auth_services")
예제 #11
0
def set_forum_password(request):
    logger.debug("set_forum_password called by user %s" % request.user)
    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() and Phpbb3Tasks.has_account(request.user):
            password = form.cleaned_data['password']
            logger.debug("Form contains password of length %s" % len(password))
            character = EveManager.get_main_character(request.user)
            result = Phpbb3Manager.update_user_password(
                request.user.phpbb3.username,
                character.character_id,
                password=password)
            if result != "":
                logger.info("Successfully set forum password for user %s" %
                            request.user)
                messages.success(request, 'Set forum password.')
            else:
                logger.error(
                    "Failed to install custom forum password for user %s" %
                    request.user)
                messages.error(
                    request,
                    'An error occurred while processing your forum account.')
            return redirect("auth_services")
    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(request, 'registered/service_password.html', context=context)
예제 #12
0
파일: views.py 프로젝트: iAddz/allianceauth
def activate_seat(request):
    logger.debug("activate_seat called by user %s" % request.user)
    # Valid now we get the main characters
    character = EveManager.get_main_character(request.user)
    logger.debug("Checking SeAT for inactive users with the same username")
    stat = SeatManager.check_user_status(character.character_name)
    if stat == {}:
        logger.debug("User not found, adding SeAT user for user %s with main character %s" % (request.user, character))
        result = SeatManager.add_user(character.character_name, request.user.email)
    else:
        logger.debug("User found, resetting password")
        username = SeatManager.enable_user(stat["name"])
        password = SeatManager.update_user_password(username, request.user.email)
        result = [username, password]
    # if empty we failed
    if result[0] and result[1]:
        SeatUser.objects.update_or_create(user=request.user, defaults={'username': result[0]})
        logger.debug("Updated SeatUser for user %s with SeAT credentials. Adding eve-apis..." % request.user)
        SeatTasks.update_roles.delay(request.user.pk)
        logger.info("Successfully activated SeAT for user %s" % request.user)
        messages.add_message(request, messages.SUCCESS, _('Successfully activated your %(service)s account.') %
                             SERVICE_NAME)
        SeatManager.synchronize_eveapis(request.user)
        credentials = {
            'username': request.user.seat.username,
            'password': result[1],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'SeAT'})
    messages.add_message(request, messages.ERROR,
                         _('Failed to activate your %(service)s account, please contact your administrator.') %
                         SERVICE_NAME)
    logger.error("Unsuccessful attempt to activate seat for user %s" % request.user)
    return redirect("auth_services")
예제 #13
0
def activate_forum(request):
    logger.debug("activate_forum called by user %s" % request.user)
    # Valid now we get the main characters
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding phpbb user for user %s with main character %s" %
                 (request.user, character))
    result = Phpbb3Manager.add_user(character.character_name,
                                    request.user.email, ['REGISTERED'],
                                    character.character_id)
    # if empty we failed
    if result[0] != "":
        Phpbb3User.objects.update_or_create(user=request.user,
                                            defaults={'username': result[0]})
        logger.debug(
            "Updated authserviceinfo for user %s with forum credentials. Updating groups."
            % request.user)
        Phpbb3Tasks.update_groups.delay(request.user.pk)
        logger.info("Successfully activated forum for user %s" % request.user)
        messages.success(request, 'Activated forum account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'Forum'
                      })
    else:
        logger.error("Unsuccessful attempt to activate forum for user %s" %
                     request.user)
        messages.error(
            request, 'An error occurred while processing your forum account.')
    return redirect("auth_services")
예제 #14
0
def activate_mumble(request):
    logger.debug("activate_mumble called by user %s" % request.user)
    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    ticker = character.corporation_ticker

    if authinfo.state == BLUE_STATE:
        logger.debug("Adding mumble user for blue user %s with main character %s" % (request.user, character))
        # Blue members should have alliance ticker (if in alliance)
        if EveAllianceInfo.objects.filter(alliance_id=character.alliance_id).exists():
            alliance = EveAllianceInfo.objects.filter(alliance_id=character.alliance_id)[0]
            ticker = alliance.alliance_ticker
        result = MumbleManager.create_user(request.user, ticker, character.character_name, blue=True)
    else:
        logger.debug("Adding mumble user for user %s with main character %s" % (request.user, character))
        result = MumbleManager.create_user(request.user, ticker, character.character_name)

    if result:
        logger.debug("Updated authserviceinfo for user %s with mumble credentials. Updating groups." % request.user)
        MumbleTasks.update_groups.apply(args=(request.user.pk,))  # Run synchronously to prevent timing issues
        logger.info("Successfully activated mumble for user %s" % request.user)
        messages.success(request, 'Activated Mumble account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'Mumble'})
    else:
        logger.error("Unsuccessful attempt to activate mumble for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your Mumble account.')
    return redirect("auth_services")
예제 #15
0
def reset_teamspeak3_perm(request):
    logger.debug("reset_teamspeak3_perm called by user %s" % request.user)
    if not Teamspeak3Tasks.has_account(request.user):
        return redirect("auth_services")
    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Deleting TS3 user for user %s" % request.user)
    Teamspeak3Manager.delete_user(request.user.teamspeak3.uid)

    if authinfo.state == BLUE_STATE:
        logger.debug(
            "Generating new permission key for blue user %s with main character %s" % (request.user, character))
        result = Teamspeak3Manager.generate_new_blue_permissionkey(request.user.teamspeak3.uid,
                                                                   character.character_name,
                                                                   character.corporation_ticker)
    else:
        logger.debug("Generating new permission key for user %s with main character %s" % (request.user, character))
        result = Teamspeak3Manager.generate_new_permissionkey(request.user.teamspeak3.uid, character.character_name,
                                                              character.corporation_ticker)

    # if blank we failed
    if result[0] != "":
        Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
        logger.debug("Updated authserviceinfo for user %s with TS3 credentials. Updating groups." % request.user)
        Teamspeak3Tasks.update_groups.delay(request.user.pk)
        logger.info("Successfully reset TS3 permission key for user %s" % request.user)
        messages.success(request, 'Reset TeamSpeak3 permission key.')
    else:
        logger.error("Unsuccessful attempt to reset TS3 permission key for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your TeamSpeak3 account.')
    return redirect("auth_services")
예제 #16
0
def jabber_broadcast_view(request):
    logger.debug("jabber_broadcast_view called by user %s" % request.user)
    allchoices = []
    if request.user.has_perm('auth.jabber_broadcast_all'):
        allchoices.append(('all', 'all'))
        for g in Group.objects.all():
            allchoices.append((str(g.name), str(g.name)))
    else:
        for g in request.user.groups.all():
            allchoices.append((str(g.name), str(g.name)))
    if request.method == 'POST':
        form = JabberBroadcastForm(request.POST)
        form.fields['group'].choices = allchoices
        logger.debug("Received POST request containing form, valid: %s" %
                     form.is_valid())
        if form.is_valid():
            main_char = EveManager.get_main_character(request.user)
            logger.debug(
                "Processing jabber broadcast for user %s with main character %s"
                % (request.user, main_char))
            if main_char is not None:
                message_to_send = form.cleaned_data[
                                      'message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
                                  main_char.character_name + " TO: " + \
                                  form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
                    "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
                group_to_send = form.cleaned_data['group']

                OpenfireManager.send_broadcast_threaded(
                    group_to_send,
                    message_to_send,
                )

            else:
                message_to_send = form.cleaned_data[
                    'message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \
                    form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
                    "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
                group_to_send = form.cleaned_data['group']

                OpenfireManager.send_broadcast_threaded(
                    group_to_send,
                    message_to_send,
                )

            messages.success(request,
                             'Sent jabber broadcast to %s' % group_to_send)
            logger.info("Sent jabber broadcast on behalf of user %s" %
                        request.user)
    else:
        form = JabberBroadcastForm()
        form.fields['group'].choices = allchoices
        logger.debug(
            "Generated broadcast form for user %s containing %s groups" %
            (request.user, len(form.fields['group'].choices)))

    context = {'form': form}
    return render(request, 'registered/jabberbroadcast.html', context=context)
예제 #17
0
def activate_mumble(request):
    logger.debug("activate_mumble called by user %s" % request.user)
    authinfo = AuthServicesInfo.objects.get(user=request.user)
    character = EveManager.get_main_character(request.user)
    ticker = character.corporation_ticker

    if authinfo.state == BLUE_STATE:
        logger.debug(
            "Adding mumble user for blue user %s with main character %s" %
            (request.user, character))
        # Blue members should have alliance ticker (if in alliance)
        if EveAllianceInfo.objects.filter(
                alliance_id=character.alliance_id).exists():
            alliance = EveAllianceInfo.objects.filter(
                alliance_id=character.alliance_id)[0]
            ticker = alliance.alliance_ticker
        result = MumbleManager.create_user(request.user,
                                           ticker,
                                           character.character_name,
                                           blue=True)
    else:
        logger.debug("Adding mumble user for user %s with main character %s" %
                     (request.user, character))
        result = MumbleManager.create_user(request.user, ticker,
                                           character.character_name)

    if result:
        logger.debug(
            "Updated authserviceinfo for user %s with mumble credentials. Updating groups."
            % request.user)
        MumbleTasks.update_groups.apply(args=(
            request.user.pk, ))  # Run synchronously to prevent timing issues
        logger.info("Successfully activated mumble for user %s" % request.user)
        messages.success(request, 'Activated Mumble account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'Mumble'
                      })
    else:
        logger.error("Unsuccessful attempt to activate mumble for user %s" %
                     request.user)
        messages.error(
            request, 'An error occurred while processing your Mumble account.')
    return redirect("auth_services")
예제 #18
0
def activate_seat(request):
    logger.debug("activate_seat called by user %s" % request.user)
    # Valid now we get the main characters
    character = EveManager.get_main_character(request.user)
    logger.debug("Checking SeAT for inactive users with the same username")
    stat = SeatManager.check_user_status(character.character_name)
    if stat == {}:
        logger.debug(
            "User not found, adding SeAT user for user %s with main character %s"
            % (request.user, character))
        result = SeatManager.add_user(character.character_name,
                                      request.user.email)
    else:
        logger.debug("User found, resetting password")
        username = SeatManager.enable_user(stat["name"])
        password = SeatManager.update_user_password(username,
                                                    request.user.email)
        result = [username, password]
    # if empty we failed
    if result[0] and result[1]:
        SeatUser.objects.update_or_create(user=request.user,
                                          defaults={'username': result[0]})
        logger.debug(
            "Updated SeatUser for user %s with SeAT credentials. Adding eve-apis..."
            % request.user)
        SeatTasks.update_roles.delay(request.user.pk)
        logger.info("Successfully activated SeAT for user %s" % request.user)
        messages.add_message(
            request, messages.SUCCESS,
            _('Successfully activated your %(service)s account.') %
            SERVICE_NAME)
        SeatManager.synchronize_eveapis(request.user)
        credentials = {
            'username': request.user.seat.username,
            'password': result[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'SeAT'
                      })
    messages.add_message(
        request, messages.ERROR,
        _('Failed to activate your %(service)s account, please contact your administrator.'
          ) % SERVICE_NAME)
    logger.error("Unsuccessful attempt to activate seat for user %s" %
                 request.user)
    return redirect("auth_services")
예제 #19
0
def jabber_broadcast_view(request):
    logger.debug("jabber_broadcast_view called by user %s" % request.user)
    allchoices = []
    if request.user.has_perm('auth.jabber_broadcast_all'):
        allchoices.append(('all', 'all'))
        for g in Group.objects.all():
            allchoices.append((str(g.name), str(g.name)))
    else:
        for g in request.user.groups.all():
            allchoices.append((str(g.name), str(g.name)))
    if request.method == 'POST':
        form = JabberBroadcastForm(request.POST)
        form.fields['group'].choices = allchoices
        logger.debug("Received POST request containing form, valid: %s" % form.is_valid())
        if form.is_valid():
            main_char = EveManager.get_main_character(request.user)
            logger.debug("Processing jabber broadcast for user %s with main character %s" % (request.user, main_char))
            try:
                if main_char is not None:
                    message_to_send = form.cleaned_data[
                                          'message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
                                      main_char.character_name + " TO: " + \
                                      form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
                        "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
                    group_to_send = form.cleaned_data['group']

                else:
                    message_to_send = form.cleaned_data[
                        'message'] + "\n##### SENT BY: " + "No character but can send pings?" + " TO: " + \
                        form.cleaned_data['group'] + " WHEN: " + datetime.datetime.utcnow().strftime(
                        "%Y-%m-%d %H:%M:%S") + " #####\n##### Replies are NOT monitored #####\n"
                    group_to_send = form.cleaned_data['group']

                OpenfireManager.send_broadcast_message(group_to_send, message_to_send)

                messages.success(request, 'Sent jabber broadcast to %s' % group_to_send)
                logger.info("Sent jabber broadcast on behalf of user %s" % request.user)
            except PingBotException as e:
                messages.error(request, e)

    else:
        form = JabberBroadcastForm()
        form.fields['group'].choices = allchoices
        logger.debug("Generated broadcast form for user %s containing %s groups" % (
            request.user, len(form.fields['group'].choices)))

    context = {'form': form}
    return render(request, 'registered/jabberbroadcast.html', context=context)
예제 #20
0
 def update_nickname(self, pk):
     user = User.objects.get(pk=pk)
     logger.debug("Updating discord nickname for user %s" % user)
     if DiscordTasks.has_account(user):
         character = EveManager.get_main_character(user)
         logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name))
         try:
             DiscordOAuthManager.update_nickname(user.discord.uid, character.character_name)
         except Exception as e:
             if self:
                 logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user)
                 raise self.retry(countdown=60 * 10)
             else:
                 # Rethrow
                 raise e
         logger.debug("Updated user %s discord nickname." % user)
     else:
         logger.debug("User %s does not have a discord account" % user)
예제 #21
0
def reset_smf_password(request):
    logger.debug("reset_smf_password called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    if SmfTasks.has_account(request.user) and character is not None:
        result = SmfManager.update_user_password(request.user.smf.username, character.character_id)
        # false we failed
        if result != "":
            logger.info("Successfully reset smf password for user %s" % request.user)
            messages.success(request, 'Reset SMF password.')
            credentials = {
                'username': request.user.smf.username,
                'password': result,
            }
            return render(request, 'registered/service_credentials.html',
                          context={'credentials': credentials, 'service': 'SMF'})
    logger.error("Unsuccessful attempt to reset smf password for user %s" % request.user)
    messages.error(request, 'An error occurred while processing your SMF account.')
    return redirect("auth_services")
예제 #22
0
 def update_nickname(self, pk):
     user = User.objects.get(pk=pk)
     logger.debug("Updating discord nickname for user %s" % user)
     if DiscordTasks.has_account(user):
         character = EveManager.get_main_character(user)
         logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name))
         try:
             DiscordOAuthManager.update_nickname(user.discord.uid, character.character_name)
         except Exception as e:
             if self:
                 logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user)
                 raise self.retry(countdown=60 * 10)
             else:
                 # Rethrow
                 raise e
         logger.debug("Updated user %s discord nickname." % user)
     else:
         logger.debug("User %s does not have a discord account" % user)
예제 #23
0
def reset_forum_password(request):
    logger.debug("reset_forum_password called by user %s" % request.user)
    if Phpbb3Tasks.has_account(request.user):
        character = EveManager.get_main_character(request.user)
        result = Phpbb3Manager.update_user_password(request.user.phpbb3.username, character.character_id)
        # false we failed
        if result != "":
            logger.info("Successfully reset forum password for user %s" % request.user)
            messages.success(request, 'Reset forum password.')
            credentials = {
                'username': request.user.phpbb3.username,
                'password': result,
            }
            return render(request, 'registered/service_credentials.html',
                          context={'credentials': credentials, 'service': 'Forum'})

    logger.error("Unsuccessful attempt to reset forum password for user %s" % request.user)
    messages.error(request, 'An error occurred while processing your forum account.')
    return redirect("auth_services")
예제 #24
0
def activate_xenforo_forum(request):
    logger.debug("activate_xenforo_forum called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding XenForo user for user %s with main character %s" % (request.user, character))
    result = XenForoManager.add_user(character.character_name, request.user.email)
    # Based on XenAPI's response codes
    if result['response']['status_code'] == 200:
        XenforoUser.objects.update_or_create(user=request.user, defaults={'username': result['username']})
        logger.info("Updated user %s with XenForo credentials. Updating groups." % request.user)
        messages.success(request, 'Activated XenForo account.')
        credentials = {
            'username': result['username'],
            'password': result['password'],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'XenForo'})

    else:
        logger.error("Unsuccessful attempt to activate xenforo for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your XenForo account.')
    return redirect("auth_services")
예제 #25
0
def activate_jabber(request):
    logger.debug("activate_jabber called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding jabber user for user %s with main character %s" % (request.user, character))
    info = OpenfireManager.add_user(character.character_name)
    # If our username is blank means we already had a user
    if info[0] is not "":
        OpenfireUser.objects.update_or_create(user=request.user, defaults={'username': info[0]})
        logger.debug("Updated authserviceinfo for user %s with jabber credentials. Updating groups." % request.user)
        OpenfireTasks.update_groups.delay(request.user.pk)
        logger.info("Successfully activated jabber for user %s" % request.user)
        messages.success(request, 'Activated jabber account.')
        credentials = {
            'username': info[0],
            'password': info[1],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'Jabber'})
    else:
        logger.error("Unsuccessful attempt to activate jabber for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your jabber account.')
    return redirect("auth_services")
예제 #26
0
def activate_market(request):
    logger.debug("activate_market called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    if character is not None:
        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, character.character_id,
                                        character.character_name)
        # if empty we failed
        if result[0] != "":
            MarketUser.objects.create(user=request.user, username=result[0])
            logger.debug("Updated authserviceinfo for user %s with market credentials." % request.user)
            logger.info("Successfully activated market for user %s" % request.user)
            messages.success(request, 'Activated Alliance Market account.')
            credentials = {
                'username': result[0],
                'password': result[1],
            }
            return render(request, 'registered/service_credentials.html',
                          context={'credentials': credentials, 'service': 'Alliance Market'})
    logger.error("Unsuccessful attempt to activate market for user %s" % request.user)
    messages.error(request, 'An error occurred while processing your Alliance Market account.')
    return redirect("auth_services")
예제 #27
0
def activate_ips4(request):
    logger.debug("activate_ips4 called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding IPS4 user for user %s with main character %s" % (request.user, character))
    result = Ips4Manager.add_user(character.character_name, request.user.email)
    # if empty we failed
    if result[0] != "" and not Ips4Tasks.has_account(request.user):
        ips_user = Ips4User.objects.create(user=request.user, id=result[2], username=result[0])
        logger.debug("Updated authserviceinfo for user %s with IPS4 credentials." % request.user)
        # update_ips4_groups.delay(request.user.pk)
        logger.info("Successfully activated IPS4 for user %s" % request.user)
        messages.success(request, 'Activated IPSuite4 account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'IPSuite4'})
    else:
        logger.error("Unsuccessful attempt to activate IPS4 for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your IPSuite4 account.')
    return redirect("auth_services")
예제 #28
0
def activate_smf(request):
    logger.debug("activate_smf called by user %s" % request.user)
    # Valid now we get the main characters
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding smf user for user %s with main character %s" % (request.user, character))
    result = SmfManager.add_user(character.character_name, request.user.email, ['Member'], character.character_id)
    # if empty we failed
    if result[0] != "":
        SmfUser.objects.update_or_create(user=request.user, defaults={'username': result[0]})
        logger.debug("Updated authserviceinfo for user %s with smf credentials. Updating groups." % request.user)
        SmfTasks.update_groups.delay(request.user.pk)
        logger.info("Successfully activated smf for user %s" % request.user)
        messages.success(request, 'Activated SMF account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request, 'registered/service_credentials.html',
                      context={'credentials': credentials, 'service': 'SMF'})
    else:
        logger.error("Unsuccessful attempt to activate smf for user %s" % request.user)
        messages.error(request, 'An error occurred while processing your SMF account.')
    return redirect("auth_services")
예제 #29
0
def activate_ipboard_forum(request):
    logger.debug("activate_ipboard_forum called by user %s" % request.user)
    character = EveManager.get_main_character(request.user)
    logger.debug("Adding ipboard user for user %s with main character %s" %
                 (request.user, character))
    result = IPBoardManager.add_user(character.character_name,
                                     request.user.email)
    if result[0] != "":
        ipboard_user = IpboardUser()
        ipboard_user.user = request.user
        ipboard_user.username = result[0]
        ipboard_user.save()
        logger.debug(
            "Updated authserviceinfo for user %s with ipboard credentials. Updating groups."
            % request.user)
        IpboardTasks.update_groups.delay(request.user.pk)
        logger.info("Successfully activated ipboard for user %s" %
                    request.user)
        messages.success(request, 'Activated IPBoard account.')
        credentials = {
            'username': result[0],
            'password': result[1],
        }
        return render(request,
                      'registered/service_credentials.html',
                      context={
                          'credentials': credentials,
                          'service': 'IPBoard'
                      })
    else:
        logger.error("Unsuccessful attempt to activate ipboard for user %s" %
                     request.user)
        messages.error(
            request,
            'An error occurred while processing your IPBoard account.')
    return redirect("auth_services")
예제 #30
0
 def render_services_ctrl(self, request):
     return render_to_string(self.service_ctrl_template, {
         'char': EveManager.get_main_character(request.user)
     }, request=request)
예제 #31
0
def discourse_sso(request):

    ## Check if user has access

    auth = AuthServicesInfo.objects.get(user=request.user)
    if not request.user.has_perm(ACCESS_PERM):
            messages.error(request, 'You are not authorized to access Discourse.')
            return redirect('auth_dashboard')

    if not auth.main_char_id:
        messages.error(request, "You must have a main character set to access Discourse.")
        return redirect('auth_characters')

    main_char = EveManager.get_main_character(request.user)
    if main_char is None:
        messages.error(request, "Your main character is missing a database model. Please select a new one.")
        return redirect('auth_characters')

    payload = request.GET.get('sso')
    signature = request.GET.get('sig')

    if None in [payload, signature]:
        messages.error(request, 'No SSO payload or signature. Please contact support if this problem persists.')
        return redirect('auth_dashboard')

    ## Validate the payload

    try:
        payload = unquote(payload).encode('utf-8')
        decoded = base64.decodestring(payload).decode('utf-8')
        assert 'nonce' in decoded
        assert len(payload) > 0
    except AssertionError:
        messages.error(request, 'Invalid payload. Please contact support if this problem persists.')
        return redirect('auth_dashboard')

    key = str(settings.DISCOURSE_SSO_SECRET).encode('utf-8')
    h = hmac.new(key, payload, digestmod=hashlib.sha256)
    this_signature = h.hexdigest()

    if this_signature != signature:
        messages.error(request, 'Invalid payload. Please contact support if this problem persists.')
        return redirect('auth_dashboard')

    ## Build the return payload

    username = DiscourseManager._sanitize_username(main_char.character_name)

    qs = parse_qs(decoded)
    params = {
        'nonce': qs['nonce'][0],
        'email': request.user.email,
        'external_id': request.user.pk,
        'username': username,
        'name': username,
    }

    if auth.main_char_id:
        params['avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % auth.main_char_id

    return_payload = base64.encodestring(urlencode(params).encode('utf-8'))
    h = hmac.new(key, return_payload, digestmod=hashlib.sha256)
    query_string = urlencode({'sso': return_payload, 'sig': h.hexdigest()})

    ## Record activation and queue group sync

    if not DiscourseTasks.has_account(request.user):
        discourse_user = DiscourseUser()
        discourse_user.user = request.user
        discourse_user.enabled = True
        discourse_user.save()
        DiscourseTasks.update_groups.apply_async(args=[request.user.pk], countdown=30) # wait 30s for new user creation on Discourse

    ## Redirect back to Discourse

    url = '%s/session/sso_login' % settings.DISCOURSE_URL
    return redirect('%s?%s' % (url, query_string))
예제 #32
0
 def render_services_ctrl(self, request):
     return render_to_string(self.service_ctrl_template, {
         'char': EveManager.get_main_character(request.user)
     }, request=request)
예제 #33
0
def discourse_sso(request):

    ## Check if user has access

    auth = AuthServicesInfo.objects.get(user=request.user)
    if not request.user.has_perm(ACCESS_PERM):
        messages.error(request, 'You are not authorized to access Discourse.')
        return redirect('auth_dashboard')

    if not auth.main_char_id:
        messages.error(
            request, "You must have a main character set to access Discourse.")
        return redirect('auth_characters')

    main_char = EveManager.get_main_character(request.user)
    if main_char is None:
        messages.error(
            request,
            "Your main character is missing a database model. Please select a new one."
        )
        return redirect('auth_characters')

    payload = request.GET.get('sso')
    signature = request.GET.get('sig')

    if None in [payload, signature]:
        messages.error(
            request,
            'No SSO payload or signature. Please contact support if this problem persists.'
        )
        return redirect('auth_dashboard')

    ## Validate the payload

    try:
        payload = unquote(payload).encode('utf-8')
        decoded = base64.decodestring(payload).decode('utf-8')
        assert 'nonce' in decoded
        assert len(payload) > 0
    except AssertionError:
        messages.error(
            request,
            'Invalid payload. Please contact support if this problem persists.'
        )
        return redirect('auth_dashboard')

    key = str(settings.DISCOURSE_SSO_SECRET).encode('utf-8')
    h = hmac.new(key, payload, digestmod=hashlib.sha256)
    this_signature = h.hexdigest()

    if this_signature != signature:
        messages.error(
            request,
            'Invalid payload. Please contact support if this problem persists.'
        )
        return redirect('auth_dashboard')

    ## Build the return payload

    username = DiscourseManager._sanitize_username(main_char.character_name)

    qs = parse_qs(decoded)
    params = {
        'nonce': qs['nonce'][0],
        'email': request.user.email,
        'external_id': request.user.pk,
        'username': username,
        'name': username,
    }

    if auth.main_char_id:
        params[
            'avatar_url'] = 'https://image.eveonline.com/Character/%s_256.jpg' % auth.main_char_id

    return_payload = base64.encodestring(urlencode(params).encode('utf-8'))
    h = hmac.new(key, return_payload, digestmod=hashlib.sha256)
    query_string = urlencode({'sso': return_payload, 'sig': h.hexdigest()})

    ## Record activation and queue group sync

    if not DiscourseTasks.has_account(request.user):
        discourse_user = DiscourseUser()
        discourse_user.user = request.user
        discourse_user.enabled = True
        discourse_user.save()
        DiscourseTasks.update_groups.apply_async(
            args=[request.user.pk],
            countdown=30)  # wait 30s for new user creation on Discourse

    ## Redirect back to Discourse

    url = '%s/session/sso_login' % settings.DISCOURSE_URL
    return redirect('%s?%s' % (url, query_string))