From a766e886f529a3f602ebacf70d7944678c027414 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sat, 15 Apr 2017 18:12:23 +0200 Subject: [PATCH 01/11] Add a registration form. --- src/components/login_form/login_form.vue | 3 + .../post_status_form/post_status_form.vue | 24 +++--- src/components/registration/registration.js | 29 +++++++ src/components/registration/registration.vue | 86 +++++++++++++++++++ src/main.js | 4 +- src/services/api/api.service.js | 34 +++++++- .../backend_interactor_service.js | 5 +- 7 files changed, 169 insertions(+), 16 deletions(-) create mode 100644 src/components/registration/registration.js create mode 100644 src/components/registration/registration.vue diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index b2fa534142..bf3f24e76b 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -20,6 +20,9 @@
{{authError}}
+
+ Register new account +
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 07280a4191..e7143b6215 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -63,6 +63,18 @@ } } + + .btn { + cursor: pointer; + } + + .btn[disabled] { + cursor: not-allowed; + } + + .icon-cancel { + cursor: pointer; + } form { display: flex; flex-direction: column; @@ -85,18 +97,6 @@ padding: 5px; resize: vertical; } - - .btn { - cursor: pointer; - } - - .btn[disabled] { - cursor: not-allowed; - } - - .icon-cancel { - cursor: pointer; - } } diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js new file mode 100644 index 0000000000..93be9baab7 --- /dev/null +++ b/src/components/registration/registration.js @@ -0,0 +1,29 @@ +const registration = { + data: () => ({ + user: {}, + error: false, + registering: false + }), + methods: { + submit () { + this.registering = true + this.user.nickname = this.user.username + this.$store.state.api.backendInteractor.register(this.user).then( + (response) => { + if (response.ok) { + this.$store.dispatch('loginUser', this.user) + this.$router.push('/main/all') + this.registering = false + } else { + this.registering = false + response.json().then((data) => { + this.error = data.error + }) + } + } + ) + } + } +} + +export default registration diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue new file mode 100644 index 0000000000..b93b6cb39b --- /dev/null +++ b/src/components/registration/registration.vue @@ -0,0 +1,86 @@ + + + + diff --git a/src/main.js b/src/main.js index 969ca8dc0c..cb59746d76 100644 --- a/src/main.js +++ b/src/main.js @@ -9,6 +9,7 @@ import ConversationPage from './components/conversation-page/conversation-page.v import Mentions from './components/mentions/mentions.vue' import UserProfile from './components/user_profile/user_profile.vue' import Settings from './components/settings/settings.vue' +import Registration from './components/registration/registration.vue' import statusesModule from './modules/statuses.js' import usersModule from './modules/users.js' @@ -58,7 +59,8 @@ const routes = [ { name: 'conversation', path: '/notice/:id', component: ConversationPage, meta: { dontScroll: true } }, { name: 'user-profile', path: '/users/:id', component: UserProfile }, { name: 'mentions', path: '/:username/mentions', component: Mentions }, - { name: 'settings', path: '/settings', component: Settings } + { name: 'settings', path: '/settings', component: Settings }, + { name: 'registration', path: '/registration', component: Registration } ] const router = new VueRouter({ diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 4dfc0a0263..7b4bfcf9e4 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -10,15 +10,18 @@ const RETWEET_URL = '/api/statuses/retweet' const STATUS_UPDATE_URL = '/api/statuses/update.json' const STATUS_DELETE_URL = '/api/statuses/destroy' const STATUS_URL = '/api/statuses/show' -const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload' +const MEDIA_UPLOAD_URL = '/api/media/upload.json' const CONVERSATION_URL = '/api/statusnet/conversation' const MENTIONS_URL = '/api/statuses/mentions.json' const FRIENDS_URL = '/api/statuses/friends.json' const FOLLOWING_URL = '/api/friendships/create.json' const UNFOLLOWING_URL = '/api/friendships/destroy.json' const QVITTER_USER_PREF_URL = '/api/qvitter/set_profile_pref.json' +const REGISTRATION_URL = '/api/account/register.json' // const USER_URL = '/api/users/show.json' +import { each } from 'lodash' + const oldfetch = window.fetch let fetch = (url, options) => { @@ -27,6 +30,32 @@ let fetch = (url, options) => { return oldfetch(fullUrl, options) } +// Params needed: +// nickname +// email +// fullname +// password +// password_confirm +// +// Optional +// bio +// homepage +// location +const register = (params) => { + const form = new FormData() + + each(params, (value, key) => { + if (value) { + form.append(key, value) + } + }) + + return fetch(REGISTRATION_URL, { + method: 'POST', + body: form + }) +} + const authHeaders = (user) => { if (user && user.username && user.password) { return { 'Authorization': `Basic ${btoa(`${user.username}:${user.password}`)}` } @@ -198,7 +227,8 @@ const apiService = { uploadMedia, fetchAllFollowing, setUserMute, - fetchMutes + fetchMutes, + register } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index bc68d02cad..9684e7f310 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -36,6 +36,8 @@ const backendInteractorService = (credentials) => { const fetchMutes = () => apiService.fetchMutes({credentials}) + const register = (params) => apiService.register(params) + const backendInteractorServiceInstance = { fetchStatus, fetchConversation, @@ -46,7 +48,8 @@ const backendInteractorService = (credentials) => { verifyCredentials: apiService.verifyCredentials, startFetching, setUserMute, - fetchMutes + fetchMutes, + register } return backendInteractorServiceInstance From 4228cfc3422a37e1e15f12d9211803f5a70d62b0 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sun, 16 Apr 2017 11:02:03 +0200 Subject: [PATCH 02/11] Add email field to registration. --- src/components/registration/registration.vue | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index b93b6cb39b..1560bcff50 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -13,6 +13,10 @@ +
+ + +
From 55edd6d8c261d5620f767b5d82a981d6db170463 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sun, 16 Apr 2017 11:15:06 +0200 Subject: [PATCH 03/11] Restore old media upload endpoint. --- src/services/api/api.service.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 7b4bfcf9e4..afbd144c5b 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -10,7 +10,7 @@ const RETWEET_URL = '/api/statuses/retweet' const STATUS_UPDATE_URL = '/api/statuses/update.json' const STATUS_DELETE_URL = '/api/statuses/destroy' const STATUS_URL = '/api/statuses/show' -const MEDIA_UPLOAD_URL = '/api/media/upload.json' +const MEDIA_UPLOAD_URL = '/api/statusnet/media/upload' const CONVERSATION_URL = '/api/statusnet/conversation' const MENTIONS_URL = '/api/statuses/mentions.json' const FRIENDS_URL = '/api/statuses/friends.json' From 37c10be5e29815057b4b1adcd268b9f4cb5b415e Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sun, 16 Apr 2017 13:44:11 +0200 Subject: [PATCH 04/11] Add basic avatar changing. --- src/components/settings/settings.js | 22 +++++++++++++++ src/components/settings/settings.vue | 7 +++++ src/services/api/api.service.js | 27 ++++++++++++++++++- .../backend_interactor_service.js | 4 ++- 4 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index 4d0528b6ef..347dd8f2e5 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -13,6 +13,28 @@ const settings = { components: { StyleSwitcher }, + computed: { + user () { + return this.$store.state.users.currentUser + } + }, + methods: { + uploadAvatar ({target}) { + const file = target.files[0] + const reader = new FileReader() + reader.onload = ({target}) => { + const img = target.result + + this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { + if (!user.error) { + this.$store.commit('addNewUsers', [user]) + this.$store.commit('setCurrentUser', user) + } + }) + } + reader.readAsDataURL(file) + } + }, watch: { hideAttachmentsLocal (value) { this.$store.dispatch('setOption', { name: 'hideAttachments', value }) diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index 33d46e7e3b..7ceac828b0 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -8,6 +8,13 @@

Theme

+
+

Avatar

+ +
+ +
+

Filtering

All notices containing these words will be muted, one per line

diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index afbd144c5b..b0e8dd8723 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -18,6 +18,7 @@ const FOLLOWING_URL = '/api/friendships/create.json' const UNFOLLOWING_URL = '/api/friendships/destroy.json' const QVITTER_USER_PREF_URL = '/api/qvitter/set_profile_pref.json' const REGISTRATION_URL = '/api/account/register.json' +const AVATAR_UPDATE_URL = '/api/qvitter/update_avatar.json' // const USER_URL = '/api/users/show.json' import { each } from 'lodash' @@ -30,6 +31,29 @@ let fetch = (url, options) => { return oldfetch(fullUrl, options) } +// Params +// cropH +// cropW +// cropX +// cropY +// img (base 64 encodend data url) +const updateAvatar = ({credentials, params}) => { + let url = AVATAR_UPDATE_URL + + const form = new FormData() + + each(params, (value, key) => { + if (value) { + form.append(key, value) + } + }) + return fetch(url, { + headers: authHeaders(credentials), + method: 'POST', + body: form + }).then((data) => data.json()) +} + // Params needed: // nickname // email @@ -228,7 +252,8 @@ const apiService = { fetchAllFollowing, setUserMute, fetchMutes, - register + register, + updateAvatar } export default apiService diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 9684e7f310..ceb559b6fe 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -37,6 +37,7 @@ const backendInteractorService = (credentials) => { const fetchMutes = () => apiService.fetchMutes({credentials}) const register = (params) => apiService.register(params) + const updateAvatar = ({params}) => apiService.updateAvatar({credentials, params}) const backendInteractorServiceInstance = { fetchStatus, @@ -49,7 +50,8 @@ const backendInteractorService = (credentials) => { startFetching, setUserMute, fetchMutes, - register + register, + updateAvatar } return backendInteractorServiceInstance From dede7f7f2f66a0daaf1c1a47bf2532de53024d18 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Sun, 16 Apr 2017 16:05:13 +0200 Subject: [PATCH 05/11] Update existing currentusers if there is one. --- src/modules/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users.js b/src/modules/users.js index 22e0133c36..b68f67e6fa 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -24,7 +24,7 @@ export const mutations = { set(user, 'muted', muted) }, setCurrentUser (state, user) { - state.currentUser = user + state.currentUser = merge(state.currentUser || {}, user) }, beginLogin (state) { state.loggingIn = true From ce896d393b939f2620ab35040f7a55930bc1f3ca Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Mon, 17 Apr 2017 10:12:30 +0200 Subject: [PATCH 06/11] Fix linting. --- src/components/settings/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index 347dd8f2e5..883e5caaea 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -21,6 +21,7 @@ const settings = { methods: { uploadAvatar ({target}) { const file = target.files[0] + // eslint-disable-next-line no-undef const reader = new FileReader() reader.onload = ({target}) => { const img = target.result From b3b6d43dcc56ba8828d4bd180676b46141c0f0b1 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Mon, 17 Apr 2017 13:57:02 +0300 Subject: [PATCH 07/11] Add ToS field into registration form (still need to make it fetch it somewhere.) Make the register form look more polished. --- src/components/registration/registration.vue | 130 ++++++++++++------- 1 file changed, 82 insertions(+), 48 deletions(-) diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 1560bcff50..5267f0e163 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -5,32 +5,40 @@
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+

Terms of Service

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
{{error}}
@@ -44,28 +52,45 @@ From 143aa3b990c0e0fac98c4a097d68e9f7518f1940 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 21 Apr 2017 18:52:42 +0300 Subject: [PATCH 08/11] Started captcha and better avatar control, improved login form to fit register link better. --- src/components/login_form/login_form.vue | 22 ++++++++--- src/components/registration/registration.vue | 14 ++++++- src/components/settings/settings.js | 20 ++++++++-- src/components/settings/settings.vue | 40 +++++++++++++++++++- 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index bf3f24e76b..585af6f64e 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -15,14 +15,14 @@
- +
{{authError}}
-
- Register new account -
@@ -42,8 +42,8 @@ } .btn { - margin-top: 1.0em; min-height: 28px; + width: 10em; } .error { @@ -53,6 +53,18 @@ min-height: 28px; line-height: 28px; } + + .register { + flex: 1 1; + } + + .login-bottom { + margin-top: 1.0em; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + } } diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 5267f0e163..f010d8ab01 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -31,6 +31,13 @@ +
@@ -63,7 +70,7 @@ } .terms-of-service { - flex: 0 1 55%; + flex: 0 1 50%; margin: 0.8em; } @@ -99,6 +106,11 @@ padding: 0.1em 0.2em 0.2em 0.2em; } + .captcha { + max-width: 350px; + margin-bottom: 0.4em; + } + .btn { //align-self: flex-start; //width: 10em; diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index 883e5caaea..e4ea56f63c 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -7,7 +7,8 @@ const settings = { hideAttachmentsLocal: this.$store.state.config.hideAttachments, hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv, hideNsfwLocal: this.$store.state.config.hideNsfw, - muteWordsString: this.$store.state.config.muteWords.join('\n') + muteWordsString: this.$store.state.config.muteWords.join('\n'), + previewfile: null } }, components: { @@ -25,15 +26,26 @@ const settings = { const reader = new FileReader() reader.onload = ({target}) => { const img = target.result - - this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { + this.previewfile = img + /*this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { if (!user.error) { this.$store.commit('addNewUsers', [user]) this.$store.commit('setCurrentUser', user) } - }) + })*/ } reader.readAsDataURL(file) + }, + submitAvatar () { + if (!this.previewfile) + return + const img = this.previewfile + this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { + if (!user.error) { + this.$store.commit('addNewUsers', [user]) + this.$store.commit('setCurrentUser', user) + } + }) } }, watch: { diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index 7ceac828b0..bdc0f35186 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -8,12 +8,17 @@

Theme

-
+

Avatar

- +

Your current avatar:

+ +

Set new avatar:

+ +
+

Filtering

@@ -51,6 +56,37 @@ width: 100%; height: 100px; } + + .old-avatar { + width: 128px; + border-radius: 5px; + } + + .new-avatar { + max-width: 100%; + border-radius: 5px; + } + + .btn { + margin-top: 1em; + min-height: 28px; + width: 10em; + } + + .cropper { + //position: absolute; + cursor: move; + width: 128px; + height: 128px; + border:1px solid #fff; + background-color: #000000; + .sub { + width: 100%; + height: 100%; + margin: -1px -1px -1px -1px ; + border:1px dashed #000; + } + } } .setting-list { list-style-type: none; From 95605c32f1a8d08d72eb60d34abead6067b79841 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Mon, 19 Jun 2017 12:26:33 +0300 Subject: [PATCH 09/11] Automatic square cropping for avatar upload, preview of the new avatar. --- src/components/settings/settings.js | 30 ++++++++++++++++++---------- src/components/settings/settings.vue | 21 ++++--------------- 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js index b8aa876b5e..8d6a671318 100644 --- a/src/components/settings/settings.js +++ b/src/components/settings/settings.js @@ -8,10 +8,9 @@ const settings = { hideAttachmentsInConvLocal: this.$store.state.config.hideAttachmentsInConv, hideNsfwLocal: this.$store.state.config.hideNsfw, muteWordsString: this.$store.state.config.muteWords.join('\n'), - previewfile: null, autoLoadLocal: this.$store.state.config.autoLoad, hoverPreviewLocal: this.$store.state.config.hoverPreview, - muteWordsString: this.$store.state.config.muteWords.join('\n') + previewfile: null } }, components: { @@ -30,20 +29,29 @@ const settings = { reader.onload = ({target}) => { const img = target.result this.previewfile = img - /*this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { - if (!user.error) { - this.$store.commit('addNewUsers', [user]) - this.$store.commit('setCurrentUser', user) - } - })*/ } reader.readAsDataURL(file) }, submitAvatar () { - if (!this.previewfile) - return + if (!this.previewfile) { return } + const img = this.previewfile - this.$store.state.api.backendInteractor.updateAvatar({params: {img}}).then((user) => { + // eslint-disable-next-line no-undef + let imginfo = new Image() + let cropX, cropY, cropW, cropH + imginfo.src = this.previewfile + if (imginfo.height > imginfo.width) { + cropX = 0 + cropW = imginfo.width + cropY = Math.floor((imginfo.height - imginfo.width) / 2) + cropH = imginfo.width + } else { + cropY = 0 + cropH = imginfo.height + cropX = Math.floor((imginfo.width - imginfo.height) / 2) + cropW = imginfo.height + } + this.$store.state.api.backendInteractor.updateAvatar({params: {img, cropX, cropY, cropW, cropH}}).then((user) => { if (!user.error) { this.$store.commit('addNewUsers', [user]) this.$store.commit('setCurrentUser', user) diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index f2442194e9..1abb178909 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -13,7 +13,7 @@

Your current avatar:

Set new avatar:

- +
@@ -71,7 +71,9 @@ } .new-avatar { - max-width: 100%; + object-fit: cover; + width: 128px; + height: 128px; border-radius: 5px; } @@ -80,21 +82,6 @@ min-height: 28px; width: 10em; } - - .cropper { - //position: absolute; - cursor: move; - width: 128px; - height: 128px; - border:1px solid #fff; - background-color: #000000; - .sub { - width: 100%; - height: 100%; - margin: -1px -1px -1px -1px ; - border:1px dashed #000; - } - } } .setting-list { list-style-type: none; From bfbc94d697df9e80e0454fbae776b6dec85dfc9b Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Mon, 19 Jun 2017 16:35:35 +0300 Subject: [PATCH 10/11] Move customizable terms-of-service into its separate .html file. --- src/components/registration/registration.js | 3 +++ src/components/registration/registration.vue | 4 +--- src/main.js | 8 +++++++- static/terms-of-service.html | 7 +++++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 static/terms-of-service.html diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index 93be9baab7..9e99197c29 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -4,6 +4,9 @@ const registration = { error: false, registering: false }), + computed: { + termsofservice () { return this.$store.state.config.tos } + }, methods: { submit () { this.registering = true diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index f010d8ab01..bb3e5e04f3 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -42,9 +42,7 @@
-
-

Terms of Service

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
diff --git a/src/main.js b/src/main.js index dd59dea707..52b820c28b 100644 --- a/src/main.js +++ b/src/main.js @@ -86,9 +86,15 @@ new Vue({ window.fetch('/static/config.json') .then((res) => res.json()) - .then(({name, theme, background, logo}) => { + .then(({name, theme, background, logo, tos}) => { store.dispatch('setOption', { name: 'name', value: name }) store.dispatch('setOption', { name: 'theme', value: theme }) store.dispatch('setOption', { name: 'background', value: background }) store.dispatch('setOption', { name: 'logo', value: logo }) }) + +window.fetch('/static/terms-of-service.html') + .then((res) => res.text()) + .then((html) => { + store.dispatch('setOption', { name: 'tos', value: html }) + }) diff --git a/static/terms-of-service.html b/static/terms-of-service.html new file mode 100644 index 0000000000..c02cb71984 --- /dev/null +++ b/static/terms-of-service.html @@ -0,0 +1,7 @@ +

Terms of Service

+ +

This is a placeholder ToS.

+ +

Edit "/static/terms-of-service.html" to make it fit the needs of your instance.

+
+ From 1a5ee95ee4e7b739158bc7571b01b32b1af792ad Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Tue, 20 Jun 2017 10:37:51 +0300 Subject: [PATCH 11/11] Add a config.json option for enabling registration, don't link and redirect away from register page when it's disabled. --- src/components/login_form/login_form.js | 3 ++- src/components/login_form/login_form.vue | 2 +- src/components/registration/registration.js | 5 +++++ src/main.js | 3 ++- static/config.json | 3 ++- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/components/login_form/login_form.js b/src/components/login_form/login_form.js index 1a6f601543..a117b76fd2 100644 --- a/src/components/login_form/login_form.js +++ b/src/components/login_form/login_form.js @@ -4,7 +4,8 @@ const LoginForm = { authError: false }), computed: { - loggingIn () { return this.$store.state.users.loggingIn } + loggingIn () { return this.$store.state.users.loggingIn }, + registrationOpen () { return this.$store.state.config.registrationOpen } }, methods: { submit () { diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index 585af6f64e..d629114820 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -16,7 +16,7 @@
diff --git a/src/components/registration/registration.js b/src/components/registration/registration.js index 9e99197c29..771b3b2750 100644 --- a/src/components/registration/registration.js +++ b/src/components/registration/registration.js @@ -4,6 +4,11 @@ const registration = { error: false, registering: false }), + created () { + if (!this.$store.state.config.registrationOpen || !!this.$store.state.users.currentUser) { + this.$router.push('/main/all') + } + }, computed: { termsofservice () { return this.$store.state.config.tos } }, diff --git a/src/main.js b/src/main.js index 52b820c28b..4b7891ed06 100644 --- a/src/main.js +++ b/src/main.js @@ -86,11 +86,12 @@ new Vue({ window.fetch('/static/config.json') .then((res) => res.json()) - .then(({name, theme, background, logo, tos}) => { + .then(({name, theme, background, logo, registrationOpen}) => { store.dispatch('setOption', { name: 'name', value: name }) store.dispatch('setOption', { name: 'theme', value: theme }) store.dispatch('setOption', { name: 'background', value: background }) store.dispatch('setOption', { name: 'logo', value: logo }) + store.dispatch('setOption', { name: 'registrationOpen', value: registrationOpen }) }) window.fetch('/static/terms-of-service.html') diff --git a/static/config.json b/static/config.json index 3b6d56c44a..195ee04690 100644 --- a/static/config.json +++ b/static/config.json @@ -2,5 +2,6 @@ "name": "Pleroma FE", "theme": "base16-pleroma-dark.css", "background": "/static/bg.jpg", - "logo": "/static/logo.png" + "logo": "/static/logo.png", + "registrationOpen": false }