From 9cebb00faa9107f93d038bf3550a3ad1d61be9bf Mon Sep 17 00:00:00 2001
From: Henry Jameson <me@hjkos.com>
Date: Sun, 5 Aug 2018 10:01:38 +0300
Subject: [PATCH] the missing piece for invites system

---
 src/components/registration/registration.js  | 10 ++++++++--
 src/components/registration/registration.vue |  4 ++++
 src/i18n/messages.js                         |  6 ++++--
 src/main.js                                  |  1 +
 src/services/api/api.service.js              |  1 +
 5 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js
index 771b3b27..73840608 100644
--- a/src/components/registration/registration.js
+++ b/src/components/registration/registration.js
@@ -5,17 +5,23 @@ const registration = {
     registering: false
   }),
   created () {
-    if (!this.$store.state.config.registrationOpen || !!this.$store.state.users.currentUser) {
+    if ((!this.$store.state.config.registrationOpen && !this.token) || !!this.$store.state.users.currentUser) {
       this.$router.push('/main/all')
     }
+    // Seems like this doesn't work at first page open for some reason
+    if (this.$store.state.config.registrationOpen && this.token) {
+      this.$router.push('/registration')
+    }
   },
   computed: {
-    termsofservice () { return this.$store.state.config.tos }
+    termsofservice () { return this.$store.state.config.tos },
+    token () { return this.$route.params.token }
   },
   methods: {
     submit () {
       this.registering = true
       this.user.nickname = this.user.username
+      this.user.token = this.token
       this.$store.state.api.backendInteractor.register(this.user).then(
         (response) => {
           if (response.ok) {
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
index 00f665af..087cab6b 100644
--- a/src/components/registration/registration.vue
+++ b/src/components/registration/registration.vue
@@ -38,6 +38,10 @@
               <input :disabled="registering" v-model='user.captcha' placeholder='Enter captcha' type='test' class='form-control' id='captcha'>
             </div>
             -->
+            <div class='form-group' v-if='token' >
+              <label for='token'>{{$t('registration.token')}}</label>
+              <input disabled='true' v-model='token' class='form-control' id='token' type='text'>
+            </div>
             <div class='form-group'>
               <button :disabled="registering" type='submit' class='btn btn-default'>{{$t('general.submit')}}</button>
             </div>
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index e9d6e176..003df68c 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -354,7 +354,8 @@ const en = {
     fullname: 'Display name',
     email: 'Email',
     bio: 'Bio',
-    password_confirm: 'Password confirmation'
+    password_confirm: 'Password confirmation',
+    token: 'Invite token'
   },
   post_status: {
     posting: 'Posting',
@@ -1643,7 +1644,8 @@ const ru = {
     fullname: 'Отображаемое имя',
     email: 'Email',
     bio: 'Описание',
-    password_confirm: 'Подтверждение пароля'
+    password_confirm: 'Подтверждение пароля',
+    token: 'Код приглашения'
   },
   post_status: {
     posting: 'Отправляется',
diff --git a/src/main.js b/src/main.js
index bacd7f6d..883e1a31 100644
--- a/src/main.js
+++ b/src/main.js
@@ -119,6 +119,7 @@ window.fetch('/static/config.json')
       { name: 'mentions', path: '/:username/mentions', component: Mentions },
       { name: 'settings', path: '/settings', component: Settings },
       { name: 'registration', path: '/registration', component: Registration },
+      { name: 'registration', path: '/registration/:token', component: Registration },
       { name: 'friend-requests', path: '/friend-requests', component: FollowRequests },
       { name: 'user-settings', path: '/user-settings', component: UserSettings }
     ]
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index adf598b7..13cc4796 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -159,6 +159,7 @@ const updateProfile = ({credentials, params}) => {
 // bio
 // homepage
 // location
+// token
 const register = (params) => {
   const form = new FormData()