mirror of
https://framagit.org/les/gancio.git
synced 2025-01-31 16:42:22 +01:00
more on oauth
This commit is contained in:
parent
3269857f7b
commit
019ca8022e
7 changed files with 55 additions and 22 deletions
|
@ -25,7 +25,7 @@ POST
|
||||||
#### Request parameters
|
#### Request parameters
|
||||||
|
|
||||||
| client_name | `string` | A name for your application |
|
| client_name | `string` | A name for your application |
|
||||||
| redirect_uri | `string` | Where the user should be redirected after authorization |
|
| redirect_uris | `string` | Where the user should be redirected after authorization |
|
||||||
| scopes | `string` | Space separated list of scopes. If none is provided, defaults to `write` as it's the only supported scope!|
|
| scopes | `string` | Space separated list of scopes. If none is provided, defaults to `write` as it's the only supported scope!|
|
||||||
| website | `string` | A URL to the homepage of your app |
|
| website | `string` | A URL to the homepage of your app |
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ POST
|
||||||
```bash
|
```bash
|
||||||
curl -X POST \
|
curl -X POST \
|
||||||
-d 'client_name=Wordpress Event Manager' \
|
-d 'client_name=Wordpress Event Manager' \
|
||||||
-d 'redirect_uri=https://noblogs.org/' \
|
-d 'redirect_uris=https://noblogs.org/' \
|
||||||
-d 'website=https://myapp.example' \
|
-d 'website=https://myapp.example' \
|
||||||
http://localhost:13120/api/client
|
http://localhost:13120/api/client
|
||||||
```
|
```
|
||||||
|
@ -47,7 +47,7 @@ Application, with `client_id` and `client_secret`
|
||||||
"scopes" : "write",
|
"scopes" : "write",
|
||||||
"website" : "https://myapp.example",
|
"website" : "https://myapp.example",
|
||||||
"client_secret" : "909029fa12797e6bdfb5baf5e379675dfa4e3ad4",
|
"client_secret" : "909029fa12797e6bdfb5baf5e379675dfa4e3ad4",
|
||||||
"redirect_uri" : "https://noblogs.org",
|
"redirect_uris" : "https://noblogs.org",
|
||||||
"client_id" : "0f377e34b2aaf517f7db534f32d26b0dd938fb6d"
|
"client_id" : "0f377e34b2aaf517f7db534f32d26b0dd938fb6d"
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<template lang='pug'>
|
<template lang='pug'>
|
||||||
el-container#modal
|
el-container#modal
|
||||||
el-header
|
el-header
|
||||||
el-row(:gutter='20')
|
.row.p-0.m-0
|
||||||
el-col(:span='12' :offset='6')
|
.col.p-0
|
||||||
|
.col-xl-5.col-lg-6.col-sm-10.col-xs-12.col-md-7.p-0
|
||||||
nuxt
|
nuxt
|
||||||
|
.col.p-0
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -199,5 +199,12 @@
|
||||||
"5": "quinto",
|
"5": "quinto",
|
||||||
"-1": "ultimo"
|
"-1": "ultimo"
|
||||||
},
|
},
|
||||||
"about": "\n <p>\n <a href='https://gancio.org'>Gancio</a> e' un progetto dell'<a href='https://autistici.org/underscore'>underscore hacklab</a> e uno dei\n servizi di <a href='https://cisti.org'>cisti.org</a>.</p>\n\n <h5> Cos'è gancio?</h5>\n <p>Uno strumento di condivisione di eventi per comunità radicali.\n Dentro gancio puoi trovare e inserire eventi.\n Gancio, come tutto <a href='https://cisti.org'>cisti.org</a> è uno strumento\n antisessista, antirazzista, antifascista e anticapitalista, riflettici quando\n pubblichi un evento.</p>\n \n <h5>Ok, ma cosa vuol dire gancio?</h5>\n <p>\n Se vieni a Torino e dici: \"ehi, ci diamo un gancio alle 8?\" nessuno si presenterà con i guantoni per fare a mazzate.\n Darsi un gancio vuol dire beccarsi alle ore X in un posto Y.</p>\n <code>\n <ul>\n <li> a che ora è il gancio in radio per andare al presidio?</li>\n <li> non so ma domani non posso venire, ho gia' un gancio per caricare il bar.</li>\n </ul>\n </code>\n\n <h5> Contatti</h5>\n <p>\n Hai scritto una nuova interfaccia per gancio? Vuoi aprire un nuovo nodo di gancio nella tua città?\n C'è qualcosa che vorresti migliorare? Per contribuire i sorgenti sono liberi e disponibili \n <a href='https://framagit.org/les/gancio'>qui</a>. Aiuti e suggerimenti sono sempre benvenuti, puoi scriverci\n su underscore chicciola autistici.org</p>\n "
|
"about": "\n <p>\n <a href='https://gancio.org'>Gancio</a> e' un progetto dell'<a href='https://autistici.org/underscore'>underscore hacklab</a> e uno dei\n servizi di <a href='https://cisti.org'>cisti.org</a>.</p>\n\n <h5> Cos'è gancio?</h5>\n <p>Uno strumento di condivisione di eventi per comunità radicali.\n Dentro gancio puoi trovare e inserire eventi.\n Gancio, come tutto <a href='https://cisti.org'>cisti.org</a> è uno strumento\n antisessista, antirazzista, antifascista e anticapitalista, riflettici quando\n pubblichi un evento.</p>\n \n <h5>Ok, ma cosa vuol dire gancio?</h5>\n <p>\n Se vieni a Torino e dici: \"ehi, ci diamo un gancio alle 8?\" nessuno si presenterà con i guantoni per fare a mazzate.\n Darsi un gancio vuol dire beccarsi alle ore X in un posto Y.</p>\n <code>\n <ul>\n <li> a che ora è il gancio in radio per andare al presidio?</li>\n <li> non so ma domani non posso venire, ho gia' un gancio per caricare il bar.</li>\n </ul>\n </code>\n\n <h5> Contatti</h5>\n <p>\n Hai scritto una nuova interfaccia per gancio? Vuoi aprire un nuovo nodo di gancio nella tua città?\n C'è qualcosa che vorresti migliorare? Per contribuire i sorgenti sono liberi e disponibili \n <a href='https://framagit.org/les/gancio'>qui</a>. Aiuti e suggerimenti sono sempre benvenuti, puoi scriverci\n su underscore chicciola autistici.org</p>\n ",
|
||||||
|
"oauth": {
|
||||||
|
"authorization_request": "L'applicazione esterna <code>{app}</code> richiede l'autorizzazione a svolgere le sequenti attività su <code>{instance_name}</code>:",
|
||||||
|
"redirected_to": "Dopo la conferma sarai reindirizzata all'indirizzo <code>{url}</code>",
|
||||||
|
"scopes": {
|
||||||
|
"event:write": "Pubblicare/modificare i tuoi eventi"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,18 +1,21 @@
|
||||||
<template lang='pug'>
|
<template lang='pug'>
|
||||||
el-card.mt-5
|
el-card.mt-5
|
||||||
h4(slot='header') <nuxt-link :to='"/"'><img src='/favicon.ico'/></nuxt-link> {{settings.title}} - {{$t('common.authorize')}}
|
h4(slot='header')
|
||||||
|
nuxt-link(to='/')
|
||||||
|
img(src='/favicon.ico')
|
||||||
|
span {{settings.title}} - {{$t('common.authorize')}}
|
||||||
|
<u>{{$auth.user.email}}</u>
|
||||||
div
|
div
|
||||||
h5 <u>{{$auth.user.email}}</u>
|
p(v-html="$t('oauth.authorization_request', { app: client.name, instance_name: settings.title })")
|
||||||
p External application <code>{{client.name}}</code> want following permission grants:
|
|
||||||
ul
|
ul
|
||||||
li(v-for="s in scope.split(' ')") {{s}}
|
li(v-for="s in scope.split(' ')") {{$t(`oauth.scopes.${scope}`)}}
|
||||||
span(v-if='redirect_uri!=="urn:ietf:wg:oauth:2.0:oob"') You will be redirected to <code>{{$route.query.redirect_uri}}</code>
|
span(v-html="$t('oauth.redirected_to', {url: $route.query.redirect_uri})")
|
||||||
el-row.mt-3(justify='center')
|
br
|
||||||
el-col(:span='12' :offset='6' style='text-align: center')
|
br
|
||||||
a(:href='authorizeURL')
|
a(:href='authorizeURL')
|
||||||
el-button.mr-1(plain type='success') {{$t('common.authorize')}}
|
el-button.mr-1(plain type='success') {{$t('common.authorize')}}
|
||||||
a(href='/')
|
a(href='/')
|
||||||
el-button.mt-1(plain type='warning') {{$t('common.cancel')}}
|
el-button.mt-1(plain type='warning') {{$t('common.cancel')}}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
@ -31,7 +34,7 @@ export default {
|
||||||
if (!redirect_uri) {
|
if (!redirect_uri) {
|
||||||
err = 'redirect_uri is missing'
|
err = 'redirect_uri is missing'
|
||||||
}
|
}
|
||||||
if (!scope || scope !== 'write') {
|
if (!scope || scope !== 'event:write') {
|
||||||
err = 'scope is missing or wrong'
|
err = 'scope is missing or wrong'
|
||||||
}
|
}
|
||||||
if (!response_type || response_type !== 'code') {
|
if (!response_type || response_type !== 'code') {
|
||||||
|
@ -70,3 +73,11 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
<style lang='less'>
|
||||||
|
h4 img {
|
||||||
|
max-height: 40px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-color: #333;
|
||||||
|
border: 1px solid #333;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
@ -66,8 +66,6 @@ export default {
|
||||||
try {
|
try {
|
||||||
this.loading = true
|
this.loading = true
|
||||||
await this.$auth.loginWith('local', { data: { email: this.email, password: this.password } })
|
await this.$auth.loginWith('local', { data: { email: this.email, password: this.password } })
|
||||||
// const user = await this.$axios.$get('/auth/user')
|
|
||||||
// this.$auth.setUser(user)
|
|
||||||
this.loading = false
|
this.loading = false
|
||||||
Message({ message: this.$t('login.ok'), showClose: true, type: 'success' })
|
Message({ message: this.$t('login.ok'), showClose: true, type: 'success' })
|
||||||
this.close()
|
this.close()
|
||||||
|
|
|
@ -21,7 +21,7 @@ const oauthController = {
|
||||||
async createClient (req, res) {
|
async createClient (req, res) {
|
||||||
debug('Create client ', req.body.client_name)
|
debug('Create client ', req.body.client_name)
|
||||||
// only write scope is supported
|
// only write scope is supported
|
||||||
if (req.body.scopes && req.body.scopes !== 'write') {
|
if (req.body.scopes && req.body.scopes !== 'event:write') {
|
||||||
return res.status(422).json({ error: 'Invalid scopes' })
|
return res.status(422).json({ error: 'Invalid scopes' })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ const oauthController = {
|
||||||
id: await randomString(256),
|
id: await randomString(256),
|
||||||
name: req.body.client_name,
|
name: req.body.client_name,
|
||||||
redirectUris: req.body.redirect_uris,
|
redirectUris: req.body.redirect_uris,
|
||||||
scopes: req.body.scopes || 'write',
|
scopes: req.body.scopes || 'event:write',
|
||||||
website: req.body.website,
|
website: req.body.website,
|
||||||
client_secret: await randomString(256)
|
client_secret: await randomString(256)
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,20 @@ const oauthController = {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async getClient (req, res) {
|
||||||
|
const client = await OAuthClient.findByPk(req.params.client_id, { raw: true })
|
||||||
|
if (!client) {
|
||||||
|
return res.status(404).send('Not found!')
|
||||||
|
}
|
||||||
|
res.json({
|
||||||
|
client_id: client.id,
|
||||||
|
redirect_uris: client.redirectUris,
|
||||||
|
name: client.name,
|
||||||
|
website: client.website,
|
||||||
|
scopes: client.scopes
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
async getClients (req, res) {
|
async getClients (req, res) {
|
||||||
const tokens = await OAuthToken.findAll({
|
const tokens = await OAuthToken.findAll({
|
||||||
include: [{ model: User, where: { id: req.user.id } }, { model: OAuthClient, as: 'client' }],
|
include: [{ model: User, where: { id: req.user.id } }, { model: OAuthClient, as: 'client' }],
|
||||||
|
|
|
@ -95,6 +95,7 @@ api.delete('/resources/:resource_id', isAdmin, resourceController.remove)
|
||||||
api.get('/resources', isAdmin, resourceController.getAll)
|
api.get('/resources', isAdmin, resourceController.getAll)
|
||||||
|
|
||||||
api.get('/clients', isAuth, oauthController.getClients)
|
api.get('/clients', isAuth, oauthController.getClients)
|
||||||
|
api.get('/client/:client_id', isAuth, oauthController.getClient)
|
||||||
api.post('/client', oauthController.createClient)
|
api.post('/client', oauthController.createClient)
|
||||||
|
|
||||||
// api.get('/verify', oauth.oauthServer.authenticate(), (req, res) => {
|
// api.get('/verify', oauth.oauthServer.authenticate(), (req, res) => {
|
||||||
|
|
Loading…
Reference in a new issue