Compare commits

...

53 Commits

Author SHA1 Message Date
Basraah
aecc94bdb3 Version bump to v2.2.1 2019-08-25 03:20:45 +00:00
Basraah
fcb7f2905a Merge branch 'url_group' into 'master'
urlize group descriptions to hyperlink if required

See merge request allianceauth/allianceauth!1132
2019-08-24 22:48:57 +00:00
Basraah
34c7169ca3 Merge branch 'local_settings_update' into 'master'
Enable utf8mb4 charset option in local.py by default

See merge request allianceauth/allianceauth!1131
2019-08-24 22:47:25 +00:00
Basraah
6e450061f4 Merge branch 'group-rework' into 'master'
Make group joins a bit clearer

See merge request allianceauth/allianceauth!1134
2019-08-24 22:46:46 +00:00
Basraah
fc3d7e9f43 Merge branch 'auto-group' into 'master'
Fix Autogroups, Add Autogroups to admin

Closes #1087

See merge request allianceauth/allianceauth!1133
2019-08-24 22:45:25 +00:00
Aaron Kable
514db4f9a2 Make group joins a bit clearer 2019-08-23 03:54:24 -04:00
Aaron Kable
23a8b65ce2 Fix Autogroups, Add Autogroups to admin 2019-08-22 20:37:55 -04:00
Aaron Kable
f8e6662bc8 urlize group descriptions to hyperlink if required 2019-07-26 00:35:59 -04:00
Col Crunch
89be2456fb Update local.py to have the utf8mb4 charset option enabled in the database settings. This brings the settings inline with the documentation update. 2019-06-30 22:58:13 -04:00
Basraah
bfd3451717 Merge branch 'db_doc' into 'master'
Use utf8mb4 When Creating Auth DB

See merge request allianceauth/allianceauth!1130
2019-06-20 00:49:30 +00:00
Col Crunch
0b759d6a32 Use utf8mb4 when creating auth db rather than utf8 2019-06-19 16:27:18 -04:00
Basraah
65e05084e6 Merge branch 'master' into 'master'
Show "Help" link only to superuser

See merge request allianceauth/allianceauth!1129
2019-06-17 00:56:28 +00:00
Peter Pfeufer
f25a4ed386 Show "Help" lnk only to superuser 2019-06-15 23:44:36 +02:00
Basraah
b2a1d41829 Merge branch 'patch-1' into 'master'
Add Ariel Rin and Col Crunch as developers to readme

See merge request allianceauth/allianceauth!1128
2019-05-29 09:21:51 +00:00
Basraah
2741a92d31 Version bump to v2.2.0 2019-04-14 03:07:22 +00:00
Ariel Rin
3570ce86d7 Add Ariel Rin and Col Crunch as developers to readme 2019-03-17 05:39:43 +00:00
Basraah
d809902d1e Merge branch 'issue-templates' into 'master'
Create Issue Templates

See merge request allianceauth/allianceauth!1111
2019-03-12 22:16:00 +00:00
Ariel Rin
ec4232c00a Create Issue Templates 2019-03-12 22:16:00 +00:00
Basraah
dec793bfac Merge branch 'dependencies' into 'master'
Depencies fix

Closes #1150

See merge request allianceauth/allianceauth!1127
2019-03-12 20:50:00 +10:00
Basraah
fe3fe0527a Merge branch 'timer-change' into 'master'
Rename Citadels and FLEX Structures

See merge request allianceauth/allianceauth!1126
2019-03-12 10:06:53 +00:00
colcrunch
a8855e86ed Change Type [SIZE] notation for Citadels/EC/Refineries to structure names to reduce ambiguity.
Also, Added "Brand names" for the Beacon, Jammer, and Gate.
2019-03-12 10:06:53 +00:00
Basraah
179d1c38e6 Merge branch 'dj-2.1' into 'master'
Django 2.1 Compatibility

See merge request allianceauth/allianceauth!1124
2019-03-12 10:05:05 +00:00
colcrunch
287da73a4f Update StateBackend.authenticate to match ModelBackend
Also, change setup to no longer include Django 1.11
2019-03-12 10:05:05 +00:00
Basraah
e9ed917888 Merge branch 'fix_discourse_usernames' into 'master'
Send usernames as string instead of array

Closes #1149

See merge request allianceauth/allianceauth!1123
2019-03-12 10:00:52 +00:00
Basraah
70d842c971 Merge branch 'jokke_ilujo/Issue1146' into 'master'
Precent encode mumble username for connect link

See merge request allianceauth/allianceauth!1121
2019-03-12 09:58:07 +00:00
Basraah
bcda228e05 Merge branch 'mysql-docs-fix' into 'master'
Add Time Zone table instructions to Install Docs

See merge request allianceauth/allianceauth!1119
2019-03-12 09:56:20 +00:00
colcrunch
000dafc5e6 Add Time Zone table instructions to Install Docs 2019-03-12 09:56:20 +00:00
Basraah
4ea824fe71 Merge branch 'audit-log-update' into 'master'
Add datetime to Audit Log entries.

Closes #1134

See merge request allianceauth/allianceauth!1115
2019-03-12 09:53:43 +00:00
colcrunch
f72f539516 Add datetime to auditlog entries.
Also, change ordering, add pagination, and stripe the table for increased readability.

Action column now also reads "Removed" when a user is removed from a group. Note that this does not change anything on the back-end, so if you use this data for anything else, be aware that while the template is explicit, the data isn't as explicit.
2019-03-12 09:53:43 +00:00
Stephen Shirley
1b192a184f Send usernames as string instead of array
Fixes https://gitlab.com/allianceauth/allianceauth/issues/1149
2019-02-09 11:10:34 +01:00
Erno Kuvaja
0edf896b4c Precent encode mumble username for connect link
This change wraps mumble username on connect link forming with
urllib.parse.quote() to ensure that the username does not contain
unsafe reserved characters and gets passed properly to mumble.

Fixes Issue: #1146
2019-01-21 14:12:50 +00:00
Basraah
7dec4deb70 Version bump to v2.1.1 2018-12-20 22:17:04 +00:00
Basraah
d511221899 Merge branch 'flex-structures' into 'master'
Add Flex Structures to timerboard

See merge request allianceauth/allianceauth!1112
2018-12-20 22:06:01 +00:00
Basraah
d2b7de5221 Merge branch 'master' into 'master'
Update Readme and fix GitLab announcements

See merge request allianceauth/allianceauth!1113
2018-12-20 22:04:39 +00:00
colcrunch
79c5be02e2 Update Readme and fix GitLab announcements 2018-12-20 22:04:39 +00:00
Basraah
09df37438d Add missing order_by, thanks @Fundaris 2018-12-20 22:02:25 +00:00
Basraah
8561e4c6fd Merge branch 'corpstats-fix' into 'master'
update corpstats swagger.json

Closes #1139

See merge request allianceauth/allianceauth!1116
2018-12-20 21:49:35 +00:00
Aaron Kable
976cb4d988 update corpstats swagger.json 2018-12-20 08:27:56 -05:00
soratidus999
20f7d5103c Add FLEX to past timers as well as present 2018-12-01 17:43:35 +10:00
soratidus999
d049ec2832 Add Flex Structures to timerboard
New FLEX structures as per https://support.eveonline.com/hc/en-us/articles/213021829-Upwell-Structures

Cleaned up layout slightly and removed Stations as there are no longer any conquerable stations left
2018-12-01 17:26:51 +10:00
Basraah
00fe2a527e Version bump to v2.1.0 2018-11-30 07:56:54 +00:00
Basraah
f53ec3b43e Merge branch 'corputils_alliance_fix' into 'master'
None is not a valid alliance ID.

Closes #1122

See merge request allianceauth/allianceauth!1106
2018-11-30 07:54:51 +00:00
colcrunch
4d0417f114 None is not a valid alliance ID. 2018-11-30 07:54:51 +00:00
Basraah
00903b64db Merge branch 'github-to-gitlab' into 'master'
Update GitHub references to Gitlab

See merge request allianceauth/allianceauth!1110
2018-11-30 03:55:19 +00:00
Ariel Rin
a3038cad00 Update GitHub references to Gitlab 2018-11-30 03:55:19 +00:00
Basraah
ef99f1afac Merge branch 'services-market-deprecate' into 'master'
replace market docs with deprecation notice

See merge request allianceauth/allianceauth!1105
2018-11-29 23:55:37 +00:00
Basraah
cc00d4bd04 Merge branch 'services-phpbb3-docsupdate' into 'master'
Set default theme in PHPBB3, explain impact in docs

