diff options
| author | Acid Chicken (硫酸鶏) <root@acid-chicken.com> | 2018-11-04 22:03:55 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2018-11-04 22:03:55 +0900 |
| commit | 8646a9c49c708cd502904b450e16b405118312e3 (patch) | |
| tree | d616b6bf70be75b4095f2c215fa5e291b548e756 /src/client | |
| parent | Clean up (diff) | |
| download | misskey-8646a9c49c708cd502904b450e16b405118312e3.tar.gz misskey-8646a9c49c708cd502904b450e16b405118312e3.tar.bz2 misskey-8646a9c49c708cd502904b450e16b405118312e3.zip | |
Add GitHub auth (#3095)
Diffstat (limited to 'src/client')
7 files changed, 120 insertions, 4 deletions
diff --git a/src/client/app/common/views/components/github-setting.vue b/src/client/app/common/views/components/github-setting.vue new file mode 100644 index 0000000000..f79a700a92 --- /dev/null +++ b/src/client/app/common/views/components/github-setting.vue @@ -0,0 +1,63 @@ +<template> +<div class="mk-github-setting"> + <p>%i18n:@description%<a :href="`${docsUrl}/link-to-github`" target="_blank">%i18n:@detail%</a></p> + <p class="account" v-if="$store.state.i.github" :title="`GitHub ID: ${$store.state.i.github.id}`">%i18n:@connected-to%: <a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p> + <p> + <a :href="`${apiUrl}/connect/github`" target="_blank" @click.prevent="connect">{{ $store.state.i.github ? '%i18n:@reconnect%' : '%i18n:@connect%' }}</a> + <span v-if="$store.state.i.github"> or </span> + <a :href="`${apiUrl}/disconnect/github`" target="_blank" v-if="$store.state.i.github" @click.prevent="disconnect">%i18n:@disconnect%</a> + </p> + <p class="id" v-if="$store.state.i.github">GitHub ID: {{ $store.state.i.github.id }}</p> +</div> +</template> + +<script lang="ts"> +import Vue from 'vue'; +import { apiUrl, docsUrl } from '../../../config'; + +export default Vue.extend({ + data() { + return { + form: null, + apiUrl, + docsUrl + }; + }, + mounted() { + this.$watch('$store.state.i', () => { + if (this.$store.state.i.github && this.form) + this.form.close(); + }, { + deep: true + }); + }, + methods: { + connect() { + this.form = window.open(apiUrl + '/connect/github', + 'github_connect_window', + 'height=570, width=520'); + }, + + disconnect() { + window.open(apiUrl + '/disconnect/github', + 'github_disconnect_window', + 'height=570, width=520'); + } + } +}); +</script> + +<style lang="stylus" scoped> +.mk-github-setting + .account + border solid 1px #e1e8ed + border-radius 4px + padding 16px + + a + font-weight bold + color inherit + + .id + color #8899a6 +</style> diff --git a/src/client/app/common/views/components/index.ts b/src/client/app/common/views/components/index.ts index a3ddf10820..3b20d0753d 100644 --- a/src/client/app/common/views/components/index.ts +++ b/src/client/app/common/views/components/index.ts @@ -37,6 +37,7 @@ import messaging from './messaging.vue'; import messagingRoom from './messaging-room.vue'; import urlPreview from './url-preview.vue'; import twitterSetting from './twitter-setting.vue'; +import githubSetting from './github-setting.vue'; import fileTypeIcon from './file-type-icon.vue'; import Reversi from './games/reversi/reversi.vue'; import welcomeTimeline from './welcome-timeline.vue'; @@ -90,6 +91,7 @@ Vue.component('mk-messaging', messaging); Vue.component('mk-messaging-room', messagingRoom); Vue.component('mk-url-preview', urlPreview); Vue.component('mk-twitter-setting', twitterSetting); +Vue.component('mk-github-setting', githubSetting); Vue.component('mk-file-type-icon', fileTypeIcon); Vue.component('mk-reversi', Reversi); Vue.component('mk-welcome-timeline', welcomeTimeline); diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue index 9224f82cb9..0b81daf176 100644 --- a/src/client/app/common/views/components/signin.vue +++ b/src/client/app/common/views/components/signin.vue @@ -13,6 +13,7 @@ <ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required styl="fill"/> <ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button> <p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/twitter`">%i18n:@signin-with-twitter%</a></p> + <p style="margin: 8px 0;">%i18n:@or% <a :href="`${apiUrl}/signin/github`">%i18n:@signin-with-github%</a></p> </form> </template> diff --git a/src/client/app/desktop/views/components/settings.vue b/src/client/app/desktop/views/components/settings.vue index 983a0b9bc2..93bef0e618 100644 --- a/src/client/app/desktop/views/components/settings.vue +++ b/src/client/app/desktop/views/components/settings.vue @@ -23,6 +23,13 @@ <mk-twitter-setting/> </section> </ui-card> + + <ui-card> + <div slot="title">%fa:B github% %i18n:@github%</div> + <section> + <mk-github-setting/> + </section> + </ui-card> </div> <ui-card class="theme" v-show="page == 'theme'"> diff --git a/src/client/app/desktop/views/pages/user/user.github.vue b/src/client/app/desktop/views/pages/user/user.github.vue new file mode 100644 index 0000000000..abe99b8456 --- /dev/null +++ b/src/client/app/desktop/views/pages/user/user.github.vue @@ -0,0 +1,27 @@ +<template> +<div class="aqooishiizumijmihokohinatamihoaz"> + <span>%fa:B github%<a :href="`https://github.com/${user.github.login}`" target="_blank">@{{ user.github.login }}</a></span> +</div> +</template> + +<script lang="ts"> +import Vue from 'vue'; + +export default Vue.extend({ + props: ['user'] +}); +</script> + +<style lang="stylus" scoped> +.aqooishiizumijmihokohinatamihoaz +.adsvaidqfznoartcbplullnejvxjphcn + padding 32px + background #171515 + border-radius 6px + color #fff + + a + margin-left 8px + color #fff + +</style> diff --git a/src/client/app/desktop/views/pages/user/user.vue b/src/client/app/desktop/views/pages/user/user.vue index 0f58763f03..b137592c69 100644 --- a/src/client/app/desktop/views/pages/user/user.vue +++ b/src/client/app/desktop/views/pages/user/user.vue @@ -2,7 +2,7 @@ <mk-ui> <div class="xygkxeaeontfaokvqmiblezmhvhostak" v-if="!fetching"> <div class="is-suspended" v-if="user.isSuspended">%fa:exclamation-triangle% %i18n:@is-suspended%</div> - <div class="is-remote" v-if="user.host != null">%fa:exclamation-triangle% %i18n:common.is-remote-user%<a :href="user.url || user.uri" target="_blank">%i18n:common.view-on-remote%</a></div> + <div class="is-remote" v-if="user.host">%fa:exclamation-triangle% %i18n:common.is-remote-user%<a :href="user.url || user.uri" target="_blank">%i18n:common.view-on-remote%</a></div> <main> <div class="main"> <x-header :user="user"/> @@ -12,14 +12,15 @@ <div class="side"> <div class="instance" v-if="!$store.getters.isSignedIn"><mk-instance/></div> <x-profile :user="user"/> - <x-twitter :user="user" v-if="user.host === null && user.twitter"/> + <x-twitter :user="user" v-if="!user.host && user.twitter"/> + <x-github :user="user" v-if="!user.host && user.github"/> <mk-calendar @chosen="warp" :start="new Date(user.createdAt)"/> <mk-activity :user="user"/> <x-photos :user="user"/> <x-friends :user="user"/> <x-followers-you-know v-if="$store.getters.isSignedIn && $store.state.i.id != user.id" :user="user"/> <div class="nav"><mk-nav/></div> - <p v-if="user.host === null">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> + <p v-if="!user.host">%i18n:@last-used-at%: <b><mk-time :time="user.lastUsedAt"/></b></p> </div> </main> </div> @@ -37,6 +38,7 @@ import XPhotos from './user.photos.vue'; import XFollowersYouKnow from './user.followers-you-know.vue'; import XFriends from './user.friends.vue'; import XTwitter from './user.twitter.vue'; +import XGithub from './user.github.vue'; // ?MEM: Don't fix the intentional typo. (XGitHub -> `<x-git-hub>`) export default Vue.extend({ components: { @@ -46,7 +48,8 @@ export default Vue.extend({ XPhotos, XFollowersYouKnow, XFriends, - XTwitter + XTwitter, + XGithub // ?MEM: Don't fix the intentional typo. (see L41) }, data() { return { diff --git a/src/client/app/mobile/views/pages/settings.vue b/src/client/app/mobile/views/pages/settings.vue index 4512e9b2c2..10d13423a1 100644 --- a/src/client/app/mobile/views/pages/settings.vue +++ b/src/client/app/mobile/views/pages/settings.vue @@ -125,6 +125,19 @@ </section> </ui-card> + <ui-card> + <div slot="title">%fa:B github% %i18n:@github%</div> + + <section> + <p class="account" v-if="$store.state.i.github"><a :href="`https://github.com/${$store.state.i.github.login}`" target="_blank">@{{ $store.state.i.github.login }}</a></p> + <p> + <a :href="`${apiUrl}/connect/github`" target="_blank">{{ $store.state.i.github ? '%i18n:@github-reconnect%' : '%i18n:@github-connect%' }}</a> + <span v-if="$store.state.i.github"> or </span> + <a :href="`${apiUrl}/disconnect/github`" target="_blank" v-if="$store.state.i.github">%i18n:@github-disconnect%</a> + </p> + </section> + </ui-card> + <mk-api-settings /> <ui-card> |