registration_email_policy_test.go 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //go:build unit
  2. package service
  3. import (
  4. "context"
  5. "testing"
  6. "github.com/stretchr/testify/require"
  7. )
  8. func TestNormalizeRegistrationEmailSuffixWhitelist(t *testing.T) {
  9. got, err := NormalizeRegistrationEmailSuffixWhitelist([]string{"example.com", "@EXAMPLE.COM", " @foo.bar ", "*.EDU.CN"})
  10. require.NoError(t, err)
  11. require.Equal(t, []string{"@example.com", "@foo.bar", "*.edu.cn"}, got)
  12. }
  13. func TestNormalizeRegistrationEmailSuffixWhitelist_Invalid(t *testing.T) {
  14. for _, item := range []string{"@invalid_domain", "*.", "*", "*.@", "*.foo"} {
  15. t.Run(item, func(t *testing.T) {
  16. _, err := NormalizeRegistrationEmailSuffixWhitelist([]string{item})
  17. require.Error(t, err)
  18. })
  19. }
  20. }
  21. func TestParseRegistrationEmailSuffixWhitelist(t *testing.T) {
  22. got := ParseRegistrationEmailSuffixWhitelist(`["example.com","@foo.bar","*.EDU.CN","@invalid_domain","*.foo"]`)
  23. require.Equal(t, []string{"@example.com", "@foo.bar", "*.edu.cn"}, got)
  24. }
  25. func TestIsRegistrationEmailSuffixAllowed(t *testing.T) {
  26. require.True(t, IsRegistrationEmailSuffixAllowed("user@example.com", []string{"@example.com"}))
  27. require.True(t, IsRegistrationEmailSuffixAllowed("user@example.com.", []string{"@example.com"}))
  28. require.False(t, IsRegistrationEmailSuffixAllowed("user@sub.example.com", []string{"@example.com"}))
  29. require.True(t, IsRegistrationEmailSuffixAllowed("user@qq.com", []string{"@qq.com"}))
  30. require.False(t, IsRegistrationEmailSuffixAllowed("user@sub.qq.com", []string{"@qq.com"}))
  31. require.True(t, IsRegistrationEmailSuffixAllowed("student@cs.edu.cn", []string{"*.edu.cn"}))
  32. require.True(t, IsRegistrationEmailSuffixAllowed("student@edu.cn", []string{"*.edu.cn"}))
  33. require.False(t, IsRegistrationEmailSuffixAllowed("student@foo.cn", []string{"*.edu.cn"}))
  34. require.True(t, IsRegistrationEmailSuffixAllowed("user@a.com", []string{"@a.com", "*.b.cn"}))
  35. require.True(t, IsRegistrationEmailSuffixAllowed("user@school.b.cn", []string{"@a.com", "*.b.cn"}))
  36. require.True(t, IsRegistrationEmailSuffixAllowed("user@b.cn", []string{"@a.com", "*.b.cn"}))
  37. require.False(t, IsRegistrationEmailSuffixAllowed("user@c.cn", []string{"@a.com", "*.b.cn"}))
  38. require.True(t, IsRegistrationEmailSuffixAllowed("user@any.com", []string{}))
  39. }
  40. func TestRegistrationEmailQuotaRejectsMalformedDomainWhenWhitelistConfigured(t *testing.T) {
  41. repo := &userRepoStub{}
  42. svc := newAuthService(repo, map[string]string{
  43. SettingKeyRegistrationEnabled: "true",
  44. SettingKeyRegistrationEmailSuffixWhitelist: `["@example.com"]`,
  45. SettingKeyRegistrationEmailDomainQuotaEnabled: "true",
  46. }, nil, nil)
  47. _, _, err := svc.Register(context.Background(), "malformed-email", "password")
  48. require.ErrorIs(t, err, ErrEmailSuffixNotAllowed)
  49. require.Empty(t, repo.created)
  50. }
  51. func TestIsRegistrationEmailSuffixLimited(t *testing.T) {
  52. require.False(t, IsRegistrationEmailSuffixLimited("user@custom.example", nil))
  53. require.False(t, IsRegistrationEmailSuffixLimited("user@example.com", []string{"@example.com"}))
  54. require.True(t, IsRegistrationEmailSuffixLimited("user@custom.example", []string{"@example.com"}))
  55. }
  56. func TestRegistrationEmailDomainUsesRegistrableDomain(t *testing.T) {
  57. require.Equal(t, "abc.com", RegistrationEmailDomain("user@abc.com"))
  58. require.Equal(t, "abc.com", RegistrationEmailDomain("user@abcd.abc.com"))
  59. require.Equal(t, "example.co.uk", RegistrationEmailDomain("user@team.example.co.uk"))
  60. require.Equal(t, "example.com", RegistrationEmailDomain("user@example.com."))
  61. require.Equal(t, "example.com", RegistrationEmailDomain("user@team.example.com."))
  62. }