Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Federation #167

Merged
merged 52 commits into from
May 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
61390ae
poetry lock
grizz Jan 24, 2024
5a73a26
Django 4.2 update (#155)
jason20c Feb 1, 2024
e401af7
better error handling for critical errors after subscription charge (…
vegu Feb 1, 2024
e3cffb8
poetry lock
grizz Feb 13, 2024
183608c
Version 1.3.1-rc.1
grizz Feb 13, 2024
99b2c3b
Version 1.3.1-rc.2
grizz Feb 13, 2024
4b75d9a
Version 1.4.0-rc.1
grizz Feb 13, 2024
db3935c
Version 1.4.0-rc.2
grizz Feb 13, 2024
ca1158f
move django-cors-headers to fullctl (#160)
jason20c Feb 14, 2024
4accd8f
relock
vegu Feb 14, 2024
e91b8c6
add autocomplete fields for admin (#159)
jason20c Feb 14, 2024
2ab8b5d
poetry lock
grizz Feb 20, 2024
e5b88f8
Version 1.4.0-rc.3
grizz Feb 20, 2024
45b63f5
org controlled oauth backend implementations
vegu Feb 21, 2024
4387c2e
linting
vegu Feb 21, 2024
d5ced4d
relabel section according to specs
vegu Feb 21, 2024
3dff150
Add frontend for federation (#163)
jason20c Feb 28, 2024
a143d06
better error message on dupe service
vegu Feb 28, 2024
7769ab0
rewording
vegu Feb 28, 2024
cb8d488
poetry lock
grizz Feb 29, 2024
a803f86
poetry lock
grizz Feb 29, 2024
0c1e25b
Version 1.4.0-rc.4
grizz Feb 29, 2024
42830c8
federated service config and service bridge drop in
vegu Mar 13, 2024
8f70c2b
linting
vegu Mar 13, 2024
75ea037
logo url to fed svc support
vegu Mar 13, 2024
5b7e042
account/org services endpoint
vegu Mar 13, 2024
cd4f379
linting
vegu Mar 13, 2024
5e41528
fix tests
vegu Mar 14, 2024
b9075ad
linting
vegu Mar 14, 2024
2d9bd65
FC-2801 billing task (#165)
vegu Mar 21, 2024
9a160da
disable org deletion through django-admin (#166)
vegu Mar 26, 2024
5e5260a
poetry lock
grizz Mar 26, 2024
348d300
Version 1.4.0-rc.5
grizz Mar 26, 2024
9d2a105
poetry lock
grizz Mar 27, 2024
1c4d6f5
Version 1.4.0-rc.6
grizz Mar 27, 2024
5b03864
relock
vegu Mar 27, 2024
c427c16
poetry lock
grizz Mar 27, 2024
4510b78
Version 1.4.0-rc.7
grizz Mar 27, 2024
09c633f
add role information to org api endpoint
vegu Apr 1, 2024
90996e7
Merge branch 'prep-release' into federation
grizz Apr 13, 2024
6afa739
bump version for federation
grizz Apr 13, 2024
128ba38
Merge remote-tracking branch 'github/prep-release' into HEAD
vegu Apr 22, 2024
5c4e99a
poetry lock
grizz Apr 24, 2024
6355c86
Version 1.5.0-rc.2
grizz Apr 24, 2024
f4210be
Version 1.5.0-rc.3
grizz Apr 24, 2024
c5e12a3
Version 1.5.0-rc.4
grizz Apr 24, 2024
d21d6ba
Merge remote-tracking branch 'github/prep-release' into federation
vegu Apr 29, 2024
2633084
Merge branch 'federation' of github.com:fullctl/aaactl into federation
vegu May 14, 2024
512ce56
Merge remote-tracking branch 'github/prep-release' into federation
vegu May 14, 2024
c43c3b7
relock
vegu May 14, 2024
14da58b
fix test data
vegu May 14, 2024
ddcf390
fix test data again
vegu May 14, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ aaactl = "aaactl.cli:main"

[tool.poetry.dependencies]
python = "^3.9"
fullctl = { git = "https://github.com/fullctl/fullctl.git", branch = "prep-release" }
fullctl = { git = "https://github.com/fullctl/fullctl.git", branch = "federation" }

# not in fullctl
python-dateutil = "*"
Expand Down
4 changes: 4 additions & 0 deletions src/aaactl/settings/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@
"PKCE_REQUIRED": False,
}

settings_manager.set_option(
"OAUTH2_PROVIDER_APPLICATION_MODEL", "oauth2_provider.Application"
)

# SOCIAL AUTH

SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
Expand Down
27 changes: 27 additions & 0 deletions src/account/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,11 @@
UserPermissionOverride,
UserSettings,
)
from account.models.federation import (
AuthFederation,
FederatedServiceURL,
ServiceFederationSupport,
)

# registered models

Expand Down Expand Up @@ -324,3 +329,25 @@ def has_add_permission(self, request):

def has_change_permission(self, request, obj=None):
return False


@admin.register(ServiceFederationSupport)
class ServiceFederationAdmin(admin.ModelAdmin):
list_display = ("name", "slug", "federation_level", "created", "updated")
search_fields = ("name", "slug")


class ServiceURLInline(admin.TabularInline):
model = FederatedServiceURL
extra = 1
fields = ("url", "service", "config")
autocomplete_fields = ("service",)


@admin.register(AuthFederation)
class AuthFederationAdmin(admin.ModelAdmin):
list_display = ("org", "application")
search_fields = ("org__name", "org__slug")
autocomplete_fields = ("org",)

inlines = (ServiceURLInline,)
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# Generated by Django 4.2.10 on 2024-02-21 13:22

import django.db.models.deletion
import django.db.models.manager
import django_handleref.models
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.OAUTH2_PROVIDER_APPLICATION_MODEL),
("account", "0040_invitation_expiry"),
]

operations = [
migrations.CreateModel(
name="AuthFederation",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
(
"created",
django_handleref.models.CreatedDateTimeField(
auto_now_add=True, verbose_name="Created"
),
),
(
"updated",
django_handleref.models.UpdatedDateTimeField(
auto_now=True, verbose_name="Updated"
),
),
("version", models.IntegerField(default=0)),
(
"status",
models.CharField(
choices=[
("ok", "Ok"),
("pending", "Pending"),
("deactivated", "Deactivated"),
("failed", "Failed"),
("expired", "Expired"),
],
default="ok",
max_length=12,
),
),
(
"application",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
related_name="organization",
to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL,
verbose_name="Application",
),
),
(
"org",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="oauth_applications",
to="account.organization",
verbose_name="Organization",
),
),
],
options={
"verbose_name": "Federation for Organization",
"verbose_name_plural": "Federation for Organization",
"db_table": "account_organization_oauth_application",
"unique_together": {("org", "application")},
},
managers=[
("handleref", django.db.models.manager.Manager()),
],
),
migrations.CreateModel(
name="ServiceFederationSupport",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
(
"created",
django_handleref.models.CreatedDateTimeField(
auto_now_add=True, verbose_name="Created"
),
),
(
"updated",
django_handleref.models.UpdatedDateTimeField(
auto_now=True, verbose_name="Updated"
),
),
("version", models.IntegerField(default=0)),
(
"status",
models.CharField(
choices=[
("ok", "Ok"),
("pending", "Pending"),
("deactivated", "Deactivated"),
("failed", "Failed"),
("expired", "Expired"),
],
default="ok",
max_length=12,
),
),
("slug", models.CharField(max_length=32, unique=True)),
("name", models.CharField(max_length=255, unique=True)),
(
"federation_level",
models.CharField(
choices=[
("auth", "Allow org authentication"),
("full", "Full federation"),
],
default="auth",
help_text="The level of federation for this service.",
max_length=255,
),
),
],
options={
"verbose_name": "Federation Support for Service",
"verbose_name_plural": "Federation Support for Service",
"db_table": "account_federated_service",
},
managers=[
("handleref", django.db.models.manager.Manager()),
],
),
migrations.CreateModel(
name="FederatedServiceURL",
fields=[
("id", models.AutoField(primary_key=True, serialize=False)),
(
"created",
django_handleref.models.CreatedDateTimeField(
auto_now_add=True, verbose_name="Created"
),
),
(
"updated",
django_handleref.models.UpdatedDateTimeField(
auto_now=True, verbose_name="Updated"
),
),
("version", models.IntegerField(default=0)),
(
"status",
models.CharField(
choices=[
("ok", "Ok"),
("pending", "Pending"),
("deactivated", "Deactivated"),
("failed", "Failed"),
("expired", "Expired"),
],
default="ok",
max_length=12,
),
),
("url", models.URLField(verbose_name="Service URL")),
(
"auth",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="federated_service_urls",
to="account.authfederation",
verbose_name="OAuth Application",
),
),
(
"service",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="urls",
to="account.servicefederationsupport",
verbose_name="Service",
),
),
],
options={
"verbose_name": "Service URL",
"verbose_name_plural": "Service URLs",
"db_table": "account_federated_service_url",
"unique_together": {("url", "auth"), ("service", "auth")},
},
managers=[
("handleref", django.db.models.manager.Manager()),
],
),
]
22 changes: 22 additions & 0 deletions src/account/migrations/0042_federatedserviceurl_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.2.10 on 2024-03-13 13:59

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("account", "0041_authfederation_servicefederationsupport_and_more"),
]

operations = [
migrations.AddField(
model_name="federatedserviceurl",
name="config",
field=models.JSONField(
default=dict,
help_text="Service specific configuration for this URL.",
verbose_name="Service Configuration",
),
),
]
18 changes: 18 additions & 0 deletions src/account/migrations/0043_servicefederationsupport_logo_url.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.2.10 on 2024-03-13 15:54

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
("account", "0042_federatedserviceurl_config"),
]

operations = [
migrations.AddField(
model_name="servicefederationsupport",
name="logo_url",
field=models.URLField(blank=True, null=True),
),
]
3 changes: 3 additions & 0 deletions src/account/models.py → src/account/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
from django_grainy.util import Permissions
from fullctl.django.enum import CONTACT_MESSAGE_TYPE

from account.models.federation import FederatedServiceURL # noqa F401

# imports needed for initialization
from account.tasks import UpdatePermissions # noqa F401
from common.email import email_contact_us, email_noreply
from common.models import HandleRefModel
Expand Down
Loading
Loading