diff --git a/api/funkwhale_api/templates/account/email/email_confirmation_message.txt b/api/funkwhale_api/templates/account/email/email_confirmation_message.txt
new file mode 100644
index 000000000..8aec540fe
--- /dev/null
+++ b/api/funkwhale_api/templates/account/email/email_confirmation_message.txt
@@ -0,0 +1,8 @@
+{% load account %}{% user_display user as user_display %}{% load i18n %}{% autoescape off %}{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Hello from {{ site_name }}!
+
+You're receiving this e-mail because user {{ user_display }} at {{ site_domain }} has given yours as an e-mail address to connect their account.
+
+To confirm this is correct, go to {{ funkwhale_url }}/auth/email/confirm?key={{ key }}
+{% endblocktrans %}{% endautoescape %}
+{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Thank you from {{ site_name }}!
+{{ site_domain }}{% endblocktrans %}
diff --git a/api/funkwhale_api/users/adapters.py b/api/funkwhale_api/users/adapters.py
index 96d1b8b1d..7bd341d14 100644
--- a/api/funkwhale_api/users/adapters.py
+++ b/api/funkwhale_api/users/adapters.py
@@ -1,5 +1,6 @@
-from allauth.account.adapter import DefaultAccountAdapter
+from django.conf import settings
+from allauth.account.adapter import DefaultAccountAdapter
from dynamic_preferences.registries import global_preferences_registry
@@ -8,3 +9,7 @@ class FunkwhaleAccountAdapter(DefaultAccountAdapter):
def is_open_for_signup(self, request):
manager = global_preferences_registry.manager()
return manager['users__registration_enabled']
+
+ def send_mail(self, template_prefix, email, context):
+ context['funkwhale_url'] = settings.FUNKWHALE_URL
+ return super().send_mail(template_prefix, email, context)
diff --git a/front/src/router/index.js b/front/src/router/index.js
index 3bad260bc..b1e208023 100644
--- a/front/src/router/index.js
+++ b/front/src/router/index.js
@@ -11,6 +11,7 @@ import Settings from '@/components/auth/Settings'
import Logout from '@/components/auth/Logout'
import PasswordReset from '@/views/auth/PasswordReset'
import PasswordResetConfirm from '@/views/auth/PasswordResetConfirm'
+import EmailConfirm from '@/views/auth/EmailConfirm'
import Library from '@/components/library/Library'
import LibraryHome from '@/components/library/Home'
import LibraryArtist from '@/components/library/Artist'
@@ -69,6 +70,14 @@ export default new Router({
defaultEmail: route.query.email
})
},
+ {
+ path: '/auth/email/confirm',
+ name: 'auth.email-confirm',
+ component: EmailConfirm,
+ props: (route) => ({
+ defaultKey: route.query.key
+ })
+ },
{
path: '/auth/password/reset/confirm',
name: 'auth.password-reset-confirm',
diff --git a/front/src/views/auth/EmailConfirm.vue b/front/src/views/auth/EmailConfirm.vue
new file mode 100644
index 000000000..7ffa3c8d1
--- /dev/null
+++ b/front/src/views/auth/EmailConfirm.vue
@@ -0,0 +1,71 @@
+
+ {{ $t('Confirm your email') }}
+
+
+