diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2018-06-14 21:09:06 +0300 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2018-06-19 12:42:41 +0300 |
commit | 1ff3f578980a29aee8d952e4cd7df786e955acd7 (patch) | |
tree | b3380cf8998281e852652256b6b1a18cb80bf0e1 /apps/oauth2/src | |
parent | 27259ea2a21cf0227be12bc9bfc2c997bc6ee44f (diff) |
js-src => src
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
Diffstat (limited to 'apps/oauth2/src')
-rw-r--r-- | apps/oauth2/src/App.vue | 113 | ||||
-rw-r--r-- | apps/oauth2/src/components/OAuthItem.vue | 66 | ||||
-rw-r--r-- | apps/oauth2/src/main.js | 35 | ||||
-rw-r--r-- | apps/oauth2/src/webpack.common.js | 28 | ||||
-rw-r--r-- | apps/oauth2/src/webpack.dev.js | 12 | ||||
-rw-r--r-- | apps/oauth2/src/webpack.prod.js | 7 |
6 files changed, 261 insertions, 0 deletions
diff --git a/apps/oauth2/src/App.vue b/apps/oauth2/src/App.vue new file mode 100644 index 00000000000..6bbd90db525 --- /dev/null +++ b/apps/oauth2/src/App.vue @@ -0,0 +1,113 @@ +<!-- + - @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl> + - + - @author Roeland Jago Douma <roeland@famdouma.nl> + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> +<template> + <div id="oauth2" class="section"> + <h2>{{ t('oauth2', 'OAuth 2.0 clients') }}</h2> + <p class="settings-hint">{{ t('oauth2', 'OAuth 2.0 allows external services to request access to {instanceName}.', { instanceName: oc_defaults.name}) }}</p> + <table class="grid"> + <thead> + <tr> + <th id="headerName" scope="col">{{ t('oauth2', 'Name') }}</th> + <th id="headerRedirectUri" scope="col">{{ t('oauth2', 'Redirection URI') }}</th> + <th id="headerClientIdentifier" scope="col">{{ t('oauth2', 'Client Identifier') }}</th> + <th id="headerSecret" scope="col">{{ t('oauth2', 'Secret') }}</th> + <th id="headerRemove"> </th> + </tr> + </thead> + <tbody> + <OAuthItem v-for="client in clients" + :key="client.id" + :client="client" + @delete="deleteClient" + /> + </tbody> + </table> + + <br/> + <h3>{{ t('oauth2', 'Add client') }}</h3> + <form @submit.prevent="addClient"> + <input type="text" id="name" name="name" :placeholder="t('oauth2', 'Name')" v-model="newClient.name"> + <input type="url" id="redirectUri" name="redirectUri" :placeholder="t('oauth2', 'Redirection URI')" v-model="newClient.redirctUri"> + <input type="submit" class="button" :value="t('oauth2', 'Add')"> + </form> + </div> +</template> + +<script> +import axios from 'axios'; +import OAuthItem from './components/OAuthItem'; + +export default { + name: 'App', + components: { + OAuthItem + }, + data: function() { + return { + clients: [], + newClient: { + name: '', + redirctUri: '' + } + }; + }, + beforeMount: function() { + let requestToken = OC.requestToken; + let tokenHeaders = { headers: { requesttoken: requestToken } }; + + axios.get(OC.generateUrl('apps/oauth2/clients'), tokenHeaders) + .then((response) => { + this.clients = response.data; + }); + }, + methods: { + deleteClient(id) { + let requestToken = OC.requestToken; + let tokenHeaders = { headers: { requesttoken: requestToken } }; + + axios.delete(OC.generateUrl('apps/oauth2/clients/{id}', {id: id}), tokenHeaders) + .then((response) => { + this.clients = this.clients.filter(client => client.id !== id); + }); + }, + addClient() { + let requestToken = OC.requestToken; + let tokenHeaders = { headers: { requesttoken: requestToken } }; + + axios.post( + OC.generateUrl('apps/oauth2/clients'), + { + name: this.newClient.name, + redirectUri: this.newClient.redirctUri + }, + tokenHeaders) + .then((response) => { + this.clients.push(response.data) + + this.newClient.name = ''; + this.newClient.redirctUri = ''; + } + ); + } + }, +} +</script> diff --git a/apps/oauth2/src/components/OAuthItem.vue b/apps/oauth2/src/components/OAuthItem.vue new file mode 100644 index 00000000000..2ef10bfadf5 --- /dev/null +++ b/apps/oauth2/src/components/OAuthItem.vue @@ -0,0 +1,66 @@ +<!-- + - @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl> + - + - @author Roeland Jago Douma <roeland@famdouma.nl> + - + - @license GNU AGPL version 3 or any later version + - + - This program is free software: you can redistribute it and/or modify + - it under the terms of the GNU Affero General Public License as + - published by the Free Software Foundation, either version 3 of the + - License, or (at your option) any later version. + - + - This program is distributed in the hope that it will be useful, + - but WITHOUT ANY WARRANTY; without even the implied warranty of + - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + - GNU Affero General Public License for more details. + - + - You should have received a copy of the GNU Affero General Public License + - along with this program. If not, see <http://www.gnu.org/licenses/>. + - + --> +<template> + <tr> + <td>{{name}}</td> + <td>{{redirectUri}}</td> + <td><code>{{clientId}}</code></td> + <td><code>{{renderedSecret}}</code><a class='icon-toggle has-tooltip' :title="t('oauth2', 'Show client secret')" @click="toggleSecret"></a></td> + <td class="action-column"><span><a class="icon-delete has-tooltip" :title="t('oauth2', 'Delete')" @click="$emit('delete', id)"></a></span></td> + </tr> +</template> + +<script> +export default { + name: 'OAuthItem', + props: { + client: { + type: Object, + required: true + } + }, + data: function() { + return { + id: this.client.id, + name: this.client.name, + redirectUri: this.client.redirectUri, + clientId: this.client.clientId, + clientSecret: this.client.clientSecret, + renderSecret: false, + }; + }, + computed: { + renderedSecret: function() { + if (this.renderSecret) { + return this.clientSecret; + } else { + return '****'; + } + } + }, + methods: { + toggleSecret() { + this.renderSecret = !this.renderSecret; + } + } +} +</script> diff --git a/apps/oauth2/src/main.js b/apps/oauth2/src/main.js new file mode 100644 index 00000000000..ff68f48593d --- /dev/null +++ b/apps/oauth2/src/main.js @@ -0,0 +1,35 @@ +/** + * @copyright Copyright (c) 2018 Roeland Jago Douma <roeland@famdouma.nl> + * + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + */ + +import Vue from 'vue'; +import App from './App.vue'; + +Vue.prototype.t = t; +Vue.prototype.oc_defaults = oc_defaults; +Vue.prototype.OC = OC; + +const app = new Vue({ + render: h => h(App) +}).$mount('#oauth2'); + +export { app }; + diff --git a/apps/oauth2/src/webpack.common.js b/apps/oauth2/src/webpack.common.js new file mode 100644 index 00000000000..72bce3b287d --- /dev/null +++ b/apps/oauth2/src/webpack.common.js @@ -0,0 +1,28 @@ +const path = require('path') +const { VueLoaderPlugin } = require('vue-loader'); + +module.exports = { + entry: path.join(__dirname, 'main.js'), + output: { + path: path.resolve(__dirname, '../js'), + publicPath: '/js', + filename: 'oauth2.js' + }, + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + } + ] + }, + plugins: [ + new VueLoaderPlugin() + ], + resolve: { + alias: { + 'vue$': 'vue/dist/vue.esm.js' + }, + extensions: ['*', '.js', '.vue', '.json'] + } +} diff --git a/apps/oauth2/src/webpack.dev.js b/apps/oauth2/src/webpack.dev.js new file mode 100644 index 00000000000..88409bbb1d8 --- /dev/null +++ b/apps/oauth2/src/webpack.dev.js @@ -0,0 +1,12 @@ +const merge = require('webpack-merge'); +const common = require('./webpack.common.js'); + +module.exports = merge(common, { + mode: 'development', + devServer: { + historyApiFallback: true, + noInfo: true, + overlay: true + }, + devtool: '#eval-source-map', +}) diff --git a/apps/oauth2/src/webpack.prod.js b/apps/oauth2/src/webpack.prod.js new file mode 100644 index 00000000000..f081567bd63 --- /dev/null +++ b/apps/oauth2/src/webpack.prod.js @@ -0,0 +1,7 @@ +const merge = require('webpack-merge') +const common = require('./webpack.common.js') + +module.exports = merge(common, { + mode: 'production', + devtool: '#source-map' +}) |