See merge request allianceauth/allianceauth!1107
2018-11-29 23:51:49 +00:00
Basraah
250f26ff6f Merge branch 'master' into 'master'
django-redis-cache does not support redis 3

See merge request allianceauth/allianceauth!1108
2018-11-29 23:51:22 +00:00
Basraah
62b786ca4a Merge branch 'zkill_fix' into 'master'
Fix srp url for zkill api

See merge request allianceauth/allianceauth!1109
2018-11-29 23:51:09 +00:00
Ariel Rin
9cfb47e658 Limit redis to 2.0 due to 3.0 incompatabilities 2018-11-29 23:12:11 +00:00
Mike
ccef27b637 Fix srp url for zkill api 2018-11-17 20:26:16 -05:00
soratidus999
8dee61fd39 Set default theme in PHPBB3, explain impact in docs
The default theme in PHPBB3 needs to be set or users cannot see the forum, this is needed because AA creates users without a theme set.

Docs explain impact and how to avoid when changing theme later on.
2018-11-15 17:45:33 +10:00
soratidus999
ae64bd0e19 replace docs with deprecation notice 2018-11-14 21:59:05 +10:00
39 changed files with 777 additions and 785 deletions

4
.gitignore vendored
View File

@@ -62,5 +62,7 @@ celerybeat-schedule
#pycharm
.idea/*
/nbproject/
#gitlab configs
.gitlab/

View File

@@ -25,14 +25,6 @@
coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
py36-dj111:
<<: *job_definition
image: python:3.6-stretch
script:
- export TOXENV=py36-dj111
- tox
py36-dj20:
<<: *job_definition
image: python:3.6-stretch

View File

@@ -0,0 +1,14 @@
# Bug
- I have searched [issues](https://gitlab.com/allianceauth/allianceauth/issues?scope=all&utf8=%E2%9C%93&state=all) (Y/N):
- What Version of Alliance Auth:
- What Operating System:
- Version of other components relevant to issue eg. Service, Database:
Please include a brief description of your issue here.
Please include steps to reproduce the issue
Please include any tracebacks or logs
Please include the results of the command `pip list`

View File

@@ -0,0 +1,7 @@
# Feature Request
- Describe the feature are you requesting.
- Is this a Service (external integration), a Module (Alliance Auth extension) or an enhancement to an existing service/module.
- Describe why its useful to you or others.

View File

@@ -1,7 +1,7 @@
Alliance Auth
============
[![Join the chat at https://gitter.im/R4stl1n/allianceauth](https://badges.gitter.im/R4stl1n/allianceauth.svg)](https://gitter.im/R4stl1n/allianceauth?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Chat on Discord](https://img.shields.io/discord/399006117012832262.svg)](https://discord.gg/fjnHAmk)
[![Documentation Status](https://readthedocs.org/projects/allianceauth/badge/?version=latest)](http://allianceauth.readthedocs.io/?badge=latest)
[![pipeline status](https://gitlab.com/allianceauth/allianceauth/badges/master/pipeline.svg)](https://gitlab.com/allianceauth/allianceauth/commits/master)
[![coverage report](https://gitlab.com/allianceauth/allianceauth/badges/master/coverage.svg)](https://gitlab.com/allianceauth/allianceauth/commits/master)
@@ -12,18 +12,20 @@ An auth system for EVE Online to help in-game organizations manage online servic
[Read the docs here.](http://allianceauth.rtfd.io)
[Get help on gitter](https://gitter.im/R4stl1n/allianceauth) or submit an Issue.
[Get help on Discord](https://discord.gg/fjnHAmk) or submit an Issue.
Active Developers:
- [Adarnof](https://github.com/adarnof/)
- [Basraah](https://github.com/basraah/)
- [Adarnof](https://gitlab.com/adarnof/)
- [Basraah](https://gitlab.com/basraah/)
- [Ariel Rin](https://gitlab.com/soratidus999/)
- [Col Crunch](https://gitlab.com/colcrunch/)
Beta Testers / Bug Fixers:
- [ghoti](https://github.com/ghoti/)
- [mmolitor87](https://github.com/mmolitor87/)
- [ghoti](https://gitlab.com/ChainsawMcGinny/)
- [mmolitor87](https://gitlab.com/mmolitor87/)
- [TargetZ3R0](https://github.com/TargetZ3R0)
- [kaezon](https://github.com/kaezon/)
- [orbitroom](https://github.com/orbitroom/)
@@ -32,4 +34,4 @@ Beta Testers / Bug Fixers:
Special thanks to [Nikdoof](https://github.com/nikdoof/), as his [auth](https://github.com/nikdoof/test-auth) was the foundation for the original work on this project.
### Contributing
Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.
Make sure you have signed the [License Agreement](https://developers.eveonline.com/resource/license-agreement) by logging in at [https://developers.eveonline.com](https://developers.eveonline.com) before submitting any pull requests.

View File

@@ -1,6 +1,6 @@
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
__version__ = '2.1b1'
__version__ = '2.2.1'
NAME = 'Alliance Auth v%s' % __version__
default_app_config = 'allianceauth.apps.AllianceAuthConfig'

View File

@@ -27,7 +27,7 @@ class StateBackend(ModelBackend):
user_obj._perm_cache.update(self.get_state_permissions(user_obj))
return user_obj._perm_cache
def authenticate(self, token=None):
def authenticate(self, request=None, token=None, **credentials):
if not token:
return None
try:

View File

@@ -119,7 +119,7 @@ class BackendTestCase(TestCase):
def test_authenticate_character_record(self):
t = Token(character_id=self.unclaimed_character.character_id, character_name=self.unclaimed_character.character_name, character_owner_hash='4')
record = OwnershipRecord.objects.create(user=self.old_user, character=self.unclaimed_character, owner_hash='4')
user = StateBackend().authenticate(t)
user = StateBackend().authenticate(token=t)
self.assertEqual(user, self.old_user)
self.assertTrue(CharacterOwnership.objects.filter(owner_hash='4', user=self.old_user).exists())
self.assertTrue(user.profile.main_character)

View File

@@ -16,10 +16,16 @@ class CorpStatsQuerySet(models.QuerySet):
assert char
# build all accepted queries
queries = [models.Q(token__user=user)]
if user.has_perm('corputils.view_corp_corpstats'):
queries.append(models.Q(corp__corporation_id=char.corporation_id))
if user.has_perm('corputils.view_alliance_corpstats'):
queries.append(models.Q(corp__alliance__alliance_id=char.alliance_id))
if char.alliance_id is not None:
queries.append(models.Q(corp__alliance__alliance_id=char.alliance_id))
else:
queries.append(models.Q(corp__corporation_id=char.corporation_id))
if user.has_perm('corputils.view_corp_corpstats'):
if user.has_perm('corputils.view_alliance_corpstats'):
pass
else:
queries.append(models.Q(corp__corporation_id=char.corporation_id))
if user.has_perm('corputils.view_state_corpstats'):
queries.append(models.Q(corp__in=user.profile.state.member_corporations.all()))
queries.append(models.Q(corp__alliance__in=user.profile.state.member_alliances.all()))

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
from django.contrib import admin
from django.db import models
from .models import AutogroupsConfig
from .models import AutogroupsConfig, ManagedCorpGroup, ManagedAllianceGroup
import logging
@@ -37,3 +37,6 @@ class AutogroupsConfigAdmin(admin.ModelAdmin):
admin.site.register(AutogroupsConfig, AutogroupsConfigAdmin)
admin.site.register(ManagedCorpGroup)
admin.site.register(ManagedAllianceGroup)

View File

@@ -179,15 +179,13 @@ class AutogroupsConfig(models.Model):
@transaction.atomic
def create_alliance_group(self, alliance: EveAllianceInfo) -> Group:
group, created = Group.objects.get_or_create(name=self.get_alliance_group_name(alliance))
if created:
ManagedAllianceGroup.objects.create(group=group, config=self, alliance=alliance)
ManagedAllianceGroup.objects.get_or_create(group=group, config=self, alliance=alliance)
return group
@transaction.atomic
def create_corp_group(self, corp: EveCorporationInfo) -> Group:
group, created = Group.objects.get_or_create(name=self.get_corp_group_name(corp))
if created:
ManagedCorpGroup.objects.create(group=group, config=self, corp=corp)
ManagedCorpGroup.objects.get_or_create(group=group, config=self, corp=corp)
return group
def delete_alliance_managed_groups(self):
@@ -240,6 +238,8 @@ class ManagedGroup(models.Model):
class Meta:
abstract = True
def __str__(self):
return "Managed Group: %s" % self.group.name
class ManagedCorpGroup(ManagedGroup):
corp = models.ForeignKey(EveCorporationInfo, on_delete=models.CASCADE)

View File

@@ -122,7 +122,7 @@ def fatlink_statistics_corp_view(request, corpid, year=None, month=None):
start_of_next_month = first_day_of_next_month(year, month)
start_of_previous_month = first_day_of_previous_month(year, month)
fat_stats = {}
corp_members = CharacterOwnership.objects.filter(character__corporation_id=corpid).values('user_id').distinct()
corp_members = CharacterOwnership.objects.filter(character__corporation_id=corpid).order_by('user_id').values('user_id').distinct()
for member in corp_members:
try:

View File

@@ -1,254 +1,254 @@
{% extends "allianceauth/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block page_title %}FleetUp{% endblock page_title %}
{% block content %}
<div class="col-lg-12">
{% include "fleetup/menu.html" %}
<div>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#operations">{% trans "Operations" %}</a></li>
<li><a data-toggle="tab" href="#timers">{% trans "Timers" %}</a></li>
</ul>
<div class="tab-content row">
<div id="operations" class="tab-pane fade in active">
<div class="col-lg-8">
{% if operations_list %}
{% for subject, start in operations_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><b>{{ start.subject }}</b></h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<tr>
<th class="col-md-6">{% trans "Start" %}</th>
<th class="col-md-6">{% trans "End" %}</th>
</tr>
<tr>
<td class="col-md-6">{{ start.start|date:"l d M H:i" }} <span class="label label-success">{% trans "Eve Time" %}</span></td>
<td class="col-md-6">{{ start.end|date:"l d M H:i" }} <span class="label label-success">{% trans "Eve Time" %}</span></td>
</tr>
<tr>
<td class="col-md-6">
<span id="localtime{{ start.operation_id }}"></span>&nbsp;<span class='label label-success'>Local time</span><br>
<div id="countdown{{ start.operation_id }}"></div>
</td>
<td class="col-md-6"></td>
</tr>
</table>
{{ start.details|linebreaks }}
<table class="table table-condensed table-striped">
<tr>
<th class="col-md-4">{% trans "Location" %}</th>
<th class="col-md-4">{% trans "Doctrine" %}</th>
<th class="col-md-2">{% trans "Organizer" %}</th>
<th class="col-md-2">{% trans "URL" %}</th>
</tr>
<tr>
<td>
{{ start.location }} - {{ start.location_info }} <a href="http://evemaps.dotlan.net/system/{{ start.location }}" target="_blank" class="label label-success">Dotlan</a>
</td>
<td>
{% if start.doctrine %}
{% for doctrine in start.doctrine %}
<a href="{% url 'fleetup:doctrine' doctrine.Id %}" class="label label-success">{{ doctrine.Name }}</a>
{% endfor %}
{% else %}
<span class="label label-danger">{% trans "TBA" %}</span>
{% endif %}
</td>
<td>
{{ start.organizer }}
</td>
<td>
{% ifequal start.url "" %}
<div class="label label-danger">{% trans "No link" %}</div>
{% else %}
<a href="{{ start.url }}" target="_blank" class="label label-success">{% trans "External link" %}</a>
{% endifequal %}
</td>
</tr>
</table>
</div>
</div>
{% endfor %}
{% else %}
<h3>{% trans "There seems to be no Operations in the near future." %}</h3>
{% endif %}
</div>
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Current Eve Time:" %}</h2>
</div>
<div class="panel-body">
<div id="current-time"></div>
</div>
</div>
{% if timers_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Timers" %}</h2>
</div>
<div class="panel-body">
<table class="table table-condensed table-hover table-striped">
{% for notes, type in timers_list %}
<tr>
<td>
{{ type.solarsystem }}
</td>
<td>
{{ type.expires|date:"l d M H:i" }}
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endif %}
</div>
</div>
<div id="timers" class="tab-pane fade in">
<div class="col-lg-12">
{% if timers_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Timers" %}</h2>
</div>
<div class="panel-body">
<div class="col-lg-12">
<table class="table table-condensed table-hover table-striped">
<tr>
<th class="col-lg-1">{% trans "Type" %}</th>
<th class="col-lg-1">{% trans "Structure" %}</th>
<th class="col-lg-2">{% trans "Location" %}</th>
<th class="col-lg-2">{% trans "Expires(EVE-time)" %}</th>
<th class="col-lg-1">{% trans "Owner" %}</th>
<th class="col-lg-2">{% trans "Note" %}</th>
</tr>
{% for notes, type in timers_list %}
<tr>
<td>
{% ifequal type.type "Final" %}
<span class="label label-danger">
{{ type.type }}</span>{% else %}{{ type.type }}{% endifequal %}
</td>
<td>
{{ type.timer_type }}
</td>
<td>
{{ type.solarsystem }} - Planet:{{ type.planet }} Moon:{{ type.moon }}
</td>
<td>
{{ type.expires|date:"l d M H:i" }}
</td>
<td>
{{ type.owner }}
</td>
<td>
{{ type.notes }}
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
{% else %}
<h3>{% trans "There seems to be no Timers in the near future." %}</h3>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% include 'bundles/moment-js.html' with locale=True %}
<script src="{% static 'js/timers.js' %}"></script>
<script type="text/javascript">
// Data
var timers = [
{% for start, op in operations_list %}
{
'id': {{ op.operation_id }},
'start': moment("{{ op.start | date:"c" }}"),
'end': moment("{{ op.end | date:"c" }}"),
'expired': false
},
{% endfor %}
]
</script>
<script type="text/javascript">
timedUpdate();
setAllLocalTimes();
// Start timed updates
setInterval(timedUpdate, 1000);
function timedUpdate() {
updateClock();
updateAllTimers();
}
function updateAllTimers () {
var l = timers.length;
for (var i=0; i < l; ++i) {
if (timers[i].expired) continue;
updateTimer(timers[i]);
}
}
/**
* Update a timer
* @param timer Timer information
* @param timer.start Date of the timer
* @param timer.id Id number of the timer
* @param timer.expired
*/
function updateTimer(timer) {
if (timer.start.isAfter(Date.now())) {
var duration = moment.duration(timer.start - moment(), 'milliseconds');
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
} else {
timer.expired = true;
document.getElementById("countdown" + timer.id).innerHTML = "";
}
}
/**
* Set all local time fields
*/
function setAllLocalTimes() {
var l = timers.length;
for (var i=0; i < l; ++i) {
setLocalTime(timers[i]);
}
}
/**
* Set the local time info for the timer
* @param timer Timer information
* @param timer.start Date of the timer
* @param timer.id Id number of the timer
*/
function setLocalTime(timer) {
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
}
function updateClock() {
document.getElementById("current-time").innerHTML = "<b>" + moment.utc().format('ddd, ll HH:mm:ss z') + "</b>";
}
</script>
{% endblock content %}
{% extends "allianceauth/base.html" %}
{% load bootstrap %}
{% load staticfiles %}
{% load i18n %}
{% block page_title %}FleetUp{% endblock page_title %}
{% block content %}
<div class="col-lg-12">
{% include "fleetup/menu.html" %}
<div>
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#operations">{% trans "Operations" %}</a></li>
<li><a data-toggle="tab" href="#timers">{% trans "Timers" %}</a></li>
</ul>
<div class="tab-content row">
<div id="operations" class="tab-pane fade in active">
<div class="col-lg-8">
{% if operations_list %}
{% for subject, start in operations_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><b>{{ start.subject }}</b></h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<tr>
<th class="col-md-6">{% trans "Start" %}</th>
<th class="col-md-6">{% trans "End" %}</th>
</tr>
<tr>
<td class="col-md-6">{{ start.start|date:"l d M H:i" }} <span class="label label-success">{% trans "Eve Time" %}</span></td>
<td class="col-md-6">{{ start.end|date:"l d M H:i" }} <span class="label label-success">{% trans "Eve Time" %}</span></td>
</tr>
<tr>
<td class="col-md-6">
<span id="localtime{{ start.operation_id }}"></span>&nbsp;<span class='label label-success'>Local time</span><br>
<div id="countdown{{ start.operation_id }}"></div>
</td>
<td class="col-md-6"></td>
</tr>
</table>
{{ start.details|linebreaks }}
<table class="table table-condensed table-striped">
<tr>
<th class="col-md-4">{% trans "Location" %}</th>
<th class="col-md-4">{% trans "Doctrine" %}</th>
<th class="col-md-2">{% trans "Organizer" %}</th>
<th class="col-md-2">{% trans "URL" %}</th>
</tr>
<tr>
<td>
{{ start.location }} - {{ start.location_info }} <a href="http://evemaps.dotlan.net/system/{{ start.location }}" target="_blank" class="label label-success">Dotlan</a>
</td>
<td>
{% if start.doctrine %}
{% for doctrine in start.doctrine %}
<a href="{% url 'fleetup:doctrine' doctrine.Id %}" class="label label-success">{{ doctrine.Name }}</a>
{% endfor %}
{% else %}
<span class="label label-danger">{% trans "TBA" %}</span>
{% endif %}
</td>
<td>
{{ start.organizer }}
</td>
<td>
{% ifequal start.url "" %}
<div class="label label-danger">{% trans "No link" %}</div>
{% else %}
<a href="{{ start.url }}" target="_blank" class="label label-success">{% trans "External link" %}</a>
{% endifequal %}
</td>
</tr>
</table>
</div>
</div>
{% endfor %}
{% else %}
<h3>{% trans "There seems to be no Operations in the near future." %}</h3>
{% endif %}
</div>
<div class="col-lg-4">
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Current Eve Time:" %}</h2>
</div>
<div class="panel-body">
<div id="current-time"></div>
</div>
</div>
{% if timers_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Timers" %}</h2>
</div>
<div class="panel-body">
<table class="table table-condensed table-hover table-striped">
{% for notes, type in timers_list %}
<tr>
<td>
{{ type.solarsystem }}
</td>
<td>
{{ type.expires|date:"l d M H:i" }}
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endif %}
</div>
</div>
<div id="timers" class="tab-pane fade in">
<div class="col-lg-12">
{% if timers_list %}
<div class="panel panel-default">
<div class="panel-heading">
<h2 class="panel-title">{% trans "Timers" %}</h2>
</div>
<div class="panel-body">
<div class="col-lg-12">
<table class="table table-condensed table-hover table-striped">
<tr>
<th class="col-lg-1">{% trans "Type" %}</th>
<th class="col-lg-1">{% trans "Structure" %}</th>
<th class="col-lg-2">{% trans "Location" %}</th>
<th class="col-lg-2">{% trans "Expires(EVE-time)" %}</th>
<th class="col-lg-1">{% trans "Owner" %}</th>
<th class="col-lg-2">{% trans "Note" %}</th>
</tr>
{% for notes, type in timers_list %}
<tr>
<td>
{% ifequal type.type "Final" %}
<span class="label label-danger">
{{ type.type }}</span>{% else %}{{ type.type }}{% endifequal %}
</td>
<td>
{{ type.timer_type }}
</td>
<td>
{{ type.solarsystem }} - Planet:{{ type.planet }} Moon:{{ type.moon }}
</td>
<td>
{{ type.expires|date:"l d M H:i" }}
</td>
<td>
{{ type.owner }}
</td>
<td>
{{ type.notes }}
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
</div>
{% else %}
<h3>{% trans "There seems to be no Timers in the near future." %}</h3>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% include 'bundles/moment-js.html' with locale=True %}
<script src="{% static 'js/timers.js' %}"></script>
<script type="text/javascript">
// Data
var timers = [
{% for start, op in operations_list %}
{
'id': {{ op.operation_id }},
'start': moment("{{ op.start | date:"c" }}"),
'end': moment("{{ op.end | date:"c" }}"),
'expired': false
},
{% endfor %}
]
</script>
<script type="text/javascript">
timedUpdate();
setAllLocalTimes();
// Start timed updates
setInterval(timedUpdate, 1000);
function timedUpdate() {
updateClock();
updateAllTimers();
}
function updateAllTimers () {
var l = timers.length;
for (var i=0; i < l; ++i) {
if (timers[i].expired) continue;
updateTimer(timers[i]);
}
}
/**
* Update a timer
* @param timer Timer information
* @param timer.start Date of the timer
* @param timer.id Id number of the timer
* @param timer.expired
*/
function updateTimer(timer) {
if (timer.start.isAfter(Date.now())) {
var duration = moment.duration(timer.start - moment(), 'milliseconds');
document.getElementById("countdown" + timer.id).innerHTML = getDurationString(duration);
} else {
timer.expired = true;
document.getElementById("countdown" + timer.id).innerHTML = "";
}
}
/**
* Set all local time fields
*/
function setAllLocalTimes() {
var l = timers.length;
for (var i=0; i < l; ++i) {
setLocalTime(timers[i]);
}
}
/**
* Set the local time info for the timer
* @param timer Timer information
* @param timer.start Date of the timer
* @param timer.id Id number of the timer
*/
function setLocalTime(timer) {
document.getElementById("localtime" + timer.id).innerHTML = timer.start.format("ddd @ LT");
}
function updateClock() {
document.getElementById("current-time").innerHTML = "<b>" + moment.utc().format('ddd, ll HH:mm:ss z') + "</b>";
}
</script>
{% endblock content %}

