mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2026-02-09 00:26:20 +01:00
EVE Swagger Interface (#591)
FAT uses ESI tokens to get character location/ship - closes #564 Pull corp memebrship data from ESI Additional permissions for non-api viewing. - migration to convert permissions from old users. Standardize EVE datasource responses. - allow different sources for EVE data types. Allow empty values for character alliance id and name Allow multiple corps and alliances to be considered 'members'
This commit is contained in:
35
corputils/migrations/0001_initial.py
Normal file
35
corputils/migrations/0001_initial.py
Normal file
@@ -0,0 +1,35 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.1 on 2016-12-14 21:36
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('esi', '0002_scopes_20161208'),
|
||||
('eveonline', '0004_eveapikeypair_sso_verified'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CorpStats',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('last_update', models.DateTimeField(auto_now=True)),
|
||||
('_members', models.TextField(default='{}')),
|
||||
('corp', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='eveonline.EveCorporationInfo')),
|
||||
('token', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='esi.Token')),
|
||||
],
|
||||
options={
|
||||
'default_permissions': ('add', 'change', 'remove', 'view_corp', 'view_alliance', 'view_blue'),
|
||||
'verbose_name': 'corp stats',
|
||||
'verbose_name_plural': 'corp stats',
|
||||
'permissions': (('corp_apis', 'Can view API keys of members of their corporation.'), ('alliance_apis', 'Can view API keys of members of their alliance.'), ('blue_apis', 'Can view API keys of members of blue corporations.')),
|
||||
},
|
||||
),
|
||||
]
|
||||
125
corputils/migrations/0002_migrate_permissions.py
Normal file
125
corputils/migrations/0002_migrate_permissions.py
Normal file
@@ -0,0 +1,125 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.10.1 on 2016-12-14 21:48
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
PERMISSIONS = {
|
||||
'user': [
|
||||
'corp_apis',
|
||||
'alliance_apis',
|
||||
],
|
||||
'corpstats': {
|
||||
'corp_apis': 'Can view API keys of members of their corporation.',
|
||||
'alliance_apis': 'Can view API keys of members of their alliance.',
|
||||
'blue_apis': 'Can view API keys of members of blue corporations.',
|
||||
'view_corp_corpstats': 'Can view_corp corpstats',
|
||||
'view_alliance_corpstats': 'Can view_alliance corpstats',
|
||||
'view_blue_corpstats': 'Can view_blue corpstats',
|
||||
}
|
||||
}
|
||||
|
||||
def user_permissions_dict(apps):
|
||||
Permission = apps.get_model('auth', 'Permission')
|
||||
ContentType = apps.get_model('contenttypes', 'ContentType')
|
||||
User = apps.get_model('auth', 'User')
|
||||
CorpStats = apps.get_model('corputils', 'CorpStats')
|
||||
|
||||
user_ct = ContentType.objects.get_for_model(User)
|
||||
corpstats_ct = ContentType.objects.get_for_model(CorpStats)
|
||||
|
||||
return {
|
||||
'user': {x: Permission.objects.get_or_create(name=x, codename=x, content_type=user_ct)[0] for x in PERMISSIONS['user']},
|
||||
'corpstats': {x: Permission.objects.get_or_create(codename=x, content_type=corpstats_ct)[0] for x, y in PERMISSIONS['corpstats'].items()},
|
||||
}
|
||||
|
||||
def users_with_permission(apps, perm):
|
||||
User = apps.get_model('auth', 'User')
|
||||
return User.objects.filter(user_permissions=perm.pk)
|
||||
|
||||
def groups_with_permission(apps, perm):
|
||||
Group = apps.get_model('auth', 'Group')
|
||||
return Group.objects.filter(permissions=perm.pk)
|
||||
|
||||
def forward(apps, schema_editor):
|
||||
perm_dict = user_permissions_dict(apps)
|
||||
|
||||
corp_users = users_with_permission(apps, perm_dict['user']['corp_apis'])
|
||||
for u in corp_users:
|
||||
u.user_permissions.add(perm_dict['corpstats']['corp_apis'].pk)
|
||||
u.user_permissions.add(perm_dict['corpstats']['view_corp_corpstats'].pk)
|
||||
|
||||
alliance_users = users_with_permission(apps, perm_dict['user']['alliance_apis'])
|
||||
for u in alliance_users:
|
||||
u.user_permissions.add(perm_dict['corpstats']['alliance_apis'].pk)
|
||||
u.user_permissions.add(perm_dict['corpstats']['view_alliance_corpstats'].pk)
|
||||
|
||||
corp_groups = groups_with_permission(apps, perm_dict['user']['corp_apis'])
|
||||
for g in corp_groups:
|
||||
g.permissions.add(perm_dict['corpstats']['corp_apis'].pk)
|
||||
g.permissions.add(perm_dict['corpstats']['view_corp_corpstats'].pk)
|
||||
|
||||
alliance_groups = groups_with_permission(apps, perm_dict['user']['alliance_apis'])
|
||||
for g in alliance_groups:
|
||||
g.permissions.add(perm_dict['corpstats']['alliance_apis'].pk)
|
||||
g.permissions.add(perm_dict['corpstats']['view_alliance_corpstats'].pk)
|
||||
|
||||
for name, perm in perm_dict['user'].items():
|
||||
perm.delete()
|
||||
|
||||
def reverse(apps, schema_editor):
|
||||
perm_dict = user_permissions_dict(apps)
|
||||
|
||||
corp_users = users_with_permission(apps, perm_dict['corpstats']['view_corp_corpstats'])
|
||||
corp_api_users = users_with_permission(apps, perm_dict['corpstats']['corp_apis'])
|
||||
corp_us = corp_users | corp_api_users
|
||||
for u in corp_us.distinct():
|
||||
u.user_permissions.add(perm_dict['user']['corp_apis'].pk)
|
||||
for u in corp_users:
|
||||
u.user_permissions.remove(perm_dict['corpstats']['view_corp_corpstats'].pk)
|
||||
for u in corp_api_users:
|
||||
u.user_permissions.remove(perm_dict['corpstats']['corp_apis'].pk)
|
||||
|
||||
|
||||
alliance_users = users_with_permission(apps, perm_dict['corpstats']['view_alliance_corpstats'])
|
||||
alliance_api_users = users_with_permission(apps, perm_dict['corpstats']['alliance_apis'])
|
||||
alliance_us = alliance_users | alliance_api_users
|
||||
for u in alliance_us.distinct():
|
||||
u.user_permissions.add(perm_dict['user']['alliance_apis'].pk)
|
||||
for u in alliance_users:
|
||||
u.user_permissions.remove(perm_dict['corpstats']['view_alliance_corpstats'].pk)
|
||||
for u in alliance_api_users:
|
||||
u.user_permissions.remove(perm_dict['corpstats']['alliance_apis'].pk)
|
||||
|
||||
corp_groups = groups_with_permission(apps, perm_dict['corpstats']['view_corp_corpstats'])
|
||||
corp_api_groups = groups_with_permission(apps, perm_dict['corpstats']['corp_apis'])
|
||||
corp_gs = corp_groups | corp_api_groups
|
||||
for g in corp_groups.distinct():
|
||||
g.permissions.add(perm_dict['user']['corp_apis'].pk)
|
||||
for g in corp_groups:
|
||||
g.permissions.remove(perm_dict['corpstats']['view_corp_corpstats'].pk)
|
||||
for g in corp_api_groups:
|
||||
g.permissions.remove(perm_dict['corpstats']['corp_apis'].pk)
|
||||
|
||||
alliance_groups = groups_with_permission(apps, perm_dict['corpstats']['view_alliance_corpstats'])
|
||||
alliance_api_groups = groups_with_permission(apps, perm_dict['corpstats']['alliance_apis'])
|
||||
alliance_gs = alliance_groups | alliance_api_groups
|
||||
for g in alliance_gs.distinct():
|
||||
g.permissions.add(perm_dict['user']['alliance_apis'].pk)
|
||||
for g in alliance_groups:
|
||||
g.permissions.remove(perm_dict['corpstats']['view_alliance_corpstats'].pk)
|
||||
for g in alliance_api_groups:
|
||||
g.permissions.remove(perm_dict['corpstats']['alliance_apis'].pk)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('corputils', '0001_initial'),
|
||||
('authentication', '0005_delete_perms'),
|
||||
('auth', '0008_alter_user_username_max_length'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(forward, reverse),
|
||||
]
|
||||
0
corputils/migrations/__init__.py
Normal file
0
corputils/migrations/__init__.py
Normal file
Reference in New Issue
Block a user