mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-04 14:16:21 +01:00
Compare commits
45 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5de19c43df | ||
|
|
6a0ddc9a83 | ||
|
|
03be66d11f | ||
|
|
7e312bb95f | ||
|
|
c92fee78e2 | ||
|
|
658a8cd6ce | ||
|
|
c1dc130766 | ||
|
|
35f5573b63 | ||
|
|
21f0a96422 | ||
|
|
9e47d19337 | ||
|
|
2c5972d0ab | ||
|
|
ee41d62c13 | ||
|
|
346b4014a9 | ||
|
|
9b56a441ed | ||
|
|
068bf1ae7a | ||
|
|
5be686e3ca | ||
|
|
a215b4411c | ||
|
|
e15cfa0fb1 | ||
|
|
46d51699f4 | ||
|
|
ff30a136d5 | ||
|
|
6dcf3304d5 | ||
|
|
beddeea338 | ||
|
|
69723937f7 | ||
|
|
c541f56ee2 | ||
|
|
7e887e5e34 | ||
|
|
072327c79f | ||
|
|
28af3ff11e | ||
|
|
e3b151f2fb | ||
|
|
f87d7dbdf8 | ||
|
|
a04e6ae3d0 | ||
|
|
15042f5e77 | ||
|
|
6e25361d5e | ||
|
|
9e639a0eeb | ||
|
|
257fbdef36 | ||
|
|
df003c8ec5 | ||
|
|
ba22685eb8 | ||
|
|
773288072a | ||
|
|
63afb13d25 | ||
|
|
5dd286bbe7 | ||
|
|
8aaa8172ca | ||
|
|
b68b401146 | ||
|
|
a6526d6f78 | ||
|
|
7898594909 | ||
|
|
cfd12ee3cc | ||
|
|
2c9177b19f |
@@ -223,7 +223,7 @@ test-docs:
|
||||
<<: *only-default
|
||||
image: python:3.11-bullseye
|
||||
script:
|
||||
- tox -e docs
|
||||
- tox -e docs
|
||||
|
||||
deploy_production:
|
||||
stage: deploy
|
||||
@@ -259,16 +259,7 @@ build-image:
|
||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
docker buildx create --use --name new-builder
|
||||
docker buildx build .
|
||||
--tag $IMAGE_TAG
|
||||
--tag $CURRENT_TAG
|
||||
--tag $MINOR_TAG
|
||||
--tag $MAJOR_TAG
|
||||
--tag $LATEST_TAG
|
||||
--file docker/Dockerfile
|
||||
--platform linux/amd64,linux/arm64
|
||||
--push
|
||||
--build-arg AUTH_VERSION=$(echo $CI_COMMIT_TAG | cut -c 2-)
|
||||
docker buildx build . --tag $IMAGE_TAG --tag $CURRENT_TAG --tag $MINOR_TAG --tag $MAJOR_TAG --tag $LATEST_TAG --file docker/Dockerfile --platform linux/amd64,linux/arm64 --push --build-arg AUTH_VERSION=$(echo $CI_COMMIT_TAG | cut -c 2-)
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
when: delayed
|
||||
@@ -288,12 +279,7 @@ build-image-dev:
|
||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
docker buildx create --use --name new-builder
|
||||
docker buildx build .
|
||||
--tag $IMAGE_TAG
|
||||
--file docker/Dockerfile
|
||||
--platform linux/amd64,linux/arm64
|
||||
--push
|
||||
--build-arg AUTH_PACKAGE=git+https://gitlab.com/allianceauth/allianceauth@$CI_COMMIT_BRANCH
|
||||
docker buildx build . --tag $IMAGE_TAG --file docker/Dockerfile --platform linux/amd64,linux/arm64 --push --build-arg AUTH_PACKAGE=git+https://gitlab.com/allianceauth/allianceauth@$CI_COMMIT_BRANCH
|
||||
rules:
|
||||
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == ""'
|
||||
when: manual
|
||||
@@ -314,12 +300,7 @@ build-image-mr:
|
||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||
docker buildx create --use --name new-builder
|
||||
docker buildx build .
|
||||
--tag $IMAGE_TAG
|
||||
--file docker/Dockerfile
|
||||
--platform linux/amd64,linux/arm64
|
||||
--push
|
||||
--build-arg AUTH_PACKAGE=git+$CI_MERGE_REQUEST_SOURCE_PROJECT_URL@$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
|
||||
docker buildx build . --tag $IMAGE_TAG --file docker/Dockerfile --platform linux/amd64,linux/arm64 --push --build-arg AUTH_PACKAGE=git+$CI_MERGE_REQUEST_SOURCE_PROJECT_URL@$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
|
||||
rules:
|
||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||
when: manual
|
||||
|
||||
@@ -5,7 +5,7 @@ manage online service access.
|
||||
# This will make sure the app is always imported when
|
||||
# Django starts so that shared_task will use this app.
|
||||
|
||||
__version__ = '4.0.0a2'
|
||||
__version__ = '4.0.0a4'
|
||||
__title__ = 'Alliance Auth'
|
||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||
NAME = f'{__title__} v{__version__}'
|
||||
|
||||
@@ -12,13 +12,14 @@ class StartProject(BaseStartProject):
|
||||
parser.add_argument('--python', help='The path to the python executable.')
|
||||
parser.add_argument('--celery', help='The path to the celery executable.')
|
||||
parser.add_argument('--gunicorn', help='The path to the gunicorn executable.')
|
||||
parser.add_argument('--memmon', help='The path to the memmon executable.')
|
||||
|
||||
|
||||
def create_project(parser, options, args):
|
||||
# Validate args
|
||||
if len(args) < 2:
|
||||
parser.error("Please specify a name for your Alliance Auth installation.")
|
||||
elif len(args) > 3:
|
||||
elif len(args) > 4:
|
||||
parser.error("Too many arguments.")
|
||||
|
||||
# First find the path to Alliance Auth
|
||||
|
||||
@@ -70,22 +70,21 @@ class DiscordService(ServicesHook):
|
||||
discord_username = self.get_discord_username(
|
||||
username=username, discriminator=discriminator
|
||||
)
|
||||
|
||||
# if username and discriminator:
|
||||
# discord_username = f'{username}#{discriminator}'
|
||||
#
|
||||
# # New Discord user name format
|
||||
# if discriminator == '0':
|
||||
# discord_username = f'@{username}'
|
||||
# else:
|
||||
# discord_username = ''
|
||||
else:
|
||||
discord_username = ''
|
||||
user_has_account = False
|
||||
|
||||
urls = self.Urls()
|
||||
urls.auth_activate = 'discord:activate'
|
||||
urls.auth_deactivate = 'discord:deactivate'
|
||||
urls.auth_reset = 'discord:reset'
|
||||
urls.auth_add_bot = 'discord:add_bot'
|
||||
|
||||
return render_to_string(
|
||||
self.service_ctrl_template,
|
||||
{
|
||||
'service_name': self.title,
|
||||
'urls': urls,
|
||||
'server_name': server_name(),
|
||||
'user_has_account': user_has_account,
|
||||
'discord_username': discord_username
|
||||
|
||||
@@ -1,34 +1,49 @@
|
||||
{% extends "services/services_ctrl_base.html" %}
|
||||
|
||||
{% load i18n %}
|
||||
<div class="card text-center m-4" style="min-width: 18rem; min-height: 18rem;">
|
||||
<div class="card-body ">
|
||||
<h5 class="card-title ">{% translate "Discord" %}</h5>
|
||||
<p class="card-text">{% if server_name %}{{ server_name }}{% else %}{% translate "Unlinked Server" %}{% endif %}</p>
|
||||
<p class="card-text"><span class="badge {% if user_has_account %}bg-success{% else %}bg-warning{% endif %}">{% if user_has_account %}{% translate "Active" %}{% else %}{% translate "Disabled" %}{% endif %}</span></p>
|
||||
<p class="card-text">
|
||||
{% if not user_has_account %}
|
||||
{% translate "(not activated)" %}
|
||||
{% else %}
|
||||
{{ discord_username }}
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
{% if not user_has_account %}
|
||||
<a href="{% url 'discord:activate' %}" title="{% translate 'Join the Discord server' %}" class="btn btn-primary">
|
||||
|
||||
{% block title %}
|
||||
{{ service_name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block url %}
|
||||
{{ server_name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block active %}
|
||||
{% include "services/service_status.html" with username=discord_username %}
|
||||
{% endblock %}
|
||||
|
||||
{% block user %}
|
||||
{% if discord_username %}
|
||||
{{ discord_username }}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block controls %}
|
||||
{% if not user_has_account %}
|
||||
{% if urls.auth_activate %}
|
||||
<a class="btn btn-warning" href="{% url urls.auth_activate %}" title="{% translate 'Activate' %}">
|
||||
<span class="fas fa-check fa-fw"></span>
|
||||
</a>
|
||||
{% else %}
|
||||
<a href="{% url 'discord:reset' %}" title="{% translate 'Leave- and rejoin the Discord Server (Reset)' %}" class="btn btn-warning">
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if urls.auth_reset %}
|
||||
<a class="btn btn-primary" href="{% url urls.auth_reset %}" title="{% translate 'Reset Password' %}">
|
||||
<span class="fas fa-sync fa-fw"></span>
|
||||
</a>
|
||||
<a href="{% url 'discord:deactivate' %}" title="{% translate 'Leave the Discord server' %}" class="btn btn-danger">
|
||||
{% endif %}
|
||||
|
||||
{% if urls.auth_deactivate %}
|
||||
<a class="btn btn-danger" href="{% url urls.auth_deactivate %}" title="{% translate 'Deactivate' %}">
|
||||
<span class="fas fa-times fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if request.user.is_superuser %}
|
||||
<a type="button" id="btnLinkDiscordServer" class="btn btn-primary" href="{% url 'discord:add_bot' %}">
|
||||
<span class="fas fa-link fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if request.user.is_superuser %}
|
||||
<a class="btn btn-primary" type="button" id="btnLinkDiscordServer" href="{% url urls.auth_add_bot %}" title="{% translate 'Link Discord Server' %}">
|
||||
<span class="fas fa-link fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -26,11 +26,11 @@ def deactivate_discord(request):
|
||||
if request.user.discord.delete_user(
|
||||
is_rate_limited=False, handle_api_exceptions=True
|
||||
):
|
||||
logger.info("Successfully deactivated discord for user %s", request.user)
|
||||
logger.info("Successfully deactivated Discord for user %s", request.user)
|
||||
messages.success(request, _('Deactivated Discord account.'))
|
||||
else:
|
||||
logger.error(
|
||||
"Unsuccessful attempt to deactivate discord for user %s", request.user
|
||||
"Unsuccessful attempt to deactivate Discord for user %s", request.user
|
||||
)
|
||||
messages.error(
|
||||
request, _('An error occurred while processing your Discord account.')
|
||||
@@ -46,14 +46,14 @@ def reset_discord(request):
|
||||
is_rate_limited=False, handle_api_exceptions=True
|
||||
):
|
||||
logger.info(
|
||||
"Successfully deleted discord user for user %s - "
|
||||
"forwarding to discord activation.",
|
||||
"Successfully deleted Discord user for user %s - "
|
||||
"forwarding to Discord activation.",
|
||||
request.user
|
||||
)
|
||||
return redirect("discord:activate")
|
||||
|
||||
logger.error(
|
||||
"Unsuccessful attempt to reset discord for user %s", request.user
|
||||
"Unsuccessful attempt to reset Discord for user %s", request.user
|
||||
)
|
||||
messages.error(
|
||||
request, _('An error occurred while processing your Discord account.')
|
||||
|
||||
@@ -10,11 +10,17 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block user %}
|
||||
Username: {{ char.character_name }}
|
||||
{% include "services/service_username.html" with username=char.character_name %}
|
||||
{% endblock %}
|
||||
|
||||
{% block active %}
|
||||
<span class="badge bg-success">
|
||||
{% translate "SSO login active" %}
|
||||
</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block controls %}
|
||||
<a title="Go To Forums" href="{{ DISCOURSE_URL }}" class="btn btn-success">
|
||||
<a class="btn btn-success" href="{{ DISCOURSE_URL }}" title="{% translate 'Go to forums' %}">
|
||||
<span class="fas fa-arrow-right fa-fw"></span>
|
||||
</a>
|
||||
{% endblock %}
|
||||
|
||||
@@ -25,9 +25,9 @@ def activate_ips4(request):
|
||||
# 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)
|
||||
logger.debug("Updated authserviceinfo for user %s with IPSuite4 credentials." % request.user)
|
||||
# update_ips4_groups.delay(request.user.pk)
|
||||
logger.info("Successfully activated IPS4 for user %s" % request.user)
|
||||
logger.info("Successfully activated IPSuite4 for user %s" % request.user)
|
||||
messages.success(request, _('Activated IPSuite4 account.'))
|
||||
credentials = {
|
||||
'username': result[0],
|
||||
@@ -35,7 +35,7 @@ def activate_ips4(request):
|
||||
}
|
||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'IPSuite4'})
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to activate IPS4 for user %s" % request.user)
|
||||
logger.error("Unsuccessful attempt to activate IPSuite4 for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -48,7 +48,7 @@ def reset_ips4_password(request):
|
||||
result = Ips4Manager.update_user_password(request.user.ips4.username)
|
||||
# false we failed
|
||||
if result != "":
|
||||
logger.info("Successfully reset IPS4 password for user %s" % request.user)
|
||||
logger.info("Successfully reset IPSuite4 password for user %s" % request.user)
|
||||
messages.success(request, _('Reset IPSuite4 password.'))
|
||||
credentials = {
|
||||
'username': request.user.ips4.username,
|
||||
@@ -56,7 +56,7 @@ def reset_ips4_password(request):
|
||||
}
|
||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'IPSuite4'})
|
||||
|
||||
logger.error("Unsuccessful attempt to reset IPS4 password for user %s" % request.user)
|
||||
logger.error("Unsuccessful attempt to reset IPSuite4 password for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -74,10 +74,10 @@ def set_ips4_password(request):
|
||||
logger.debug("Form contains password of length %s" % len(password))
|
||||
result = Ips4Manager.update_custom_password(request.user.ips4.username, plain_password=password)
|
||||
if result != "":
|
||||
logger.info("Successfully set IPS4 password for user %s" % request.user)
|
||||
logger.info("Successfully set IPSuite4 password for user %s" % request.user)
|
||||
messages.success(request, _('Set IPSuite4 password.'))
|
||||
else:
|
||||
logger.error("Failed to install custom IPS4 password for user %s" % request.user)
|
||||
logger.error("Failed to install custom IPSuite4 password for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||
return redirect('services:services')
|
||||
else:
|
||||
@@ -94,9 +94,9 @@ def set_ips4_password(request):
|
||||
def deactivate_ips4(request):
|
||||
logger.debug("deactivate_ips4 called by user %s" % request.user)
|
||||
if Ips4Tasks.delete_user(request.user):
|
||||
logger.info("Successfully deactivated IPS4 for user %s" % request.user)
|
||||
logger.info("Successfully deactivated IPSuite4 for user %s" % request.user)
|
||||
messages.success(request, _('Deactivated IPSuite4 account.'))
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to deactivate IPS4 for user %s" % request.user)
|
||||
logger.error("Unsuccessful attempt to deactivate IPSuite4 for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -1,34 +1,49 @@
|
||||
{% load i18n %}
|
||||
<div class="card text-center m-4" style="min-width: 18rem; min-height: 18rem;">
|
||||
<div class="card-body ">
|
||||
<h5 class="card-title ">{{ service_name }}</h5>
|
||||
<p class="card-text"><a href="mumble://{{ service_url }}">{{ service_url }}</a></p>
|
||||
<p class="card-text"><span class="badge {% if username != '' %}bg-success{% else %}bg-warning{% endif %}">{% if username != '' %}Active{% else %}Disabled{% endif %}</span></p>
|
||||
<p class="card-text">Username: <span class="badge bg-secondary text-end">{{ username }}</span></p>
|
||||
</div>
|
||||
{% extends "services/services_ctrl_base.html" %}
|
||||
|
||||
<div class="card-footer">
|
||||
{% if username == "" %}
|
||||
<div class="text-center">
|
||||
<a href="{% url 'mumble:activate' %}" title="Activate" class="btn btn-warning">
|
||||
<span class="fas fa-check fa-fw"></span>
|
||||
</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="text-center">
|
||||
<a href="{% url 'mumble:set_password' %}" title="Set Password" class="btn btn-warning">
|
||||
<span class="fas fa-edit fa-fw"></span>
|
||||
</a>
|
||||
<a href="{% url 'mumble:reset_password' %}" title="Reset Password" class="btn btn-primary">
|
||||
<span class="fas fa-sync fa-fw"></span>
|
||||
</a>
|
||||
<a href="{% url 'mumble:deactivate' %}" title="Deactivate" class="btn btn-danger">
|
||||
<span class="fas fa-times fa-fw"></span>
|
||||
</a>
|
||||
<a href="mumble://{{ connect_url }}" class="btn btn-success" title="Connect">
|
||||
<span class="fas fa-arrow-right fa-fw"></span>
|
||||
</a>
|
||||
</div>
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}
|
||||
{{ service_name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block url %}
|
||||
<a href="{{ service_url }}">{{ service_url }}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block user %}
|
||||
{% include "services/service_username.html" with username=username %}
|
||||
{% endblock %}
|
||||
|
||||
{% block controls %}
|
||||
{% if username == "" %}
|
||||
{% if urls.auth_activate %}
|
||||
<a class="btn btn-warning" href="{% url urls.auth_activate %}" title="{% translate 'Activate' %}">
|
||||
<span class="fas fa-check fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if urls.auth_set_password %}
|
||||
<a class="btn btn-warning" href="{% url urls.auth_set_password %}" title="{% translate 'Set Password' %}">
|
||||
<span class="fas fa-edit fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if urls.auth_reset_password %}
|
||||
<a class="btn btn-primary" href="{% url urls.auth_reset_password %}" title="{% translate 'Reset Password' %}">
|
||||
<span class="fas fa-sync fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if urls.auth_deactivate %}
|
||||
<a class="btn btn-danger" href="{% url urls.auth_deactivate %}" title="{% translate 'Deactivate' %}">
|
||||
<span class="fas fa-times fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
{% if connect_url %}
|
||||
<a class="btn btn-success" href="mumble://{{ connect_url }}" title="{% translate 'Connect' %}">
|
||||
<span class="fas fa-arrow-right fa-fw"></span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "allianceauth/base.html" %}
|
||||
{% load bootstrap %}
|
||||
{% load django_bootstrap5 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_title %}{% translate "Jabber Broadcast" %}{% endblock page_title %}
|
||||
@@ -17,7 +17,7 @@
|
||||
{% endif %}
|
||||
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% bootstrap_form form %}
|
||||
<br>
|
||||
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Broadcast" %}
|
||||
</button>
|
||||
|
||||
@@ -24,23 +24,23 @@ ACCESS_PERM = 'openfire.access_openfire'
|
||||
def activate_jabber(request):
|
||||
logger.debug("activate_jabber called by user %s" % request.user)
|
||||
character = request.user.profile.main_character
|
||||
logger.debug(f"Adding jabber user for user {request.user} with main character {character}")
|
||||
logger.debug(f"Adding Jabber user for user {request.user} with main character {character}")
|
||||
info = OpenfireManager.add_user(OpenfireTasks.get_username(request.user))
|
||||
# If our username is blank means we already had a user
|
||||
if info[0] != "":
|
||||
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)
|
||||
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.'))
|
||||
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, 'services/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.'))
|
||||
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("services:services")
|
||||
|
||||
|
||||
@@ -49,11 +49,11 @@ def activate_jabber(request):
|
||||
def deactivate_jabber(request):
|
||||
logger.debug("deactivate_jabber called by user %s" % request.user)
|
||||
if OpenfireTasks.has_account(request.user) and OpenfireTasks.delete_user(request.user):
|
||||
logger.info("Successfully deactivated jabber for user %s" % request.user)
|
||||
messages.success(request, 'Deactivated jabber account.')
|
||||
logger.info("Successfully deactivated Jabber for user %s" % request.user)
|
||||
messages.success(request, 'Deactivated Jabber account.')
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to deactivate jabber for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
||||
logger.error("Unsuccessful attempt to deactivate Jabber for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
|
||||
@@ -65,15 +65,15 @@ def reset_jabber_password(request):
|
||||
result = OpenfireManager.update_user_pass(request.user.openfire.username)
|
||||
# If our username is blank means we failed
|
||||
if result != "":
|
||||
logger.info("Successfully reset jabber password for user %s" % request.user)
|
||||
messages.success(request, _('Reset jabber password.'))
|
||||
logger.info("Successfully reset Jabber password for user %s" % request.user)
|
||||
messages.success(request, _('Reset Jabber password.'))
|
||||
credentials = {
|
||||
'username': request.user.openfire.username,
|
||||
'password': result,
|
||||
}
|
||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'})
|
||||
logger.error("Unsuccessful attempt to reset jabber for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
||||
logger.error("Unsuccessful attempt to reset Jabber for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ def jabber_broadcast_view(request):
|
||||
logger.debug("Received POST request containing form, valid: %s" % form.is_valid())
|
||||
if form.is_valid():
|
||||
main_char = request.user.profile.main_character
|
||||
logger.debug(f"Processing jabber broadcast for user {request.user} with main character {main_char}")
|
||||
logger.debug(f"Processing Jabber broadcast for user {request.user} with main character {main_char}")
|
||||
try:
|
||||
if main_char is not None:
|
||||
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
|
||||
@@ -112,8 +112,8 @@ def jabber_broadcast_view(request):
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
@@ -140,11 +140,11 @@ def set_jabber_password(request):
|
||||
logger.debug("Form contains password of length %s" % len(password))
|
||||
result = OpenfireManager.update_user_pass(request.user.openfire.username, password=password)
|
||||
if result != "":
|
||||
logger.info("Successfully set jabber password for user %s" % request.user)
|
||||
logger.info("Successfully set Jabber password for user %s" % request.user)
|
||||
messages.success(request, _('Set jabber password.'))
|
||||
else:
|
||||
logger.error("Failed to install custom jabber password for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
||||
logger.error("Failed to install custom Jabber password for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||
return redirect("services:services")
|
||||
else:
|
||||
logger.debug("Request is not type POST - providing empty form.")
|
||||
|
||||
@@ -24,7 +24,7 @@ def activate_smf(request):
|
||||
main_character = request.user.profile.main_character
|
||||
|
||||
logger.debug(
|
||||
f"Adding smf user for user {request.user} with main character {main_character}"
|
||||
f"Adding SMF user for user {request.user} with main character {main_character}"
|
||||
)
|
||||
|
||||
result = SmfManager.add_user(
|
||||
@@ -42,12 +42,12 @@ def activate_smf(request):
|
||||
|
||||
logger.debug(
|
||||
f"Updated authserviceinfo for user {request.user} "
|
||||
f"with smf credentials. Updating groups."
|
||||
f"with SMF credentials. Updating groups."
|
||||
)
|
||||
|
||||
SmfTasks.update_groups.delay(request.user.pk)
|
||||
|
||||
logger.info(f"Successfully activated smf for user {request.user}")
|
||||
logger.info(f"Successfully activated SMF for user {request.user}")
|
||||
|
||||
messages.success(request, _('Activated SMF account.'))
|
||||
credentials = {
|
||||
@@ -61,7 +61,7 @@ def activate_smf(request):
|
||||
context={'credentials': credentials, 'service': 'SMF'},
|
||||
)
|
||||
|
||||
logger.error(f"Unsuccessful attempt to activate smf for user {request.user}")
|
||||
logger.error(f"Unsuccessful attempt to activate SMF for user {request.user}")
|
||||
messages.error(request, _('An error occurred while processing your SMF account.'))
|
||||
|
||||
return redirect("services:services")
|
||||
@@ -74,10 +74,10 @@ def deactivate_smf(request):
|
||||
result = SmfTasks.delete_user(request.user)
|
||||
# false we failed
|
||||
if result:
|
||||
logger.info("Successfully deactivated smf for user %s" % request.user)
|
||||
logger.info("Successfully deactivated SMF for user %s" % request.user)
|
||||
messages.success(request, _('Deactivated SMF account.'))
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to activate smf for user %s" % request.user)
|
||||
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("services:services")
|
||||
|
||||
@@ -91,14 +91,14 @@ def reset_smf_password(request):
|
||||
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)
|
||||
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, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'SMF'})
|
||||
logger.error("Unsuccessful attempt to reset smf password for user %s" % request.user)
|
||||
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("services:services")
|
||||
|
||||
@@ -117,10 +117,10 @@ def set_smf_password(request):
|
||||
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)
|
||||
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)
|
||||
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("services:services")
|
||||
else:
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
{{ block.super }}
|
||||
<li>
|
||||
<a href="{% url 'teamspeak3:admin_update_ts3_groups' %}" class="btn btn-high">
|
||||
{% translate "Update TS3 groups" %}
|
||||
{% translate "Update TeamSpeak3 groups" %}
|
||||
</a>
|
||||
</li>
|
||||
{% endblock %}
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block active %}
|
||||
<span class="badge {% if authinfo.teamspeak3_uid != '' %}bg-success{% else %}bg-warning{% endif %}">{% if authinfo.teamspeak3_uid != '' %}Active{% else %}Disabled{% endif %}</span>
|
||||
{% include "services/service_status.html" with username=authinfo.teamspeak3_uid %}
|
||||
{% endblock %}
|
||||
|
||||
{% block user %}
|
||||
{{ authinfo.teamspeak3_uid }}
|
||||
{% include "services/service_username.html" with username=authinfo.teamspeak3_uid %}
|
||||
{% endblock %}
|
||||
|
||||
{% block controls %}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{% extends "allianceauth/base.html" %}
|
||||
{% load bootstrap %}
|
||||
{% extends "allianceauth/base-bs5.html" %}
|
||||
{% load django_bootstrap5 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_title %}{% translate "Verify Teamspeak" %}{% endblock page_title %}
|
||||
{% block page_title %}{% translate "Verify TeamSpeak3" %}{% endblock page_title %}
|
||||
{% block extra_css %}{% endblock extra_css %}
|
||||
|
||||
{% block content %}
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header text-center">{% translate "Verify Teamspeak Identity" %}</h1>
|
||||
<h1 class="page-header text-center">{% translate "Verify TeamSpeak3 Identity" %}</h1>
|
||||
<div class="container-fluid">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<a href="ts3server://{{ public_url }}?token={{ authinfo.teamspeak3_perm_key }}&nickname={{ authinfo.teamspeak3_uid }}" class="btn btn-primary btn-block btn-lg" title="Join">{% translate "Join Server" %}</a>
|
||||
<br>
|
||||
<form class="form-signin" role="form" action="{% url 'teamspeak3:verify' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% bootstrap_form form %}
|
||||
<br>
|
||||
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Continue" %}</button>
|
||||
</form>
|
||||
|
||||
@@ -24,17 +24,17 @@ def activate_teamspeak3(request):
|
||||
|
||||
character = request.user.profile.main_character
|
||||
with Teamspeak3Manager() as ts3man:
|
||||
logger.debug(f"Adding TS3 user for user {request.user} with main character {character}")
|
||||
logger.debug(f"Adding TeamSpeak3 user for user {request.user} with main character {character}")
|
||||
result = ts3man.add_user(request.user, Teamspeak3Tasks.get_username(request.user))
|
||||
|
||||
# if its empty 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)
|
||||
logger.info("Successfully activated TS3 for user %s" % request.user)
|
||||
logger.debug("Updated authserviceinfo for user %s with TeamSpeak3 credentials. Updating groups." % request.user)
|
||||
logger.info("Successfully activated TeamSpeak3 for user %s" % request.user)
|
||||
messages.success(request, _('Activated TeamSpeak3 account.'))
|
||||
return redirect("teamspeak3:verify")
|
||||
logger.error("Unsuccessful attempt to activate TS3 for user %s" % request.user)
|
||||
logger.error("Unsuccessful attempt to activate TeamSpeak3 for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -67,10 +67,10 @@ def verify_teamspeak3(request):
|
||||
def deactivate_teamspeak3(request):
|
||||
logger.debug("deactivate_teamspeak3 called by user %s" % request.user)
|
||||
if Teamspeak3Tasks.has_account(request.user) and Teamspeak3Tasks.delete_user(request.user):
|
||||
logger.info("Successfully deactivated TS3 for user %s" % request.user)
|
||||
logger.info("Successfully deactivated TeamSpeak3 for user %s" % request.user)
|
||||
messages.success(request, _('Deactivated TeamSpeak3 account.'))
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to deactivate TS3 for user %s" % request.user)
|
||||
logger.error("Unsuccessful attempt to deactivate TeamSpeak3 for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -81,7 +81,7 @@ 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("services:services")
|
||||
logger.debug("Deleting TS3 user for user %s" % request.user)
|
||||
logger.debug("Deleting TeamSpeak3 user for user %s" % request.user)
|
||||
with Teamspeak3Manager() as ts3man:
|
||||
ts3man.delete_user(request.user.teamspeak3.uid)
|
||||
|
||||
@@ -91,12 +91,12 @@ def reset_teamspeak3_perm(request):
|
||||
# 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)
|
||||
logger.debug("Updated authserviceinfo for user %s with TeamSpeak3 credentials. Updating groups." % request.user)
|
||||
Teamspeak3Tasks.update_groups.delay(request.user.pk)
|
||||
logger.info("Successfully reset TS3 permission key for user %s" % request.user)
|
||||
logger.info("Successfully reset TeamSpeak3 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)
|
||||
logger.error("Unsuccessful attempt to reset TeamSpeak3 permission key for user %s" % request.user)
|
||||
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||
return redirect("services:services")
|
||||
|
||||
@@ -105,5 +105,5 @@ def reset_teamspeak3_perm(request):
|
||||
@staff_member_required
|
||||
def admin_update_ts3_groups(request):
|
||||
Teamspeak3Tasks.run_ts3_group_update.delay()
|
||||
messages.info(request, "Started updating TS3 server groups...")
|
||||
messages.info(request, "Started updating TeamSpeak3 server groups...")
|
||||
return redirect("admin:teamspeak3_authts_changelist")
|
||||
|
||||
@@ -36,7 +36,7 @@ def activate_xenforo_forum(request):
|
||||
context={'credentials': credentials, 'service': 'XenForo'})
|
||||
|
||||
else:
|
||||
logger.error("Unsuccessful attempt to activate xenforo for user %s" % request.user)
|
||||
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("services:services")
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "allianceauth/base-bs5.html" %}
|
||||
{% load bootstrap %}
|
||||
{% load django_bootstrap5 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_title %}{% translate "Fleet Formatter Tool" %}{% endblock page_title %}
|
||||
@@ -18,7 +18,7 @@
|
||||
{% endif %}
|
||||
<form class="form-signin" role="form" action="" method="POST">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% bootstrap_form form %}
|
||||
<br>
|
||||
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Format" %}</button>
|
||||
<br>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends "allianceauth/base.html" %}
|
||||
{% extends "allianceauth/base-bs5.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
<h1 class="page-header text-center">
|
||||
{% blocktranslate with service_name=view.service_name|title %}Delete {{ service_name }} Account?{% endblocktranslate %}
|
||||
</h1>
|
||||
<div class="container-fluid">
|
||||
<div class="col-md-2 col-md-offset-5">
|
||||
<div class="row">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-4 align-self-center">
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
<p>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{% extends "allianceauth/base.html" %}
|
||||
{% extends "allianceauth/base-bs5.html" %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_title %}{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Credentials{% endblocktranslate %}{% endblock page_title %}
|
||||
@@ -6,17 +6,19 @@
|
||||
{% block content %}
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header text-center">{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Credentials{% endblocktranslate %}</h1>
|
||||
<div class="container-fluid">
|
||||
<div class="col-lg-4 col-lg-offset-4">
|
||||
<form class="form-signin">
|
||||
{% for key, value in credentials.items %}
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="id_{{ key }}">{{ key|capfirst }}</label>
|
||||
<input class="form-control" value="{{ value }}" id="id_{{ key }}" readonly>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</form>
|
||||
<a href="{% url 'services:services' %}" class="btn btn-lg btn-block btn-primary" title="Continue">{% translate "Continue" %}</a>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-4 align-self-center">
|
||||
<form class="form-signin">
|
||||
{% for key, value in credentials.items %}
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="id_{{ key }}">{{ key|capfirst }}</label>
|
||||
<input class="form-control" value="{{ value }}" id="id_{{ key }}" readonly>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</form>
|
||||
<a href="{% url 'services:services' %}" class="btn btn-lg btn-block btn-primary" title="Continue">{% translate "Continue" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{% extends "allianceauth/base.html" %}
|
||||
{% load bootstrap %}
|
||||
{% extends "allianceauth/base-bs5.html" %}
|
||||
{% load django_bootstrap5 %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block page_title %}{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Password Change{% endblocktranslate %}{% endblock page_title %}
|
||||
@@ -7,12 +7,12 @@
|
||||
{% block content %}
|
||||
<div class="col-lg-12">
|
||||
<h1 class="page-header text-center">{% blocktranslate with service_name=view.service_name|title %}Set {{service_name}} Password{% endblocktranslate %}</h1>
|
||||
<div class="container-fluid">
|
||||
<div class="col-md-4 col-md-offset-4">
|
||||
<div class="row">
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-4 align-self-center">
|
||||
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
||||
{% csrf_token %}
|
||||
{{ form|bootstrap }}
|
||||
{% bootstrap_form form %}
|
||||
<br>
|
||||
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Set Password" %}</button>
|
||||
</form>
|
||||
@@ -20,5 +20,4 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
{% load i18n %}
|
||||
|
||||
<span class="badge {% if username != '' %}bg-success{% else %}bg-warning{% endif %}">
|
||||
{% if username != '' %}
|
||||
{% translate "Enabled" %}
|
||||
{% else %}
|
||||
{% translate "Disabled" %}
|
||||
{% endif %}
|
||||
</span>
|
||||
@@ -0,0 +1,5 @@
|
||||
{% load i18n %}
|
||||
|
||||
{% if username != '' %}
|
||||
{% translate "Username" %}: {{ username }}
|
||||
{% endif %}
|
||||
@@ -9,14 +9,6 @@
|
||||
<a href="{{ service_url }}">{{ service_url }}</a>
|
||||
{% endblock %}
|
||||
|
||||
{% block active %}
|
||||
<span class="badge {% if username != '' %}bg-success{% else %}bg-warning{% endif %}">{% if username != '' %}Active{% else %}Disabled{% endif %}</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block user %}
|
||||
Username: <span class="badge bg-secondary">{{ username }}</span>
|
||||
{% endblock %}
|
||||
|
||||
{% block controls %}
|
||||
{% if username == "" %}
|
||||
{% if urls.auth_activate %}
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
{% load i18n %}
|
||||
<div class="card text-center m-4" style="min-width: 18rem; min-height: 18rem">
|
||||
|
||||
<div class="card text-center m-4" style="min-width: 18rem; min-height: 18rem;">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
||||
<p class="card-text">{% block url %}{% endblock url %}</p>
|
||||
|
||||
<p class="card-text">
|
||||
{% block active %}
|
||||
<span class="badge bg-success">Active</span>
|
||||
{% include "services/service_status.html" with username=username %}
|
||||
{% endblock active %}
|
||||
</p>
|
||||
<p class="card-text">{% block user %}{% endblock user %}</p>
|
||||
|
||||
<p class="card-text">
|
||||
{% block url %}{% endblock url %}
|
||||
</p>
|
||||
|
||||
<p class="card-text">
|
||||
{% block user %}
|
||||
{% include "services/service_username.html" with username=username %}
|
||||
{% endblock user %}
|
||||
</p>
|
||||
|
||||
{% block extra %}{% endblock extra %}
|
||||
</div>
|
||||
<div class="card-footer">{% block controls %}{% endblock controls %}</div>
|
||||
|
||||
<div class="card-footer">
|
||||
{% block controls %}{% endblock controls %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
/* global notificationUpdateSettings */
|
||||
|
||||
/**
|
||||
* This script refreshed the notification icon in the top menu
|
||||
* on a regular basis so to keep the user apprised about newly arrived
|
||||
* notifications without having to reload the page.
|
||||
*
|
||||
* The refresh rate can be changes via the Django setting NOTIFICATIONS_REFRESH_TIME.
|
||||
* See documentation for details.
|
||||
*/
|
||||
$(() => {
|
||||
'use strict';
|
||||
|
||||
const notificationsRefreshTime = notificationUpdateSettings.refreshTime;
|
||||
const userNotificationsCountViewUrl = notificationUpdateSettings.userNotificationsCountViewUrl;
|
||||
const elementNotificationIcon = $('#menu_item_notifications .fa-bell');
|
||||
|
||||
/**
|
||||
* Update the notification icon in the top menu
|
||||
*/
|
||||
const updateNotificationIcon = () => {
|
||||
fetch(userNotificationsCountViewUrl)
|
||||
.then((response) => {
|
||||
if (response.ok) {
|
||||
return response.json();
|
||||
}
|
||||
|
||||
throw new Error('Something went wrong');
|
||||
})
|
||||
.then((responseJson) => {
|
||||
const unreadCount = responseJson.unread_count;
|
||||
|
||||
if (unreadCount > 0) {
|
||||
elementNotificationIcon.addClass('text-danger');
|
||||
} else {
|
||||
elementNotificationIcon.removeClass('text-danger');
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(`Failed to load HTMl to render notifications item. Error: ${error.message}`);
|
||||
});
|
||||
};
|
||||
|
||||
let myInterval;
|
||||
|
||||
/**
|
||||
* Activate automatic refresh every x seconds
|
||||
*/
|
||||
const activateIconUpdate = () => {
|
||||
if (notificationsRefreshTime > 0) {
|
||||
myInterval = setInterval(
|
||||
updateNotificationIcon, notificationsRefreshTime * 1000
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Deactivate automatic refresh
|
||||
*/
|
||||
const deactivateIconUpdate = () => {
|
||||
if ((notificationsRefreshTime > 0) && (typeof myInterval !== 'undefined')) {
|
||||
clearInterval(myInterval);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Refresh only on active browser tabs
|
||||
*/
|
||||
$(window)
|
||||
// Tab active
|
||||
.focus(() => {
|
||||
activateIconUpdate();
|
||||
})
|
||||
// Tab inactive
|
||||
.blur(function() {
|
||||
deactivateIconUpdate();
|
||||
});
|
||||
|
||||
// Initial start of refreshing on script loading
|
||||
activateIconUpdate();
|
||||
});
|
||||
@@ -1,28 +1,28 @@
|
||||
$(document).ready(() => {
|
||||
'use strict';
|
||||
|
||||
const inputAbsoluteTime = $('input#id_absolute_time');
|
||||
const inputCountdown = $('#id_days_left, #id_hours_left, #id_minutes_left');
|
||||
|
||||
//inputAbsoluteTime.prop('disabled', true);
|
||||
inputAbsoluteTime.parent().hide()
|
||||
inputAbsoluteTime.parent().prev('label').hide()
|
||||
inputAbsoluteTime.parent().hide();
|
||||
inputAbsoluteTime.parent().prev('label').hide();
|
||||
inputCountdown.prop('required', true);
|
||||
|
||||
$('input#id_absolute_checkbox').change(function () {
|
||||
if ($(this).prop("checked")) {
|
||||
// check box enabled
|
||||
inputAbsoluteTime.parent().show()
|
||||
inputAbsoluteTime.parent().prev('label').show()
|
||||
inputCountdown.parent().hide()
|
||||
inputCountdown.parent().prev('label').hide()
|
||||
$('input#id_absolute_checkbox').change((event) => {
|
||||
if ($(event.target).prop('checked')) {
|
||||
// Checkbox is checked
|
||||
inputAbsoluteTime.parent().show();
|
||||
inputAbsoluteTime.parent().prev('label').show();
|
||||
inputCountdown.parent().hide();
|
||||
inputCountdown.parent().prev('label').hide();
|
||||
inputAbsoluteTime.prop('required', true);
|
||||
inputCountdown.prop('required', false);
|
||||
} else {
|
||||
// Checkbox is not checked
|
||||
inputAbsoluteTime.parent().hide()
|
||||
inputAbsoluteTime.parent().prev('label').hide()
|
||||
inputCountdown.parent().show()
|
||||
inputCountdown.parent().prev('label').show()
|
||||
inputAbsoluteTime.parent().hide();
|
||||
inputAbsoluteTime.parent().prev('label').hide();
|
||||
inputCountdown.parent().show();
|
||||
inputCountdown.parent().prev('label').show();
|
||||
inputAbsoluteTime.prop('required', false);
|
||||
inputCountdown.prop('required', true);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{% load admin_status %}
|
||||
|
||||
<div
|
||||
class="progress-bar progress-bar-{{ level }} task-status-progress-bar"
|
||||
class="progress-bar bg-{{ level }} task-status-progress-bar"
|
||||
role="progressbar"
|
||||
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
||||
aria-valuemin="0"
|
||||
|
||||
@@ -122,13 +122,14 @@
|
||||
{% theme_js %}
|
||||
|
||||
{% if user.is_authenticated %}
|
||||
<script type="application/javascript">
|
||||
let notificationUPdateSettings = {
|
||||
notificationsListViewUrl: "{% url 'notifications:list' %}",
|
||||
notificationsRefreshTime: "{% notifications_refresh_time %}",
|
||||
<script>
|
||||
const notificationUpdateSettings = {
|
||||
refreshTime: "{% notifications_refresh_time %}",
|
||||
userNotificationsCountViewUrl: "{% url 'notifications:user_notifications_count' request.user.pk %}"
|
||||
};
|
||||
</script>
|
||||
|
||||
{% include 'bundles/refresh-notification-icon-js.html' %}
|
||||
{% endif %}
|
||||
|
||||
{% block extra_javascript %}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{% load i18n %}
|
||||
|
||||
<li class="nav-item active">
|
||||
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}"><i class="fas fa-plus"></i></span><span class="d-lg-none d-md-inline m-2">{% translate 'Add Character' %}</span></a>
|
||||
<a href="{% url 'authentication:add_character' %}" class="nav-link" title="{% translate 'Add Character' %}"><i class="fas fa-plus"></i><span class="d-lg-none d-md-inline m-2">{% translate "Add Character" %}</span></a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'authentication:change_main_character' %}" class="nav-link" title="{% translate 'Change Main' %}"><i class="fas fa-random"></i></span><span class="d-lg-none d-md-inline m-2">{% translate 'Change Main' %}</span></a>
|
||||
<a href="{% url 'authentication:change_main_character' %}" class="nav-link" title="{% translate 'Change Main' %}"><i class="fas fa-random"></i><span class="d-lg-none d-md-inline m-2">{% translate "Change Main" %}</span></a>
|
||||
</li>
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
{% load static %}
|
||||
|
||||
<script src="{% static 'allianceauth/js/refresh-notification-icon.js' %}"></script>
|
||||
@@ -13,8 +13,9 @@ from django.template.loader import render_to_string
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from .form import TimerForm
|
||||
from .models import Timer
|
||||
from allianceauth.timerboard.form import TimerForm
|
||||
from allianceauth.timerboard.models import Timer
|
||||
from allianceauth.eveonline.models import EveCorporationInfo
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -91,12 +92,18 @@ class RemoveTimerView(TimerManagementView, DeleteView):
|
||||
|
||||
|
||||
def dashboard_timers(request):
|
||||
corp = request.user.profile.main_character.corporation
|
||||
try:
|
||||
corp = request.user.profile.main_character.corporation
|
||||
except EveCorporationInfo.DoesNotExist:
|
||||
return ""
|
||||
|
||||
timers = Timer.objects.select_related('eve_character').filter((Q(eve_corp__isnull=True) | Q(eve_corp=corp)) ,eve_time__gte=timezone.now())[:5]
|
||||
|
||||
if timers.count():
|
||||
context = {
|
||||
'timers': timers,
|
||||
}
|
||||
return render_to_string('timerboard/dashboard.timers.html', context=context, request=request)
|
||||
|
||||
return render_to_string(template_name='timerboard/dashboard.timers.html', context=context, request=request)
|
||||
else:
|
||||
return ""
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
import warnings
|
||||
from django.views.generic.base import View
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render, redirect
|
||||
from django.contrib import messages
|
||||
from django.conf import settings
|
||||
import logging
|
||||
import warnings
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import redirect, render
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic.base import View
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
PROTOCOL=https://
|
||||
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
||||
DOMAIN=%DOMAIN%
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.0.0a2
|
||||
AA_DOCKER_TAG=registry.gitlab.com/allianceauth/allianceauth/auth:v4.0.0a4
|
||||
|
||||
# Nginx Proxy Manager
|
||||
PROXY_HTTP_PORT=80
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
FROM python:3.11-slim
|
||||
ARG AUTH_VERSION=v4.0.0a2
|
||||
ARG AUTH_VERSION=v4.0.0a4
|
||||
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
||||
ENV AUTH_USER=allianceauth
|
||||
ENV AUTH_GROUP=allianceauth
|
||||
|
||||
@@ -18,7 +18,7 @@ keywords = [
|
||||
classifiers = [
|
||||
"Environment :: Web Environment",
|
||||
"Framework :: Django",
|
||||
"Framework :: Django :: 4.0",
|
||||
"Framework :: Django :: 4.2",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
|
||||
"Operating System :: POSIX :: Linux",
|
||||
|
||||
Reference in New Issue
Block a user