View File

@@ -0,0 +1,19 @@
# Generated by Django 2.0.8 on 2018-12-07 08:56
import datetime
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('groupmanagement', '0010_authgroup_states'),
]
operations = [
migrations.AddField(
model_name='requestlog',
name='date',
field=models.DateTimeField(default=datetime.datetime(2018, 12, 7, 8, 56, 33, 846342)),
),
]

View File

@@ -4,6 +4,7 @@ from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from allianceauth.authentication.models import State
from datetime import datetime
class GroupRequest(models.Model):
@@ -30,6 +31,7 @@ class RequestLog(models.Model):
request_info = models.CharField(max_length=254)
action = models.BooleanField(default=0)
request_actor = models.ForeignKey(User, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=datetime.utcnow())
def requestor(self):
return self.request_info.split(":")[0]

View File

@@ -3,38 +3,60 @@
{% load i18n %}
{% block page_title %}{{ group }} {% trans "Audit Log" %}{% endblock page_title %}
{% block extra_css %}{% endblock extra_css %}
{% block content %}
<div class="col-lg-12">
<br>
{% include 'groupmanagement/menu.html' %}
<div>
{% if entries %}
<h3>{{ group }} Audit Log</h3>
<table class="table">
<tr>
<th class="text-center">{% trans "Requestor" %}</th>
<th class="text-center">{% trans "Main Character" %}</th>
<th class="text-center">{% trans "Group" %}</th>
<th class="text-center">{% trans "Type" %}</th>
<th class="text-center">{% trans "Action" %}</th>
<th class="text-center">{% trans "Actor" %}</th>
</tr>
{% for entry in entries %}
<tr>
<td class="text-center">{{ entry.requestor }}</td>
<td class="text-center">{{ entry.req_char }}</td>
<td class="text-center">{{ entry.group }}</td>
<td class="text-center">{{ entry.type_to_str }}</td>
<td class="text-center">{{ entry.action_to_str }}</td>
<td class="text-center">{{ entry.request_actor }}</td>
</tr>
{% endfor %}
</table>
<p> All times displayed are EVE/UTC.</p>
{% if entries %}
<div class="table-responsive">
<table class="table table-striped" id="log-entries">
<thead>
<th class="text-center" scope="col">{% trans "Date/Time" %}</th>
<th class="text-center" scope="col">{% trans "Requestor" %}</th>
<th class="text-center" scope="col">{% trans "Main Character" %}</th>
<th class="text-center" scope="col">{% trans "Group" %}</th>
<th class="text-center" scope="col">{% trans "Type" %}</th>
<th class="text-center" scope="col">{% trans "Action" %}</th>
<th class="text-center" scope="col">{% trans "Actor" %}</th>
</thead>
<tbody>
{% for entry in entries %}
<tr>
<td class="text-center">{{ entry.date }}</td>
<td class="text-center">{{ entry.requestor }}</td>
<td class="text-center">{{ entry.req_char }}</td>
<td class="text-center">{{ entry.group }}</td>
<td class="text-center">{{ entry.type_to_str }}</td>
{% if entry.request_type is None %}
<td class="text-center"> Removed</td>
{% else %}
<td class="text-center">{{ entry.action_to_str }}</td>
{% endif %}
<td class="text-center">{{ entry.request_actor }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% else %}
<div class="alert alert-warning text-center">{% trans "No entries found." %}</div>
<div class="alert alert-warning text-center">{% trans "No entries found for this group." %}</div>
{% endif %}
</div>
</div>
{% endblock content %}
{% endblock %}
{% block extra_javascript %}
{% include 'bundles/datatables-js.html' %}
{% endblock %}
{% block extra_css %}
{% include 'bundles/datatables-css.html' %}
{% endblock %}
{% block extra_script %}
$(document).ready(function(){
$('#log-entries').DataTable();
});
{% endblock %}

