more on oauth

This commit is contained in:
les 2020-01-21 17:33:33 +01:00
parent 3269857f7b
commit 019ca8022e
7 changed files with 55 additions and 22 deletions

View file

@ -25,7 +25,7 @@ POST
#### Request parameters
| 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!|
| website | `string` | A URL to the homepage of your app |
@ -33,7 +33,7 @@ POST
```bash
curl -X POST \
-d 'client_name=Wordpress Event Manager' \
-d 'redirect_uri=https://noblogs.org/' \
-d 'redirect_uris=https://noblogs.org/' \
-d 'website=https://myapp.example' \
http://localhost:13120/api/client
```
@ -47,7 +47,7 @@ Application, with `client_id` and `client_secret`
"scopes" : "write",
"website" : "https://myapp.example",
"client_secret" : "909029fa12797e6bdfb5baf5e379675dfa4e3ad4",
"redirect_uri" : "https://noblogs.org",
"redirect_uris" : "https://noblogs.org",
"client_id" : "0f377e34b2aaf517f7db534f32d26b0dd938fb6d"
}
```

View file

@ -1,7 +1,9 @@
<template lang='pug'>
el-container#modal
el-header
el-row(:gutter='20')
el-col(:span='12' :offset='6')
.row.p-0.m-0
.col.p-0
.col-xl-5.col-lg-6.col-sm-10.col-xs-12.col-md-7.p-0
nuxt
.col.p-0
</template>

View file

@ -199,5 +199,12 @@
"5": "quinto",
"-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"
}
}
}

View file

@ -1,18 +1,21 @@
<template lang='pug'>
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
h5 <u>{{$auth.user.email}}</u>
p External application <code>{{client.name}}</code> want following permission grants:
p(v-html="$t('oauth.authorization_request', { app: client.name, instance_name: settings.title })")
ul
li(v-for="s in scope.split(' ')") {{s}}
span(v-if='redirect_uri!=="urn:ietf:wg:oauth:2.0:oob"') You will be redirected to <code>{{$route.query.redirect_uri}}</code>
el-row.mt-3(justify='center')
el-col(:span='12' :offset='6' style='text-align: center')
a(:href='authorizeURL')
el-button.mr-1(plain type='success') {{$t('common.authorize')}}
a(href='/')
el-button.mt-1(plain type='warning') {{$t('common.cancel')}}
li(v-for="s in scope.split(' ')") {{$t(`oauth.scopes.${scope}`)}}
span(v-html="$t('oauth.redirected_to', {url: $route.query.redirect_uri})")
br
br
a(:href='authorizeURL')
el-button.mr-1(plain type='success') {{$t('common.authorize')}}
a(href='/')
el-button.mt-1(plain type='warning') {{$t('common.cancel')}}
</template>
<script>
@ -31,7 +34,7 @@ export default {
if (!redirect_uri) {
err = 'redirect_uri is missing'
}
if (!scope || scope !== 'write') {
if (!scope || scope !== 'event:write') {
err = 'scope is missing or wrong'
}
if (!response_type || response_type !== 'code') {
@ -70,3 +73,11 @@ export default {
}
}
</script>
<style lang='less'>
h4 img {
max-height: 40px;
border-radius: 20px;
background-color: #333;
border: 1px solid #333;
}
</style>

View file

@ -66,8 +66,6 @@ export default {
try {
this.loading = true
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
Message({ message: this.$t('login.ok'), showClose: true, type: 'success' })
this.close()

View file

@ -21,7 +21,7 @@ const oauthController = {
async createClient (req, res) {
debug('Create client ', req.body.client_name)
// 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' })
}
@ -29,7 +29,7 @@ const oauthController = {
id: await randomString(256),
name: req.body.client_name,
redirectUris: req.body.redirect_uris,
scopes: req.body.scopes || 'write',
scopes: req.body.scopes || 'event:write',
website: req.body.website,
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) {
const tokens = await OAuthToken.findAll({
include: [{ model: User, where: { id: req.user.id } }, { model: OAuthClient, as: 'client' }],

View file

@ -95,6 +95,7 @@ api.delete('/resources/:resource_id', isAdmin, resourceController.remove)
api.get('/resources', isAdmin, resourceController.getAll)
api.get('/clients', isAuth, oauthController.getClients)
api.get('/client/:client_id', isAuth, oauthController.getClient)
api.post('/client', oauthController.createClient)
// api.get('/verify', oauth.oauthServer.authenticate(), (req, res) => {