mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-05 14:46:20 +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
|
<<: *only-default
|
||||||
image: python:3.11-bullseye
|
image: python:3.11-bullseye
|
||||||
script:
|
script:
|
||||||
- tox -e docs
|
- tox -e docs
|
||||||
|
|
||||||
deploy_production:
|
deploy_production:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
@@ -259,16 +259,7 @@ build-image:
|
|||||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||||
docker buildx create --use --name new-builder
|
docker buildx create --use --name new-builder
|
||||||
docker buildx build .
|
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-)
|
||||||
--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:
|
rules:
|
||||||
- if: $CI_COMMIT_TAG
|
- if: $CI_COMMIT_TAG
|
||||||
when: delayed
|
when: delayed
|
||||||
@@ -288,12 +279,7 @@ build-image-dev:
|
|||||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||||
docker buildx create --use --name new-builder
|
docker buildx create --use --name new-builder
|
||||||
docker buildx build .
|
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
|
||||||
--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:
|
rules:
|
||||||
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == ""'
|
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == ""'
|
||||||
when: manual
|
when: manual
|
||||||
@@ -314,12 +300,7 @@ build-image-mr:
|
|||||||
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
docker run --privileged --rm tonistiigi/binfmt --uninstall qemu-*
|
||||||
docker run --privileged --rm tonistiigi/binfmt --install all
|
docker run --privileged --rm tonistiigi/binfmt --install all
|
||||||
docker buildx create --use --name new-builder
|
docker buildx create --use --name new-builder
|
||||||
docker buildx build .
|
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
|
||||||
--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:
|
rules:
|
||||||
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
|
||||||
when: manual
|
when: manual
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ manage online service access.
|
|||||||
# This will make sure the app is always imported when
|
# This will make sure the app is always imported when
|
||||||
# Django starts so that shared_task will use this app.
|
# Django starts so that shared_task will use this app.
|
||||||
|
|
||||||
__version__ = '4.0.0a2'
|
__version__ = '4.0.0a4'
|
||||||
__title__ = 'Alliance Auth'
|
__title__ = 'Alliance Auth'
|
||||||
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
__url__ = 'https://gitlab.com/allianceauth/allianceauth'
|
||||||
NAME = f'{__title__} v{__version__}'
|
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('--python', help='The path to the python executable.')
|
||||||
parser.add_argument('--celery', help='The path to the celery 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('--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):
|
def create_project(parser, options, args):
|
||||||
# Validate args
|
# Validate args
|
||||||
if len(args) < 2:
|
if len(args) < 2:
|
||||||
parser.error("Please specify a name for your Alliance Auth installation.")
|
parser.error("Please specify a name for your Alliance Auth installation.")
|
||||||
elif len(args) > 3:
|
elif len(args) > 4:
|
||||||
parser.error("Too many arguments.")
|
parser.error("Too many arguments.")
|
||||||
|
|
||||||
# First find the path to Alliance Auth
|
# First find the path to Alliance Auth
|
||||||
|
|||||||
@@ -70,22 +70,21 @@ class DiscordService(ServicesHook):
|
|||||||
discord_username = self.get_discord_username(
|
discord_username = self.get_discord_username(
|
||||||
username=username, discriminator=discriminator
|
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:
|
else:
|
||||||
discord_username = ''
|
discord_username = ''
|
||||||
user_has_account = False
|
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(
|
return render_to_string(
|
||||||
self.service_ctrl_template,
|
self.service_ctrl_template,
|
||||||
{
|
{
|
||||||
|
'service_name': self.title,
|
||||||
|
'urls': urls,
|
||||||
'server_name': server_name(),
|
'server_name': server_name(),
|
||||||
'user_has_account': user_has_account,
|
'user_has_account': user_has_account,
|
||||||
'discord_username': discord_username
|
'discord_username': discord_username
|
||||||
|
|||||||
@@ -1,34 +1,49 @@
|
|||||||
|
{% extends "services/services_ctrl_base.html" %}
|
||||||
|
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
<div class="card text-center m-4" style="min-width: 18rem; min-height: 18rem;">
|
|
||||||
<div class="card-body ">
|
{% block title %}
|
||||||
<h5 class="card-title ">{% translate "Discord" %}</h5>
|
{{ service_name }}
|
||||||
<p class="card-text">{% if server_name %}{{ server_name }}{% else %}{% translate "Unlinked Server" %}{% endif %}</p>
|
{% endblock %}
|
||||||
<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">
|
{% block url %}
|
||||||
{% if not user_has_account %}
|
{{ server_name }}
|
||||||
{% translate "(not activated)" %}
|
{% endblock %}
|
||||||
{% else %}
|
|
||||||
{{ discord_username }}
|
{% block active %}
|
||||||
{% endif %}
|
{% include "services/service_status.html" with username=discord_username %}
|
||||||
</p>
|
{% endblock %}
|
||||||
</div>
|
|
||||||
<div class="card-footer">
|
{% block user %}
|
||||||
{% if not user_has_account %}
|
{% if discord_username %}
|
||||||
<a href="{% url 'discord:activate' %}" title="{% translate 'Join the Discord server' %}" class="btn btn-primary">
|
{{ 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>
|
<span class="fas fa-check fa-fw"></span>
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% endif %}
|
||||||
<a href="{% url 'discord:reset' %}" title="{% translate 'Leave- and rejoin the Discord Server (Reset)' %}" class="btn btn-warning">
|
{% 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>
|
<span class="fas fa-sync fa-fw"></span>
|
||||||
</a>
|
</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>
|
<span class="fas fa-times fa-fw"></span>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if request.user.is_superuser %}
|
{% endif %}
|
||||||
<a type="button" id="btnLinkDiscordServer" class="btn btn-primary" href="{% url 'discord:add_bot' %}">
|
|
||||||
<span class="fas fa-link fa-fw"></span>
|
{% if request.user.is_superuser %}
|
||||||
</a>
|
<a class="btn btn-primary" type="button" id="btnLinkDiscordServer" href="{% url urls.auth_add_bot %}" title="{% translate 'Link Discord Server' %}">
|
||||||
{% endif %}
|
<span class="fas fa-link fa-fw"></span>
|
||||||
</div>
|
</a>
|
||||||
</div>
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
|
|||||||
@@ -26,11 +26,11 @@ def deactivate_discord(request):
|
|||||||
if request.user.discord.delete_user(
|
if request.user.discord.delete_user(
|
||||||
is_rate_limited=False, handle_api_exceptions=True
|
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.'))
|
messages.success(request, _('Deactivated Discord account.'))
|
||||||
else:
|
else:
|
||||||
logger.error(
|
logger.error(
|
||||||
"Unsuccessful attempt to deactivate discord for user %s", request.user
|
"Unsuccessful attempt to deactivate Discord for user %s", request.user
|
||||||
)
|
)
|
||||||
messages.error(
|
messages.error(
|
||||||
request, _('An error occurred while processing your Discord account.')
|
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
|
is_rate_limited=False, handle_api_exceptions=True
|
||||||
):
|
):
|
||||||
logger.info(
|
logger.info(
|
||||||
"Successfully deleted discord user for user %s - "
|
"Successfully deleted Discord user for user %s - "
|
||||||
"forwarding to discord activation.",
|
"forwarding to Discord activation.",
|
||||||
request.user
|
request.user
|
||||||
)
|
)
|
||||||
return redirect("discord:activate")
|
return redirect("discord:activate")
|
||||||
|
|
||||||
logger.error(
|
logger.error(
|
||||||
"Unsuccessful attempt to reset discord for user %s", request.user
|
"Unsuccessful attempt to reset Discord for user %s", request.user
|
||||||
)
|
)
|
||||||
messages.error(
|
messages.error(
|
||||||
request, _('An error occurred while processing your Discord account.')
|
request, _('An error occurred while processing your Discord account.')
|
||||||
|
|||||||
@@ -10,11 +10,17 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block user %}
|
{% 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 %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block controls %}
|
{% 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>
|
<span class="fas fa-arrow-right fa-fw"></span>
|
||||||
</a>
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ def activate_ips4(request):
|
|||||||
# if empty we failed
|
# if empty we failed
|
||||||
if result[0] != "" and not Ips4Tasks.has_account(request.user):
|
if result[0] != "" and not Ips4Tasks.has_account(request.user):
|
||||||
ips_user = Ips4User.objects.create(user=request.user, id=result[2], username=result[0])
|
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)
|
# 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.'))
|
messages.success(request, _('Activated IPSuite4 account.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
'username': result[0],
|
'username': result[0],
|
||||||
@@ -35,7 +35,7 @@ def activate_ips4(request):
|
|||||||
}
|
}
|
||||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'IPSuite4'})
|
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'IPSuite4'})
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -48,7 +48,7 @@ def reset_ips4_password(request):
|
|||||||
result = Ips4Manager.update_user_password(request.user.ips4.username)
|
result = Ips4Manager.update_user_password(request.user.ips4.username)
|
||||||
# false we failed
|
# false we failed
|
||||||
if result != "":
|
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.'))
|
messages.success(request, _('Reset IPSuite4 password.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
'username': request.user.ips4.username,
|
'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'})
|
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.'))
|
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -74,10 +74,10 @@ def set_ips4_password(request):
|
|||||||
logger.debug("Form contains password of length %s" % len(password))
|
logger.debug("Form contains password of length %s" % len(password))
|
||||||
result = Ips4Manager.update_custom_password(request.user.ips4.username, plain_password=password)
|
result = Ips4Manager.update_custom_password(request.user.ips4.username, plain_password=password)
|
||||||
if result != "":
|
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.'))
|
messages.success(request, _('Set IPSuite4 password.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||||
return redirect('services:services')
|
return redirect('services:services')
|
||||||
else:
|
else:
|
||||||
@@ -94,9 +94,9 @@ def set_ips4_password(request):
|
|||||||
def deactivate_ips4(request):
|
def deactivate_ips4(request):
|
||||||
logger.debug("deactivate_ips4 called by user %s" % request.user)
|
logger.debug("deactivate_ips4 called by user %s" % request.user)
|
||||||
if Ips4Tasks.delete_user(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.'))
|
messages.success(request, _('Deactivated IPSuite4 account.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your IPSuite4 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|||||||
@@ -1,34 +1,49 @@
|
|||||||
{% load i18n %}
|
{% extends "services/services_ctrl_base.html" %}
|
||||||
<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>
|
|
||||||
|
|
||||||
<div class="card-footer">
|
{% load i18n %}
|
||||||
{% if username == "" %}
|
|
||||||
<div class="text-center">
|
{% block title %}
|
||||||
<a href="{% url 'mumble:activate' %}" title="Activate" class="btn btn-warning">
|
{{ service_name }}
|
||||||
<span class="fas fa-check fa-fw"></span>
|
{% endblock %}
|
||||||
</a>
|
|
||||||
</div>
|
{% block url %}
|
||||||
{% else %}
|
<a href="{{ service_url }}">{{ service_url }}</a>
|
||||||
<div class="text-center">
|
{% endblock %}
|
||||||
<a href="{% url 'mumble:set_password' %}" title="Set Password" class="btn btn-warning">
|
|
||||||
<span class="fas fa-edit fa-fw"></span>
|
{% block user %}
|
||||||
</a>
|
{% include "services/service_username.html" with username=username %}
|
||||||
<a href="{% url 'mumble:reset_password' %}" title="Reset Password" class="btn btn-primary">
|
{% endblock %}
|
||||||
<span class="fas fa-sync fa-fw"></span>
|
|
||||||
</a>
|
{% block controls %}
|
||||||
<a href="{% url 'mumble:deactivate' %}" title="Deactivate" class="btn btn-danger">
|
{% if username == "" %}
|
||||||
<span class="fas fa-times fa-fw"></span>
|
{% if urls.auth_activate %}
|
||||||
</a>
|
<a class="btn btn-warning" href="{% url urls.auth_activate %}" title="{% translate 'Activate' %}">
|
||||||
<a href="mumble://{{ connect_url }}" class="btn btn-success" title="Connect">
|
<span class="fas fa-check fa-fw"></span>
|
||||||
<span class="fas fa-arrow-right fa-fw"></span>
|
</a>
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
{% else %}
|
||||||
</div>
|
{% 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" %}
|
{% extends "allianceauth/base.html" %}
|
||||||
{% load bootstrap %}
|
{% load django_bootstrap5 %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block page_title %}{% translate "Jabber Broadcast" %}{% endblock page_title %}
|
{% block page_title %}{% translate "Jabber Broadcast" %}{% endblock page_title %}
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{% bootstrap_form form %}
|
||||||
<br>
|
<br>
|
||||||
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Broadcast" %}
|
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Broadcast" %}
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -24,23 +24,23 @@ ACCESS_PERM = 'openfire.access_openfire'
|
|||||||
def activate_jabber(request):
|
def activate_jabber(request):
|
||||||
logger.debug("activate_jabber called by user %s" % request.user)
|
logger.debug("activate_jabber called by user %s" % request.user)
|
||||||
character = request.user.profile.main_character
|
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))
|
info = OpenfireManager.add_user(OpenfireTasks.get_username(request.user))
|
||||||
# If our username is blank means we already had a user
|
# If our username is blank means we already had a user
|
||||||
if info[0] != "":
|
if info[0] != "":
|
||||||
OpenfireUser.objects.update_or_create(user=request.user, defaults={'username': 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)
|
OpenfireTasks.update_groups.delay(request.user.pk)
|
||||||
logger.info("Successfully activated jabber for user %s" % request.user)
|
logger.info("Successfully activated Jabber for user %s" % request.user)
|
||||||
messages.success(request, _('Activated jabber account.'))
|
messages.success(request, _('Activated Jabber account.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
'username': info[0],
|
'username': info[0],
|
||||||
'password': info[1],
|
'password': info[1],
|
||||||
}
|
}
|
||||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'})
|
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'})
|
||||||
else:
|
else:
|
||||||
logger.error("Unsuccessful attempt to activate jabber for user %s" % request.user)
|
logger.error("Unsuccessful attempt to activate Jabber for user %s" % request.user)
|
||||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
|
|
||||||
@@ -49,11 +49,11 @@ def activate_jabber(request):
|
|||||||
def deactivate_jabber(request):
|
def deactivate_jabber(request):
|
||||||
logger.debug("deactivate_jabber called by user %s" % request.user)
|
logger.debug("deactivate_jabber called by user %s" % request.user)
|
||||||
if OpenfireTasks.has_account(request.user) and OpenfireTasks.delete_user(request.user):
|
if OpenfireTasks.has_account(request.user) and OpenfireTasks.delete_user(request.user):
|
||||||
logger.info("Successfully deactivated jabber for user %s" % request.user)
|
logger.info("Successfully deactivated Jabber for user %s" % request.user)
|
||||||
messages.success(request, 'Deactivated jabber account.')
|
messages.success(request, 'Deactivated Jabber account.')
|
||||||
else:
|
else:
|
||||||
logger.error("Unsuccessful attempt to deactivate jabber for user %s" % request.user)
|
logger.error("Unsuccessful attempt to deactivate Jabber for user %s" % request.user)
|
||||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
|
|
||||||
@@ -65,15 +65,15 @@ def reset_jabber_password(request):
|
|||||||
result = OpenfireManager.update_user_pass(request.user.openfire.username)
|
result = OpenfireManager.update_user_pass(request.user.openfire.username)
|
||||||
# If our username is blank means we failed
|
# If our username is blank means we failed
|
||||||
if result != "":
|
if result != "":
|
||||||
logger.info("Successfully reset jabber password for user %s" % request.user)
|
logger.info("Successfully reset Jabber password for user %s" % request.user)
|
||||||
messages.success(request, _('Reset jabber password.'))
|
messages.success(request, _('Reset Jabber password.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
'username': request.user.openfire.username,
|
'username': request.user.openfire.username,
|
||||||
'password': result,
|
'password': result,
|
||||||
}
|
}
|
||||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'})
|
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'Jabber'})
|
||||||
logger.error("Unsuccessful attempt to reset jabber for user %s" % request.user)
|
logger.error("Unsuccessful attempt to reset Jabber for user %s" % request.user)
|
||||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||||
return redirect("services:services")
|
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())
|
logger.debug("Received POST request containing form, valid: %s" % form.is_valid())
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
main_char = request.user.profile.main_character
|
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:
|
try:
|
||||||
if main_char is not None:
|
if main_char is not None:
|
||||||
message_to_send = form.cleaned_data['message'] + "\n##### SENT BY: " + "[" + main_char.corporation_ticker + "]" + \
|
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)
|
OpenfireManager.send_broadcast_message(group_to_send, message_to_send)
|
||||||
|
|
||||||
messages.success(request, _('Sent jabber broadcast to %s' % group_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)
|
logger.info("Sent Jabber broadcast on behalf of user %s" % request.user)
|
||||||
except PingBotException as e:
|
except PingBotException as e:
|
||||||
messages.error(request, e)
|
messages.error(request, e)
|
||||||
|
|
||||||
@@ -140,11 +140,11 @@ def set_jabber_password(request):
|
|||||||
logger.debug("Form contains password of length %s" % len(password))
|
logger.debug("Form contains password of length %s" % len(password))
|
||||||
result = OpenfireManager.update_user_pass(request.user.openfire.username, password=password)
|
result = OpenfireManager.update_user_pass(request.user.openfire.username, password=password)
|
||||||
if result != "":
|
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.'))
|
messages.success(request, _('Set jabber password.'))
|
||||||
else:
|
else:
|
||||||
logger.error("Failed to install custom jabber password for user %s" % request.user)
|
logger.error("Failed to install custom Jabber password for user %s" % request.user)
|
||||||
messages.error(request, _('An error occurred while processing your jabber account.'))
|
messages.error(request, _('An error occurred while processing your Jabber account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
else:
|
else:
|
||||||
logger.debug("Request is not type POST - providing empty form.")
|
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
|
main_character = request.user.profile.main_character
|
||||||
|
|
||||||
logger.debug(
|
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(
|
result = SmfManager.add_user(
|
||||||
@@ -42,12 +42,12 @@ def activate_smf(request):
|
|||||||
|
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Updated authserviceinfo for user {request.user} "
|
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)
|
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.'))
|
messages.success(request, _('Activated SMF account.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
@@ -61,7 +61,7 @@ def activate_smf(request):
|
|||||||
context={'credentials': credentials, 'service': 'SMF'},
|
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.'))
|
messages.error(request, _('An error occurred while processing your SMF account.'))
|
||||||
|
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
@@ -74,10 +74,10 @@ def deactivate_smf(request):
|
|||||||
result = SmfTasks.delete_user(request.user)
|
result = SmfTasks.delete_user(request.user)
|
||||||
# false we failed
|
# false we failed
|
||||||
if result:
|
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.'))
|
messages.success(request, _('Deactivated SMF account.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your SMF account.'))
|
||||||
return redirect("services:services")
|
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)
|
result = SmfManager.update_user_password(request.user.smf.username, character.character_id)
|
||||||
# false we failed
|
# false we failed
|
||||||
if result != "":
|
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.'))
|
messages.success(request, _('Reset SMF password.'))
|
||||||
credentials = {
|
credentials = {
|
||||||
'username': request.user.smf.username,
|
'username': request.user.smf.username,
|
||||||
'password': result,
|
'password': result,
|
||||||
}
|
}
|
||||||
return render(request, 'services/service_credentials.html', context={'credentials': credentials, 'service': 'SMF'})
|
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.'))
|
messages.error(request, _('An error occurred while processing your SMF account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -117,10 +117,10 @@ def set_smf_password(request):
|
|||||||
logger.debug("Form contains password of length %s" % len(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)
|
result = SmfManager.update_user_password(request.user.smf.username, character.character_id, password=password)
|
||||||
if result != "":
|
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.'))
|
messages.success(request, _('Set SMF password.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your SMF account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'teamspeak3:admin_update_ts3_groups' %}" class="btn btn-high">
|
<a href="{% url 'teamspeak3:admin_update_ts3_groups' %}" class="btn btn-high">
|
||||||
{% translate "Update TS3 groups" %}
|
{% translate "Update TeamSpeak3 groups" %}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -10,11 +10,11 @@
|
|||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block active %}
|
{% 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 %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block user %}
|
{% block user %}
|
||||||
{{ authinfo.teamspeak3_uid }}
|
{% include "services/service_username.html" with username=authinfo.teamspeak3_uid %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block controls %}
|
{% block controls %}
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
{% extends "allianceauth/base.html" %}
|
{% extends "allianceauth/base-bs5.html" %}
|
||||||
{% load bootstrap %}
|
{% load django_bootstrap5 %}
|
||||||
{% load i18n %}
|
{% 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 extra_css %}{% endblock extra_css %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-lg-12">
|
<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="container-fluid">
|
||||||
<div class="col-md-4 col-md-offset-4">
|
<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>
|
<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>
|
<br>
|
||||||
<form class="form-signin" role="form" action="{% url 'teamspeak3:verify' %}" method="POST">
|
<form class="form-signin" role="form" action="{% url 'teamspeak3:verify' %}" method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{% bootstrap_form form %}
|
||||||
<br>
|
<br>
|
||||||
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Continue" %}</button>
|
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Continue" %}</button>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -24,17 +24,17 @@ def activate_teamspeak3(request):
|
|||||||
|
|
||||||
character = request.user.profile.main_character
|
character = request.user.profile.main_character
|
||||||
with Teamspeak3Manager() as ts3man:
|
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))
|
result = ts3man.add_user(request.user, Teamspeak3Tasks.get_username(request.user))
|
||||||
|
|
||||||
# if its empty we failed
|
# if its empty we failed
|
||||||
if result[0] != "":
|
if result[0] != "":
|
||||||
Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
|
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)
|
||||||
logger.info("Successfully activated TS3 for user %s" % request.user)
|
logger.info("Successfully activated TeamSpeak3 for user %s" % request.user)
|
||||||
messages.success(request, _('Activated TeamSpeak3 account.'))
|
messages.success(request, _('Activated TeamSpeak3 account.'))
|
||||||
return redirect("teamspeak3:verify")
|
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.'))
|
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -67,10 +67,10 @@ def verify_teamspeak3(request):
|
|||||||
def deactivate_teamspeak3(request):
|
def deactivate_teamspeak3(request):
|
||||||
logger.debug("deactivate_teamspeak3 called by user %s" % request.user)
|
logger.debug("deactivate_teamspeak3 called by user %s" % request.user)
|
||||||
if Teamspeak3Tasks.has_account(request.user) and Teamspeak3Tasks.delete_user(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.'))
|
messages.success(request, _('Deactivated TeamSpeak3 account.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -81,7 +81,7 @@ def reset_teamspeak3_perm(request):
|
|||||||
logger.debug("reset_teamspeak3_perm called by user %s" % request.user)
|
logger.debug("reset_teamspeak3_perm called by user %s" % request.user)
|
||||||
if not Teamspeak3Tasks.has_account(request.user):
|
if not Teamspeak3Tasks.has_account(request.user):
|
||||||
return redirect("services:services")
|
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:
|
with Teamspeak3Manager() as ts3man:
|
||||||
ts3man.delete_user(request.user.teamspeak3.uid)
|
ts3man.delete_user(request.user.teamspeak3.uid)
|
||||||
|
|
||||||
@@ -91,12 +91,12 @@ def reset_teamspeak3_perm(request):
|
|||||||
# if blank we failed
|
# if blank we failed
|
||||||
if result[0] != "":
|
if result[0] != "":
|
||||||
Teamspeak3User.objects.update_or_create(user=request.user, defaults={'uid': result[0], 'perm_key': result[1]})
|
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)
|
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.'))
|
messages.success(request, _('Reset TeamSpeak3 permission key.'))
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your TeamSpeak3 account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
@@ -105,5 +105,5 @@ def reset_teamspeak3_perm(request):
|
|||||||
@staff_member_required
|
@staff_member_required
|
||||||
def admin_update_ts3_groups(request):
|
def admin_update_ts3_groups(request):
|
||||||
Teamspeak3Tasks.run_ts3_group_update.delay()
|
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")
|
return redirect("admin:teamspeak3_authts_changelist")
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ def activate_xenforo_forum(request):
|
|||||||
context={'credentials': credentials, 'service': 'XenForo'})
|
context={'credentials': credentials, 'service': 'XenForo'})
|
||||||
|
|
||||||
else:
|
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.'))
|
messages.error(request, _('An error occurred while processing your XenForo account.'))
|
||||||
return redirect("services:services")
|
return redirect("services:services")
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "allianceauth/base-bs5.html" %}
|
{% extends "allianceauth/base-bs5.html" %}
|
||||||
{% load bootstrap %}
|
{% load django_bootstrap5 %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block page_title %}{% translate "Fleet Formatter Tool" %}{% endblock page_title %}
|
{% block page_title %}{% translate "Fleet Formatter Tool" %}{% endblock page_title %}
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<form class="form-signin" role="form" action="" method="POST">
|
<form class="form-signin" role="form" action="" method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{% bootstrap_form form %}
|
||||||
<br>
|
<br>
|
||||||
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Format" %}</button>
|
<button class="btn btn-lg btn-primary btn-block" type="submit">{% translate "Format" %}</button>
|
||||||
<br>
|
<br>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{% extends "allianceauth/base.html" %}
|
{% extends "allianceauth/base-bs5.html" %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
|
|
||||||
@@ -11,9 +11,9 @@
|
|||||||
<h1 class="page-header text-center">
|
<h1 class="page-header text-center">
|
||||||
{% blocktranslate with service_name=view.service_name|title %}Delete {{ service_name }} Account?{% endblocktranslate %}
|
{% blocktranslate with service_name=view.service_name|title %}Delete {{ service_name }} Account?{% endblocktranslate %}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="container-fluid">
|
<div class="container">
|
||||||
<div class="col-md-2 col-md-offset-5">
|
<div class="row justify-content-center">
|
||||||
<div class="row">
|
<div class="col-md-4 align-self-center">
|
||||||
<form action="" method="post">
|
<form action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<p>
|
<p>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{% extends "allianceauth/base.html" %}
|
{% extends "allianceauth/base-bs5.html" %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block page_title %}{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Credentials{% endblocktranslate %}{% endblock page_title %}
|
{% block page_title %}{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Credentials{% endblocktranslate %}{% endblock page_title %}
|
||||||
@@ -6,17 +6,19 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="col-lg-12">
|
<div class="col-lg-12">
|
||||||
<h1 class="page-header text-center">{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Credentials{% endblocktranslate %}</h1>
|
<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="container">
|
||||||
<div class="col-lg-4 col-lg-offset-4">
|
<div class="row justify-content-center">
|
||||||
<form class="form-signin">
|
<div class="col-md-4 align-self-center">
|
||||||
{% for key, value in credentials.items %}
|
<form class="form-signin">
|
||||||
<div class="form-group">
|
{% for key, value in credentials.items %}
|
||||||
<label class="control-label" for="id_{{ key }}">{{ key|capfirst }}</label>
|
<div class="mb-3">
|
||||||
<input class="form-control" value="{{ value }}" id="id_{{ key }}" readonly>
|
<label class="form-label" for="id_{{ key }}">{{ key|capfirst }}</label>
|
||||||
</div>
|
<input class="form-control" value="{{ value }}" id="id_{{ key }}" readonly>
|
||||||
{% endfor %}
|
</div>
|
||||||
</form>
|
{% endfor %}
|
||||||
<a href="{% url 'services:services' %}" class="btn btn-lg btn-block btn-primary" title="Continue">{% translate "Continue" %}</a>
|
</form>
|
||||||
|
<a href="{% url 'services:services' %}" class="btn btn-lg btn-block btn-primary" title="Continue">{% translate "Continue" %}</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "allianceauth/base.html" %}
|
{% extends "allianceauth/base-bs5.html" %}
|
||||||
{% load bootstrap %}
|
{% load django_bootstrap5 %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block page_title %}{% blocktranslate with service_name=view.service_name|title %}{{ service_name }} Password Change{% endblocktranslate %}{% endblock page_title %}
|
{% 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 %}
|
{% block content %}
|
||||||
<div class="col-lg-12">
|
<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>
|
<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="container">
|
||||||
<div class="col-md-4 col-md-offset-4">
|
<div class="row justify-content-center">
|
||||||
<div class="row">
|
<div class="col-md-4 align-self-center">
|
||||||
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
<form class="form-signin" role="form" action="" method="POST" onsubmit="submitbutton.disabled = true; return true;">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form|bootstrap }}
|
{% bootstrap_form form %}
|
||||||
<br>
|
<br>
|
||||||
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Set Password" %}</button>
|
<button class="btn btn-lg btn-primary btn-block" name="submitbutton" type="submit">{% translate "Set Password" %}</button>
|
||||||
</form>
|
</form>
|
||||||
@@ -20,5 +20,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock content %}
|
{% 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>
|
<a href="{{ service_url }}">{{ service_url }}</a>
|
||||||
{% endblock %}
|
{% 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 %}
|
{% block controls %}
|
||||||
{% if username == "" %}
|
{% if username == "" %}
|
||||||
{% if urls.auth_activate %}
|
{% if urls.auth_activate %}
|
||||||
|
|||||||
@@ -1,15 +1,29 @@
|
|||||||
{% load i18n %}
|
{% 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">
|
<div class="card-body">
|
||||||
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
<h5 class="card-title">{% block title %}{% endblock title %}</h5>
|
||||||
<p class="card-text">{% block url %}{% endblock url %}</p>
|
|
||||||
<p class="card-text">
|
<p class="card-text">
|
||||||
{% block active %}
|
{% block active %}
|
||||||
<span class="badge bg-success">Active</span>
|
{% include "services/service_status.html" with username=username %}
|
||||||
{% endblock active %}
|
{% endblock active %}
|
||||||
</p>
|
</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 %}
|
{% block extra %}{% endblock extra %}
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer">{% block controls %}{% endblock controls %}</div>
|
|
||||||
|
<div class="card-footer">
|
||||||
|
{% block controls %}{% endblock controls %}
|
||||||
|
</div>
|
||||||
</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(() => {
|
$(document).ready(() => {
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const inputAbsoluteTime = $('input#id_absolute_time');
|
const inputAbsoluteTime = $('input#id_absolute_time');
|
||||||
const inputCountdown = $('#id_days_left, #id_hours_left, #id_minutes_left');
|
const inputCountdown = $('#id_days_left, #id_hours_left, #id_minutes_left');
|
||||||
|
|
||||||
//inputAbsoluteTime.prop('disabled', true);
|
inputAbsoluteTime.parent().hide();
|
||||||
inputAbsoluteTime.parent().hide()
|
inputAbsoluteTime.parent().prev('label').hide();
|
||||||
inputAbsoluteTime.parent().prev('label').hide()
|
|
||||||
inputCountdown.prop('required', true);
|
inputCountdown.prop('required', true);
|
||||||
|
|
||||||
$('input#id_absolute_checkbox').change(function () {
|
$('input#id_absolute_checkbox').change((event) => {
|
||||||
if ($(this).prop("checked")) {
|
if ($(event.target).prop('checked')) {
|
||||||
// check box enabled
|
// Checkbox is checked
|
||||||
inputAbsoluteTime.parent().show()
|
inputAbsoluteTime.parent().show();
|
||||||
inputAbsoluteTime.parent().prev('label').show()
|
inputAbsoluteTime.parent().prev('label').show();
|
||||||
inputCountdown.parent().hide()
|
inputCountdown.parent().hide();
|
||||||
inputCountdown.parent().prev('label').hide()
|
inputCountdown.parent().prev('label').hide();
|
||||||
inputAbsoluteTime.prop('required', true);
|
inputAbsoluteTime.prop('required', true);
|
||||||
inputCountdown.prop('required', false);
|
inputCountdown.prop('required', false);
|
||||||
} else {
|
} else {
|
||||||
// Checkbox is not checked
|
// Checkbox is not checked
|
||||||
inputAbsoluteTime.parent().hide()
|
inputAbsoluteTime.parent().hide();
|
||||||
inputAbsoluteTime.parent().prev('label').hide()
|
inputAbsoluteTime.parent().prev('label').hide();
|
||||||
inputCountdown.parent().show()
|
inputCountdown.parent().show();
|
||||||
inputCountdown.parent().prev('label').show()
|
inputCountdown.parent().prev('label').show();
|
||||||
inputAbsoluteTime.prop('required', false);
|
inputAbsoluteTime.prop('required', false);
|
||||||
inputCountdown.prop('required', true);
|
inputCountdown.prop('required', true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
{% load admin_status %}
|
{% load admin_status %}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="progress-bar progress-bar-{{ level }} task-status-progress-bar"
|
class="progress-bar bg-{{ level }} task-status-progress-bar"
|
||||||
role="progressbar"
|
role="progressbar"
|
||||||
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
aria-valuenow="{% decimal_widthratio tasks_count tasks_total 100 %}"
|
||||||
aria-valuemin="0"
|
aria-valuemin="0"
|
||||||
|
|||||||
@@ -122,13 +122,14 @@
|
|||||||
{% theme_js %}
|
{% theme_js %}
|
||||||
|
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
<script type="application/javascript">
|
<script>
|
||||||
let notificationUPdateSettings = {
|
const notificationUpdateSettings = {
|
||||||
notificationsListViewUrl: "{% url 'notifications:list' %}",
|
refreshTime: "{% notifications_refresh_time %}",
|
||||||
notificationsRefreshTime: "{% notifications_refresh_time %}",
|
|
||||||
userNotificationsCountViewUrl: "{% url 'notifications:user_notifications_count' request.user.pk %}"
|
userNotificationsCountViewUrl: "{% url 'notifications:user_notifications_count' request.user.pk %}"
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{% include 'bundles/refresh-notification-icon-js.html' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% block extra_javascript %}
|
{% block extra_javascript %}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
<li class="nav-item active">
|
<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>
|
||||||
<li class="nav-item">
|
<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>
|
</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 import timezone
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from .form import TimerForm
|
from allianceauth.timerboard.form import TimerForm
|
||||||
from .models import Timer
|
from allianceauth.timerboard.models import Timer
|
||||||
|
from allianceauth.eveonline.models import EveCorporationInfo
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -91,12 +92,18 @@ class RemoveTimerView(TimerManagementView, DeleteView):
|
|||||||
|
|
||||||
|
|
||||||
def dashboard_timers(request):
|
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]
|
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():
|
if timers.count():
|
||||||
context = {
|
context = {
|
||||||
'timers': timers,
|
'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:
|
else:
|
||||||
return ""
|
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 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__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
PROTOCOL=https://
|
PROTOCOL=https://
|
||||||
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
AUTH_SUBDOMAIN=%AUTH_SUBDOMAIN%
|
||||||
DOMAIN=%DOMAIN%
|
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
|
# Nginx Proxy Manager
|
||||||
PROXY_HTTP_PORT=80
|
PROXY_HTTP_PORT=80
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
FROM python:3.11-slim
|
FROM python:3.11-slim
|
||||||
ARG AUTH_VERSION=v4.0.0a2
|
ARG AUTH_VERSION=v4.0.0a4
|
||||||
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
ARG AUTH_PACKAGE=allianceauth==${AUTH_VERSION}
|
||||||
ENV AUTH_USER=allianceauth
|
ENV AUTH_USER=allianceauth
|
||||||
ENV AUTH_GROUP=allianceauth
|
ENV AUTH_GROUP=allianceauth
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ keywords = [
|
|||||||
classifiers = [
|
classifiers = [
|
||||||
"Environment :: Web Environment",
|
"Environment :: Web Environment",
|
||||||
"Framework :: Django",
|
"Framework :: Django",
|
||||||
"Framework :: Django :: 4.0",
|
"Framework :: Django :: 4.2",
|
||||||
"Intended Audience :: Developers",
|
"Intended Audience :: Developers",
|
||||||
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
|
"License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
|
||||||
"Operating System :: POSIX :: Linux",
|
"Operating System :: POSIX :: Linux",
|
||||||
|
|||||||
Reference in New Issue
Block a user