View File

@@ -19,7 +19,7 @@ url
{% for g in groups %}
<tr>
<td class="text-center">{{ g.group.name }}</td>
<td class="text-center">{{ g.group.authgroup.description }}</td>
<td class="text-center">{{ g.group.authgroup.description|urlize }}</td>
<td class="text-center">
{% if g.group in user.groups.all %}
{% if not g.request %}
@@ -32,9 +32,15 @@ url
</button>
{% endif %}
{% elif not g.request %}
<a href="{% url 'groupmanagement:request_add' g.group.id %}" class="btn btn-success">
{% trans "Request" %}
</a>
{% if g.group.authgroup.open %}
<a href="{% url 'groupmanagement:request_add' g.group.id %}" class="btn btn-success">
{% trans "Join" %}
</a>
{% else %}
<a href="{% url 'groupmanagement:request_add' g.group.id %}" class="btn btn-primary">
{% trans "Request" %}
</a>
{% endif %}
{% else %}
<button type="button" class="btn btn-primary" disabled>
{{ g.request.status }}

View File

@@ -12,7 +12,7 @@ urlpatterns = [
name='membership'),
url(r'^membership/(\w+)/$', views.group_membership_list,
name='membership_list'),
url(r'^membership/(\w+)/audit/', views.group_membership_audit, name="audit_log"),
url(r'^membership/(\w+)/audit/$', views.group_membership_audit, name="audit_log"),
url(r'^membership/(\w+)/remove/(\w+)/$', views.group_membership_remove,
name='membership_remove'),
url(r'^request_add/(\w+)', views.group_request_add,

View File

@@ -5,6 +5,7 @@ from django.contrib.auth.decorators import login_required
from django.contrib.auth.decorators import user_passes_test
from django.contrib.auth.models import Group
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
from django.core.paginator import Paginator, EmptyPage
from django.db.models import Count
from django.http import Http404
from django.shortcuts import render, redirect, get_object_or_404
@@ -83,10 +84,9 @@ def group_membership_audit(request, group_id):
except ObjectDoesNotExist:
raise Http404("Group does not exist")
entries = RequestLog.objects.filter(group=group)
render_items = {'entries': entries, 'group': group.name}
render_items = {'group': group.name}
entries = RequestLog.objects.filter(group=group).order_by('-date')
render_items['entries'] = entries
return render(request, 'groupmanagement/audit.html', context=render_items)

View File

@@ -30,6 +30,7 @@ DATABASES['default'] = {
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'},
}
# Register an application at https://developers.eveonline.com for Authentication

View File

@@ -235,7 +235,7 @@ class DiscourseManager:
@staticmethod
def __add_user_to_group(g_id, username):
endpoint = ENDPOINTS['groups']['add_user']
DiscourseManager.__exc(endpoint, g_id, usernames=[username])
DiscourseManager.__exc(endpoint, g_id, usernames=username)
@staticmethod
def __remove_user_from_group(g_id, username):

View File

@@ -1,4 +1,5 @@
import logging
import urllib
from django.conf import settings
from django.template.loader import render_to_string
@@ -61,7 +62,7 @@ class MumbleService(ServicesHook):
'service_name': self.title,
'urls': urls,
'service_url': self.service_url,
'connect_url': request.user.mumble.username + '@' + self.service_url if MumbleTasks.has_account(request.user) else self.service_url,
'connect_url': urllib.parse.quote(request.user.mumble.username, safe="") + '@' + self.service_url if MumbleTasks.has_account(request.user) else self.service_url,
'username': request.user.mumble.username if MumbleTasks.has_account(request.user) else '',
}, request=request)

