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 b2fa5341..bf3f24e7 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 07280a41..e7143b62 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 00000000..93be9baa --- /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 00000000..b93b6cb3 --- /dev/null +++ b/src/components/registration/registration.vue @@ -0,0 +1,86 @@ + + + + diff --git a/src/main.js b/src/main.js index 969ca8dc..cb59746d 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 4dfc0a02..7b4bfcf9 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 bc68d02c..9684e7f3 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 b93b6cb3..1560bcff 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 7b4bfcf9..afbd144c 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 4d0528b6..347dd8f2 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 33d46e7e..7ceac828 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 afbd144c..b0e8dd87 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 9684e7f3..ceb559b6 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 22e0133c..b68f67e6 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 347dd8f2..883e5caa 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 1560bcff..5267f0e1 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 bf3f24e7..585af6f6 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 5267f0e1..f010d8ab 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 883e5caa..e4ea56f6 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 7ceac828..bdc0f351 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 b8aa876b..8d6a6713 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 f2442194..1abb1789 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 93be9baa..9e99197c 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 f010d8ab..bb3e5e04 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 dd59dea7..52b820c2 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 00000000..c02cb719 --- /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 1a6f6015..a117b76f 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 585af6f6..d6291148 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 9e99197c..771b3b27 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 52b820c2..4b7891ed 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 3b6d56c4..195ee046 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 }