Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoeland Jago Douma <roeland@famdouma.nl>2018-06-14 21:09:06 +0300
committerRoeland Jago Douma <roeland@famdouma.nl>2018-06-19 12:42:41 +0300
commit1ff3f578980a29aee8d952e4cd7df786e955acd7 (patch)
treeb3380cf8998281e852652256b6b1a18cb80bf0e1 /apps/oauth2/src
parent27259ea2a21cf0227be12bc9bfc2c997bc6ee44f (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.vue113
-rw-r--r--apps/oauth2/src/components/OAuthItem.vue66
-rw-r--r--apps/oauth2/src/main.js35
-rw-r--r--apps/oauth2/src/webpack.common.js28
-rw-r--r--apps/oauth2/src/webpack.dev.js12
-rw-r--r--apps/oauth2/src/webpack.prod.js7
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">&nbsp;</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'
+})