View File

@@ -4,8 +4,8 @@ from celery import shared_task
from django.contrib.auth.models import User
from .hooks import ServicesHook
from celery_once import QueueOnce as BaseTask, AlreadyQueued
from celery_once.helpers import now_unix
from django.core.cache import cache
from time import time
logger = logging.getLogger(__name__)
@@ -22,7 +22,7 @@ class DjangoBackend:
@staticmethod
def raise_or_lock(key, timeout):
now = now_unix()
now = int(time())
result = cache.get(key)
if result:
remaining = int(result) - now

View File

@@ -24,7 +24,7 @@ class SRPManager:
@staticmethod
def get_kill_data(kill_id):
url = ("https://www.zkillboard.com/api/killID/%s/" % kill_id)
url = ("https://zkillboard.com/api/killID/%s/" % kill_id)
headers = {
'User-Agent': NAME,
'Content-Type': 'application/json',

View File

@@ -8,12 +8,12 @@
<ul class="list-group">
{% for notif in notifications %}
<li class="list-group-item">
{% if notif.state == 'open' %}
{% if notif.state == 'opened' %}
<span class="label label-success">{% trans "Open" %}</span>
{% else %}
<span class="label label-danger">{% trans "Closed" %}</span>
{% endif %}
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.number }} {{ notif.title }}</a>
<a href="{{ notif.web_url }}" target="_blank">#{{ notif.iid }} {{ notif.title }}</a>
</li>
{% endfor %}
</ul>

View File

@@ -27,12 +27,14 @@
{% menu_items %}
<li>
<a class="{% navactive request 'authentication:help' %}"
href="{% url 'authentication:help' %}">
<i class="fa fa-question fa-fw"></i> {% trans "Help" %}
</a>
</li>
{% if user.is_superuser %}
<li>
<a class="{% navactive request 'authentication:help' %}"
href="{% url 'authentication:help' %}">
<i class="fa fa-question fa-fw"></i> {% trans "Help" %}
</a>
</li>
{% endif %}
</ul>
</div>
</div>

View File

@@ -73,7 +73,7 @@ def get_notifications():
# Limit notifications to those posted by repo owners and members
response['notifications'] += notifications[:5]
except requests.RequestException:
logger.exception('Error while getting github notifications')
logger.exception('Error while getting gitlab notifications')
return response

View File

