Skip to content

Commit 2da36a2

Browse files
committed
chore: remove legacy migration code
Now the data is migrated there is no need to maintain this.
1 parent 9eeeeea commit 2da36a2

6 files changed

Lines changed: 68 additions & 629 deletions

File tree

weblate_web/crm/tests.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,11 @@ def test_customer_detail_adds_existing_hosted_user(self):
411411
existing = User.objects.create_user(
412412
username="existing", email="existing@example.com"
413413
)
414+
SamlIdentity.objects.create(
415+
provider=settings.HOSTED_SAML_PROVIDER,
416+
external_id="43",
417+
user=existing,
418+
)
414419
responses.add(
415420
responses.POST,
416421
"https://hosted.example/users/ensure/",
@@ -462,6 +467,11 @@ def test_customer_detail_does_not_log_duplicate_customer_user(self):
462467
existing = User.objects.create_user(
463468
username="existing", email="existing@example.com"
464469
)
470+
SamlIdentity.objects.create(
471+
provider=settings.HOSTED_SAML_PROVIDER,
472+
external_id="43",
473+
user=existing,
474+
)
465475
customer.users.add(existing)
466476
responses.add(
467477
responses.POST,

weblate_web/crm/views.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@
6262
)
6363
from weblate_web.payments.models import Customer, Payment
6464
from weblate_web.saml import (
65-
AmbiguousSamlIdentityError,
6665
get_default_saml_provider,
6766
normalize_external_id,
6867
sync_saml_payload,
@@ -675,7 +674,6 @@ def add_customer_user(self, request, customer: Customer, *args, **kwargs):
675674
},
676675
)
677676
except (
678-
AmbiguousSamlIdentityError,
679677
DataError,
680678
HostedUserEnsureError,
681679
IntegrityError,

weblate_web/management/commands/audit_saml_users.py

Lines changed: 0 additions & 195 deletions
This file was deleted.

weblate_web/management/commands/sync_hosted_users.py

Lines changed: 7 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,24 @@
2020
from __future__ import annotations
2121

2222
from dataclasses import dataclass
23-
from typing import TYPE_CHECKING, NoReturn
23+
from typing import NoReturn
2424
from urllib.parse import urlsplit
2525

2626
import requests
2727
from django.conf import settings
2828
from django.core.management.base import BaseCommand, CommandError
2929
from django.core.signing import BadSignature, SignatureExpired, dumps, loads
3030
from django.db import DataError, IntegrityError
31-
from django.urls import NoReverseMatch, reverse
3231

3332
from weblate_web.models import ExternalSyncState, SamlIdentity
3433
from weblate_web.saml import (
35-
AmbiguousSamlIdentityError,
3634
SamlSyncContext,
3735
extract_profile,
3836
get_default_saml_provider,
39-
get_legacy_candidates,
4037
normalize_external_id,
4138
sync_saml_payload,
4239
)
4340

44-
if TYPE_CHECKING:
45-
from django.contrib.auth.models import User
46-
4741
SYNC_KEY = "hosted-users"
4842
USER_SYNC_SALT = "weblate.user-sync"
4943
USER_SYNC_RESPONSE_SALT = "weblate.user-sync-response"
@@ -175,7 +169,7 @@ def sync_user_payloads(
175169
processed += 1
176170
if not isinstance(user_payload, dict):
177171
skipped = True
178-
self.write_skip("payload is not a mapping", user_payload, context)
172+
self.write_skip("payload is not a mapping", user_payload)
179173
self.write_progress(processed, total, progress_every)
180174
continue
181175
if only_missing and self.get_existing_identity(user_payload, context):
@@ -185,7 +179,6 @@ def sync_user_payloads(
185179
try:
186180
user, _created = sync_saml_payload(user_payload, context)
187181
except (
188-
AmbiguousSamlIdentityError,
189182
AttributeError,
190183
DataError,
191184
IntegrityError,
@@ -194,12 +187,12 @@ def sync_user_payloads(
194187
ValueError,
195188
) as error:
196189
skipped = True
197-
self.write_skip(error, user_payload, context)
190+
self.write_skip(error, user_payload)
198191
self.write_progress(processed, total, progress_every)
199192
continue
200193
if user is None:
201194
skipped = True
202-
self.write_skip("user not synchronized", user_payload, context)
195+
self.write_skip("user not synchronized", user_payload)
203196
self.write_progress(processed, total, progress_every)
204197
continue
205198
count += 1
@@ -235,64 +228,25 @@ def write_skip(
235228
self,
236229
error: object,
237230
user_payload: object,
238-
context: SamlSyncContext | None,
239231
) -> None:
240232
self.stderr.write(f"Skipping hosted user payload: {error}")
241-
for line in self.describe_user_payload(user_payload, context):
233+
for line in self.describe_user_payload(user_payload):
242234
self.stderr.write(f" {line}")
243235

244-
def describe_user_payload(
245-
self, user_payload: object, context: SamlSyncContext | None
246-
) -> list[str]:
236+
def describe_user_payload(self, user_payload: object) -> list[str]:
247237
if not isinstance(user_payload, dict):
248238
return [f"payload={user_payload!r}"]
249-
provider = str(user_payload.get("provider", get_default_saml_provider()))
250239
external_id = normalize_external_id(user_payload.get("external_id"))
251240
profile = extract_profile(user_payload)
252241
username = profile.get("username", user_payload.get("username", ""))
253242
email = profile.get("email", "")
254-
lines = [
243+
return [
255244
(
256245
"hosted user: "
257246
f"external_id={external_id!r} username={username!r} email={email!r} "
258247
f"admin={self.get_hosted_user_admin_url(external_id)}"
259248
)
260249
]
261-
candidates = sorted(
262-
get_legacy_candidates(profile, context), key=lambda user: user.pk
263-
)
264-
if candidates:
265-
lines.append("local candidates:")
266-
lines.extend(f" {self.describe_local_user(user)}" for user in candidates)
267-
if external_id:
268-
lines.append(
269-
"possible action: link the correct local candidate with "
270-
f"SamlIdentity(provider={provider!r}, "
271-
f"external_id={external_id!r}, user=<chosen user>)"
272-
)
273-
elif external_id:
274-
lines.append(
275-
"possible action: create a placeholder local user and link "
276-
f"SamlIdentity(provider={provider!r}, external_id={external_id!r})"
277-
)
278-
return lines
279-
280-
def describe_local_user(self, user: User) -> str:
281-
identities = [
282-
(
283-
f"{identity.provider}:{identity.external_id} "
284-
f"{self.get_admin_url('admin:weblate_web_samlidentity_change', identity.pk)}"
285-
)
286-
for identity in SamlIdentity.objects.filter(user=user).order_by(
287-
"provider", "external_id"
288-
)
289-
]
290-
return (
291-
f"id={user.pk} username={user.username!r} email={user.email!r} "
292-
f"last_login={user.last_login} "
293-
f"admin={self.get_admin_url('admin:auth_user_change', user.pk)} "
294-
f"saml_identities={identities}"
295-
)
296250

297251
def get_existing_identity(
298252
self, user_payload: object, context: SamlSyncContext | None
@@ -311,13 +265,6 @@ def get_existing_identity(
311265
.first()
312266
)
313267

314-
def get_admin_url(self, viewname: str, object_id: object) -> str:
315-
try:
316-
path = reverse(viewname, args=[object_id])
317-
except NoReverseMatch:
318-
return ""
319-
return f"{settings.SITE_URL.rstrip('/')}{path}"
320-
321268
def get_hosted_user_admin_url(self, external_id: str) -> str:
322269
if not external_id:
323270
return ""

0 commit comments

Comments
 (0)