@@ -34,19 +34,21 @@ class TimerForm(forms.ModelForm):
structure_choices = [('POCO', 'POCO'),
('I-HUB', 'I-HUB'),
('TCU', 'TCU'),
('POS[S]', 'POS[S]'),
('POS[M]', 'POS[M]'),
('POS[L]', 'POS[L]'),
('Citadel[M]', 'Citadel[M]'),
('Citadel[L]', 'Citadel[L]'),
('Citadel[XL]', 'Citadel[XL]'),
('Engineering Complex[M]', 'Engineering Complex[M]'),
('Engineering Complex[L]', 'Engineering Complex[L]'),
('Engineering Complex[XL]', 'Engineering Complex[XL]'),
('Refinery[M]', 'Refinery[M]'),
('Refinery[L]', 'Refinery[L]'),
('Station', 'Station'),
('TCU', 'TCU'),
('Astrahus', 'Astrahus'),
('Fortizar', 'Fortizar'),
('Keepstar', 'Keepstar'),
('Raitaru', 'Raitaru'),
('Azbel', 'Azbel'),
('Sotiyo', 'Sotiyo'),
('Athanor', 'Athanor'),
('Tatara', 'Tatara'),
('Pharolux Cyno Beacon', 'Pharolux Cyno Beacon'),
('Tenebrex Cyno Jammer', 'Tenebrex Cyno Jammer'),
('Ansiblex Jump Gate', 'Ansiblex Jump Gate'),
('Moon Mining Cycle', 'Moon Mining Cycle'),
(_('Other'), _('Other'))]
objective_choices = [('Friendly', _('Friendly')),

View File

@@ -37,118 +37,128 @@
{% endif %}
</tr>
{% for timer in corp_timers %}
{% ifequal timer.important True %}
{% if timer.important == True %}
<tr class="danger">
{% else %}
<tr class="info">
{% endifequal %}
{% endif %}
<td style="width:150px" class="text-center">{{ timer.details }}</td>
<td class="text-center">
{% ifequal timer.objective "Hostile" %}
{% if timer.objective == "Hostile" %}
<div class="label label-danger">
{% trans "Hostile" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Friendly" %}
{% endif %}
{% if timer.objective == "Friendly" %}
<div class="label label-primary">
{% trans "Friendly" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Neutral" %}
{% endif %}
{% if timer.objective == "Neutral" %}
<div class="label label-default">
{% trans "Neutral" %}
</div>
{% endifequal %}
{% endif %}
</td>
<td class="text-center"><a
href="http://evemaps.dotlan.net/system/{{ timer.system }}">{{ timer.system }} {{ timer.planet_moon }} </a>
</td>
<td class="text-center">
{% ifequal timer.structure "I-HUB" %}
{% if timer.structure == "POCO" %}
<div class="label label-info">
POCO
</div>
{% endif %}
{% if timer.structure == "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endifequal %}
{% ifequal timer.structure "POCO" %}
<div class="label label-success">
POCO
</div>
{% endifequal %}
{% ifequal timer.structure "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[M]" %}
<div class="label label-danger">
Citadel [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[L]" %}
<div class="label label-danger">
Citadel [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[XL]" %}
<div class="label label-danger">
Citadel [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[M]" %}
<div class="label label-warning">
Engineering Complex [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[L]" %}
<div class="label label-warning">
Engineering Complex [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[XL]" %}
<div class="label label-warning">
Engineering Complex [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Station" %}
<div class="label label-danger">
Station
</div>
{% endifequal %}
{% ifequal timer.structure "TCU" %}
{% endif %}
{% if timer.structure == "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[M]" %}
<div class="label label-warning">
Refinery [M]
{% endif %}
{% if timer.structure == "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[L]" %}
<div class="label label-warning">
Refinery [L]
{% endif %}
{% if timer.structure == "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Moon Mining Cycle" %}
{% endif %}
{% if timer.structure == "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endif %}
{% if timer.structure == "Citadel[M]" or timer.structure == "Astrahus" %}
<div class="label label-danger">
Astrahus
</div>
{% endif %}
{% if timer.structure == "Citadel[L]" or timer.structure == "Fortizar" %}
<div class="label label-danger">
Fortizar
</div>
{% endif %}
{% if timer.structure == "Citadel[XL]" or timer.structure == "Keepstar" %}
<div class="label label-danger">
Keepstar
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[M]" or timer.structure == "Raitaru" %}
<div class="label label-warning">
Raitaru
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[L]" or timer.structure == "Azbel" %}
<div class="label label-warning">
Azbel
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[XL]" or timer.structure == "Sotiyo" %}
<div class="label label-warning">
Sotiyo
</div>
{% endif %}
{% if timer.structure == "Refinery[M]" or timer.structure == "Athanor" %}
<div class="label label-warning">
Athanor
</div>
{% endif %}
{% if timer.structure == "Refinery[L]" or timer.structure == "Tatara"%}
<div class="label label-warning">
Tatara
</div>
{% endif %}
{% if timer.structure == "Cyno Beacon" or timer.structure == "Pharolux Cyno Beacon" %}
<div class="label label-warning">
Cyno Beacon
</div>
{% endif %}
{% if timer.structure == "Cyno Jammer" or timer.structure == "Tenebrex Cyno Jammer" %}
<div class="label label-warning">
Tenebrex Cyno Jammer
</div>
{% endif %}
{% if timer.structure == "Jump Gate" or timer.structure == "Ansiblex Jump Gate" %}
<div class="label label-warning">
Ansiblex Jump Gate
</div>
{% endif %}
{% if timer.structure == "Moon Mining Cycle" %}
<div class="label label-success">
Moon Mining Cycle
</div>
{% endifequal %}
{% ifequal timer.structure "Other" %}
{% endif %}
{% if timer.structure == "Other" %}
<div class="label label-default">
Other
</div>
{% endifequal %}
{% endif %}
</td>
<td class="text-center" nowrap>{{ timer.eve_time | date:"Y-m-d H:i" }}</td>
<td class="text-center" nowrap>
@@ -186,118 +196,128 @@
{% endif %}
</tr>
{% for timer in future_timers %}
{% ifequal timer.important True %}
{% if timer.important == True %}
<tr class="danger">
{% else %}
<tr class="info">
{% endifequal %}
{% endif %}
<td style="width:150px" class="text-center">{{ timer.details }}</td>
<td class="text-center">
{% ifequal timer.objective "Hostile" %}
{% if timer.objective == "Hostile" %}
<div class="label label-danger">
{% trans "Hostile" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Friendly" %}
{% endif %}
{% if timer.objective == "Friendly" %}
<div class="label label-primary">
{% trans "Friendly" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Neutral" %}
{% endif %}
{% if timer.objective == "Neutral" %}
<div class="label label-default">
{% trans "Neutral" %}
</div>
{% endifequal %}
{% endif %}
</td>
<td class="text-center">
<a href="http://evemaps.dotlan.net/system/{{ timer.system }}">{{ timer.system }} {{ timer.planet_moon }}</a>
</td>
<td class="text-center">
{% ifequal timer.structure "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endifequal %}
{% ifequal timer.structure "POCO" %}
<div class="label label-success">
POCO
</div>
{% endifequal %}
{% ifequal timer.structure "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[M]" %}
<div class="label label-danger">
Citadel [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[L]" %}
<div class="label label-danger">
Citadel [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[XL]" %}
<div class="label label-danger">
Citadel [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[M]" %}
<div class="label label-warning">
Engineering Complex [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[L]" %}
<div class="label label-warning">
Engineering Complex [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[XL]" %}
<div class="label label-warning">
Engineering Complex [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Station" %}
<div class="label label-danger">
Station
</div>
{% endifequal %}
{% ifequal timer.structure "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[M]" %}
<div class="label label-warning">
Refinery [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[L]" %}
<div class="label label-warning">
Refinery [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Moon Mining Cycle" %}
<div class="label label-success">
Moon Mining Cycle
</div>
{% endifequal %}
{% ifequal timer.structure "Other" %}
<div class="label label-default">
Other
</div>
{% endifequal %}
{% if timer.structure == "POCO" %}
<div class="label label-info">
POCO
</div>
{% endif %}
{% if timer.structure == "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endif %}
{% if timer.structure == "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endif %}
{% if timer.structure == "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endif %}
{% if timer.structure == "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endif %}
{% if timer.structure == "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endif %}
{% if timer.structure == "Citadel[M]" or timer.structure == "Astrahus" %}
<div class="label label-danger">
Astrahus
</div>
{% endif %}
{% if timer.structure == "Citadel[L]" or timer.structure == "Fortizar" %}
<div class="label label-danger">
Fortizar
</div>
{% endif %}
{% if timer.structure == "Citadel[XL]" or timer.structure == "Keepstar" %}
<div class="label label-danger">
Keepstar
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[M]" or timer.structure == "Raitaru" %}
<div class="label label-warning">
Raitaru
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[L]" or timer.structure == "Azbel" %}
<div class="label label-warning">
Azbel
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[XL]" or timer.structure == "Sotiyo" %}
<div class="label label-warning">
Sotiyo
</div>
{% endif %}
{% if timer.structure == "Refinery[M]" or timer.structure == "Athanor" %}
<div class="label label-warning">
Athanor
</div>
{% endif %}
{% if timer.structure == "Refinery[L]" or timer.structure == "Tatara" %}
<div class="label label-warning">
Tatara
</div>
{% endif %}
{% if timer.structure == "Cyno Beacon" or timer.structure == "Pharolux Cyno Beacon" %}
<div class="label label-warning">
Pharolux Cyno Beacon
</div>
{% endif %}
{% if timer.structure == "Cyno Jammer" or timer.structure == "Tenebrex Cyno Jammer" %}
<div class="label label-warning">
Tenebrex Cyno Jammer
</div>
{% endif %}
{% if timer.structure == "Jump Gate" or timer.structure == "Ansiblex Jump Gate" %}
<div class="label label-warning">
Ansiblex Jump Gate
</div>
{% endif %}
{% if timer.structure == "Moon Mining Cycle" %}
<div class="label label-success">
Moon Mining Cycle
</div>
{% endif %}
{% if timer.structure == "Other" %}
<div class="label label-default">
Other
</div>
{% endif %}
</td>
<td class="text-center" nowrap>{{ timer.eve_time | date:"Y-m-d H:i" }}</td>
<td class="text-center" nowrap>
@@ -337,118 +357,128 @@
{% endif %}
</tr>
{% for timer in past_timers %}
{% ifequal timer.important True %}
{% if timer.important == True %}
<tr class="danger">
{% else %}
<tr class="info">
{% endifequal %}
{% endif %}
<td style="width:150px" class="text-center">{{ timer.details }}</td>
<td class="text-center">
{% ifequal timer.objective "Hostile" %}
{% if timer.objective == "Hostile" %}
<div class="label label-danger">
{% trans "Hostile" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Friendly" %}
{% endif %}
{% if timer.objective == "Friendly" %}
<div class="label label-primary">
{% trans "Friendly" %}
</div>
{% endifequal %}
{% ifequal timer.objective "Neutral" %}
{% endif %}
{% if timer.objective == "Neutral" %}
<div class="label label-default">
{% trans "Neutral" %}
</div>
{% endifequal %}
{% endif %}
</td>
<td class="text-center">
<a href="http://evemaps.dotlan.net/system/{{ timer.system }}">{{ timer.system }} {{ timer.planet_moon }}</a>
</td>
<td class="text-center">
{% ifequal timer.structure "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endifequal %}
{% ifequal timer.structure "POCO" %}
<div class="label label-success">
POCO
</div>
{% endifequal %}
{% ifequal timer.structure "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endifequal %}
{% ifequal timer.structure "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[M]" %}
<div class="label label-danger">
Citadel [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[L]" %}
<div class="label label-danger">
Citadel [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Citadel[XL]" %}
<div class="label label-danger">
Citadel [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[M]" %}
<div class="label label-warning">
Engineering Complex [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[L]" %}
<div class="label label-warning">
Engineering Complex [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Engineering Complex[XL]" %}
<div class="label label-warning">
Engineering Complex [XL]
</div>
{% endifequal %}
{% ifequal timer.structure "Station" %}
<div class="label label-danger">
Station
</div>
{% endifequal %}
{% ifequal timer.structure "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[M]" %}
<div class="label label-warning">
Refinery [M]
</div>
{% endifequal %}
{% ifequal timer.structure "Refinery[L]" %}
<div class="label label-warning">
Refinery [L]
</div>
{% endifequal %}
{% ifequal timer.structure "Moon Mining Cycle" %}
<div class="label label-success">
Moon Mining Cycle
</div>
{% endifequal %}
{% ifequal timer.structure "Other" %}
<div class="label label-default">
Other
</div>
{% endifequal %}
{% if timer.structure == "POCO" %}
<div class="label label-info">
POCO
</div>
{% endif %}
{% if timer.structure == "I-HUB" %}
<div class="label label-warning">
I-HUB
</div>
{% endif %}
{% if timer.structure == "TCU" %}
<div class="label label-danger">
TCU
</div>
{% endif %}
{% if timer.structure == "POS[S]" %}
<div class="label label-info">
POS [S]
</div>
{% endif %}
{% if timer.structure == "POS[M]" %}
<div class="label label-info">
POS [M]
</div>
{% endif %}
{% if timer.structure == "POS[L]" %}
<div class="label label-info">
POS [L]
</div>
{% endif %}
{% if timer.structure == "Citadel[M]" or timer.structure == "Astrahus" %}
<div class="label label-danger">
Astrahus
</div>
{% endif %}
{% if timer.structure == "Citadel[L]" or timer.structure == "Fortizar" %}
<div class="label label-danger">
Fortizar
</div>
{% endif %}
{% if timer.structure == "Citadel[XL]" or timer.structure == "Keepstar" %}
<div class="label label-danger">
Keepstar
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[M]" or timer.structure == "Raitaru" %}
<div class="label label-warning">
Raitaru
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[L]" or timer.structure == "Azbel" %}
<div class="label label-warning">
Azbel
</div>
{% endif %}
{% if timer.structure == "Engineering Complex[XL]" or timer.structure == "Sotiyo" %}
<div class="label label-warning">
Sotiyo
</div>
{% endif %}
{% if timer.structure == "Refinery[M]" or timer.structure == "Athanor" %}
<div class="label label-warning">
Athanor
</div>
{% endif %}
{% if timer.structure == "Refinery[L]" or timer.structure == "Tatara" %}
<div class="label label-warning">
Tatara
</div>
{% endif %}
{% if timer.structure == "Cyno Beacon" or timer.structure == "Pharolux Cyno Beacon" %}
<div class="label label-warning">
Pharolux Cyno Beacon
</div>
{% endif %}
{% if timer.structure == "Cyno Jammer" or timer.structure == "Tenebrex Cyno Jammer" %}
<div class="label label-warning">
Tenebrex Cyno Jammer
</div>
{% endif %}
{% if timer.structure == "Jump Gate" or timer.structure == "Ansiblex Jump Gate" %}
<div class="label label-warning">
Ansiblex Jump Gate
</div>
{% endif %}
{% if timer.structure == "Moon Mining Cycle" %}
<div class="label label-success">
Moon Mining Cycle
</div>
{% endif %}
{% if timer.structure == "Other" %}
<div class="label label-default">
Other
</div>
{% endif %}
</td>
<td class="text-center" nowrap>{{ timer.eve_time | date:"Y-m-d H:i" }}</td>
<td class="text-center" nowrap>

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -66,6 +66,17 @@ Clicking on the blue eye will take you to the group member management screen. He
![Group overview](/_static/images/features/group-member-management.png)
### Group Audit Log
Whenever a user Joins, Leaves, or is Removed from a group, this is logged. To find the audit log for a given group, click the light-blue button to the right of the Group Member Management (blue eye) button.
These logs contain the Date and Time the action was taken (in EVE/UTC), the user which submitted the request being acted upon (requestor), the user's main character, the type of request (join, leave or removed), the action taken (accept, reject or remove), and the user that took the action (actor).
![Audit Log Example](/_static/images/features/group_audit_log.png)
```eval_rst
.. note::
There is no tracking for "Open" groups as members are able to freely join/leave these groups.
```
## Group Leaders

View File

@@ -2,7 +2,7 @@
```eval_rst
.. tip::
If you are uncomfortable with Linux permissions follow the steps below as the root user.
If you are uncomfortable with Linux permissions follow the steps below as the root user.
```
## Dependencies
@@ -12,7 +12,7 @@ Alliance Auth can be installed on any operating system. Dependencies are provide
```eval_rst
.. hint::
CentOS: A few packages are included in a non-default repository. Add it and update the package lists. ::
yum -y install https://centos7.iuscommunity.org/ius-release.rpm
yum update
```
@@ -61,7 +61,7 @@ CentOS:
```eval_rst
.. important::
CentOS: Make sure Redis is running before continuing. ::
systemctl enable redis.service
systemctl start redis.service
```
@@ -71,9 +71,22 @@ CentOS:
Alliance Auth needs a MySQL user account and database. Open an SQL shell with `mysql -u root -p` and create them as follows, replacing `PASSWORD` with an actual secure password:
CREATE USER 'allianceserver'@'localhost' IDENTIFIED BY 'PASSWORD';
CREATE DATABASE alliance_auth CHARACTER SET utf8;
CREATE DATABASE alliance_auth CHARACTER SET utf8mb4;
GRANT ALL PRIVILEGES ON alliance_auth . * TO 'allianceserver'@'localhost';
Add timezone tables to your mysql installation:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
```eval_rst
.. note::
You may see errors when you add the timezone tables. To make sure that they were correctly added run the following commands and check for the ``time_zone`` tables::
mysql -u root -p
use mysql;
show tables;
```
Close the SQL shell and secure your database server with the `mysql_secure_installation` command.
## Auth Install
@@ -106,7 +119,7 @@ Create a Python virtual environment and put it somewhere convenient (e.g. `/home
A virtual environment provides support for creating a lightweight "copy" of Python with their own site directories. Each virtual environment has its own Python binary (allowing creation of environments with various Python versions) and can have its own independent set of installed Python packages in its site directories. You can read more about virtual environments on the Python_ docs.
.. _Python: https://docs.python.org/3/library/venv.html
```
Activate the virtualenv using `source /home/allianceserver/venv/auth/bin/activate`. Note the `/bin/activate` on the end of the path.
```eval_rst
@@ -131,7 +144,7 @@ Django needs to install models to the database before it can start.
python /home/allianceserver/myauth/manage.py migrate
Now we need to round up all the static files required to render templates. Make a directory to serve them from and populate it.
mkdir -p /var/www/myauth/static
python /home/allianceserver/myauth/manage.py collectstatic
@@ -182,7 +195,7 @@ You can check the status of the processes with `supervisorctl status`. Logs from
```eval_rst
.. note::
Any time the code or your settings change you'll need to restart Gunicorn and Celery. ::
supervisorctl restart myauth:
```
@@ -202,10 +215,10 @@ If you intend to use this account as your personal auth account you need to add
## Updating
Periodically [new releases](https://github.com/allianceauth/allianceauth/releases/) are issued with bug fixes and new features. To update your install, simply activate your virtual environment and update with `pip install --upgrade allianceauth`. Be sure to read the release notes which will highlight changes.
Periodically [new releases](https://gitlab.com/allianceauth/allianceauth/tags) are issued with bug fixes and new features. To update your install, simply activate your virtual environment and update with `pip install --upgrade allianceauth`. Be sure to read the release notes which will highlight changes.
Some releases come with changes to settings: update your project's settings with `allianceauth update /home/allianceserver/myauth`.
Some releases come with new or changed models. Update your database to reflect this with `python /home/allianceserver/myauth/manage.py migrate`.
Always restart Celery and Gunicorn after updating.

View File

@@ -56,7 +56,7 @@ Put comma-separated IDs into the brackets and the migration will create states w
If you used member/blue group names other than the standard "Member" and "Blue" you can enter settings to have the member/blue states created through this migration take these names.
- `DEFAULT_AUTH_GROUP = ""` the desired name of the "Member" state
- `DEFAULT_BLUE_GROUP = ""` the desired name of the "Blue" state
- `DEFAULT_BLUE_GROUP = ""` the desired name of the "Blue" state
Any permissions assigned to these groups will be copied to the state replacing them. Because these groups are no longer managed they pose a security risk and so are deleted at the end of the migration automatically.
@@ -82,4 +82,4 @@ A similar process can be used to ensure users who may have lost service permissi
## Help
If something goes wrong during the migration reach out for help on [Gitter](https://gitter.im/R4stl1n/allianceauth) or open an [issue](https://github.com/allianceauth/allianceauth/issues).
If something goes wrong during the migration reach out for help on [Gitter](https://gitter.im/R4stl1n/allianceauth) or open an [issue](https://gitlab.com/allianceauth/allianceauth/issues).

View File

@@ -1,161 +1,7 @@
# Alliance Market
## Dependencies
Alliance Market requires PHP installed in your web server. Apache has `mod_php`, NGINX requires `php-fpm`.
## Deprecation
## Prepare Your Settings
In your auth project's settings file, do the following:
- Add `'allianceauth.services.modules.market',` to your `INSTALLED_APPS` list
- Append the following to the bottom of the settings file
Alliance Market relies on the now non-functional XML API.
# Alliance Market
MARKET_URL = ''
DATABASES['market'] = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'alliance_market',
'USER': 'allianceserver-market',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
## Setup Alliance Market
Alliance Market needs a database. Create one in MySQL/MariaDB. Default name is `alliance_market`:
mysql -u root -p
create database alliance_market;
grant all privileges on alliance_market . * to 'allianceserver'@'localhost';
exit;
Install required packages to clone the repository:
apt-get install mercurial meld
Change to the web folder:
cd /var/www
Now clone the repository
hg clone https://bitbucket.org/krojew/evernus-alliance-market
Make cache and log directories
mkdir evernus-alliance-market/app/cache
mkdir evernus-alliance-market/app/logs
chmod -R 777 evernus-alliance-market/app/cache
chmod -R 777 evernus-alliance-market/app/logs
Change ownership to apache
chown -R www-data:www-data evernus-alliance-market
Enter directory
cd evernus-alliance-market
Set environment variable
export SYMFONY_ENV=prod
Copy configuration
cp app/config/parameters.yml.dist app/config/parameters.yml
Edit, changing the following:
- `database_name` to `alliance_market`
- `database_user` to your MySQL user (usually `allianceserver`)
- `database_password` to your MySQL user password
- email settings, eg Gmail/Mailgun etc.
Edit `app/config/config.yml` and add the following:
services:
fos_user.doctrine_registry:
alias: doctrine
Install composer [as per these instructions.](https://getcomposer.org/download/)
Update dependencies.
php composer.phar update --optimize-autoloader
Prepare the cache:
php app/console cache:clear --env=prod --no-debug
Dump assets:
php app/console assetic:dump --env=prod --no-debug
Create DB entries
php app/console doctrine:schema:update --force
Install SDE:
php app/console evernus:update:sde
Configure your web server to serve alliance market.
A minimal Apache config might look like:
<VirtualHost *:80>
ServerName market.example.com
DocumentRoot /var/www/evernus-alliance-market/web
<Directory "/var/www/evernus-alliance-market/web/">
DirectoryIndex app.php
Require all granted
AllowOverride all
</Directory>
</VirtualHost>
A minimal Nginx config might look like:
server {
listen 80;
server_name market.example.com;
root /var/www/evernus-alliance-market/web;
index app.php;
access_log /var/logs/market.access.log;
# strip app.php/ prefix if it is present
rewrite ^/app\.php/?(.*)$ /$1 permanent;
location / {
index app.php;
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app.php/$1 last;
}
# pass the PHP scripts to FastCGI server from upstream phpfcgi
location ~ ^/(app|app_dev|config)\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
location ~ /\.ht {
deny all;
}
}
Once again, set cache permissions:
chown -R www-data:www-data app/
Add a user account through auth, then make it a superuser:
php app/console fos:user:promote your_username --super
Now edit your auth project's settings file and fill in the web URL to your market as well as the database details.
Finally run migrations and restart Gunicorn and Celery.
Please remove this service data with `python manage.py migrate appname zero` and then remove from your `INSTALLED_APPS` list.

View File

@@ -22,7 +22,7 @@ Now two packages need to be installed:
apt-get install python-software-properties mumble-server
Download the appropriate authenticator release from [the authenticator repository](https://github.com/allianceauth/mumble-authenticator) and install the python dependencies for it:
Download the appropriate authenticator release from [the authenticator repository](https://gitlab.com/allianceauth/mumble-authenticator) and install the python dependencies for it:
pip install -r requirements.txt

View File

@@ -58,7 +58,7 @@ Nginx: `chown -R nginx:nginx /var/www/forums`
```eval_rst
.. tip::
Nginx: Some distributions use the ``www-data:www-data`` user:group instead of ``nginx:nginx``. If you run into problems with permissions try it instead.
Nginx: Some distributions use the ``www-data:www-data`` user:group instead of ``nginx:nginx``. If you run into problems with permissions try it instead.
..
```
@@ -103,7 +103,7 @@ A minimal Nginx config file might look like:
}
}
Enter your forum's web address as the `PHPBB3_URL` setting in your auth project's settings file.
Enter your forum's web address as the `PHPBB3_URL` setting in your auth project's settings file.
### Web Install
Navigate to your forums web address where you will be presented with an installer.
@@ -144,5 +144,15 @@ You can allow members to overwrite the portrait with a custom image if desired.
![location of change avatar setting](/_static/images/installation/services/phpbb3/avatar_permissions.png)
## Setting the default theme
Users generated via Alliance Auth do not have a default theme set. You will need to set this on the phpbb_users table in SQL
mysql -u root -p
use alliance_forum;
alter table phpbb_users change user_style user_style int not null default 1
If you would like to use a theme that is NOT prosilver or theme "1". You will need to deactivate prosilver, this will then fall over to the set forum wide default.
### Prepare Auth
Once settings have been configured, run migrations and restart Gunicorn and Celery.

View File

@@ -2,17 +2,17 @@
## Something broken? Stuck on an issue? Can't get it set up?
Start by checking the [issues](https://github.com/allianceauth/allianceauth/issues?q=is%3Aissue) - especially closed ones.
Start by checking the [issues](https://gitlab.com/allianceauth/allianceauth/issues?scope=all&utf8=%E2%9C%93&state=all&search=my+issue) - especially closed ones.
No answer?
- open an [issue](https://github.com/allianceauth/allianceauth/issues)
- open an [issue](https://gitlab.com/allianceauth/allianceauth/issues)
- harass us on [gitter](https://gitter.im/R4stl1n/allianceauth)
## Logging
In its default configuration your auth project logs INFO and above messages to myauth/log/allianceauth.log. If you're encountering issues it's a good idea to view DEBUG messages as these greatly assist the troubleshooting process. These are printed to the console with manually starting the webserver via `python manage.py runserver`.
To record DEBUG messages in the log file, alter a setting in your auth project's settings file: `LOGGING['handlers']['log_file']['level'] = 'DEBUG'`. After restarting gunicorn and celery your log file will record all logging messages.
To record DEBUG messages in the log file, alter a setting in your auth project's settings file: `LOGGING['handlers']['log_file']['level'] = 'DEBUG'`. After restarting gunicorn and celery your log file will record all logging messages.
## Common Problems

View File

@@ -12,21 +12,22 @@ install_requires = [
'requests-oauthlib',
'semantic_version',
'redis',
'celery>=4.0.2',
'redis<=2.10.6',
'celery>=4.0.2,<4.3.0',
'celery_once',
'django>=1.11,<=2.0.8',
'django>=2.0',
'django-bootstrap-form',
'django-registration==2.4',
'django-sortedm2m',
'django-redis-cache>=1.7.1',
'django-redis-cache==1.8.1',
'django-celery-beat<=1.1.1',
'openfire-restapi',
'sleekxmpp',
'adarnauth-esi>=1.4.10,<2.0',
'kombu<=4.3.0',
]
testing_extras = [
@@ -50,7 +51,7 @@ setup(
python_requires='~=3.4',
license='GPLv2',
packages=['allianceauth'],
url='https://github.com/allianceauth/allianceauth',
url='https://gitlab.com/allianceauth/allianceauth',
zip_safe=False,
include_package_data=True,
entry_points="""