Skip to content
Snippets Groups Projects
Commit 207dcb4f authored by Bastien DUMONT's avatar Bastien DUMONT
Browse files

chore: bump manifest to 1.0.5

parent 84e9bae8
No related branches found
No related tags found
No related merge requests found
{ {
"version": "1.0.4", "version": "1.0.5",
"name": "GRDF", "name": "GRDF",
"type": "konnector", "type": "konnector",
"language": "node", "language": "node",
......
const { cozyClient, log } = require("cozy-konnector-libs"); const { cozyClient, log } = require('cozy-konnector-libs')
const getAccountId = require("./helpers/getAccountId"); const getAccountId = require('./helpers/getAccountId')
const getAccountRev = require("./helpers/getAccountRev"); const getAccountRev = require('./helpers/getAccountRev')
const getAccountSecret = require("./helpers/getAccountSecret"); const getAccountSecret = require('./helpers/getAccountSecret')
const moment = require("moment"); const moment = require('moment')
require("moment-timezone"); require('moment-timezone')
moment.locale("fr"); // set the language moment.locale('fr') // set the language
moment.tz.setDefault("Europe/Paris"); // set the timezone moment.tz.setDefault('Europe/Paris') // set the timezone
async function onDeleteAccount(accountId) { async function onDeleteAccount(accountId) {
const accountRev = getAccountRev(); const accountRev = getAccountRev()
if (accountRev) { if (accountRev) {
try { try {
let body = ""; let body = ''
let access_token = ""; let access_token = ''
body = await cozyClient.fetchJSON( body = await cozyClient.fetchJSON(
"GET", 'GET',
`/data/io.cozy.accounts/${accountId}?rev=${accountRev}` `/data/io.cozy.accounts/${accountId}?rev=${accountRev}`
); )
if (body.oauth.access_token) { if (body.oauth.access_token) {
access_token = body.oauth.access_token; access_token = body.oauth.access_token
} else { } else {
throw new Error( throw new Error(
"cozyClient.fetchJson account_rev has encountered an error" 'cozyClient.fetchJson account_rev has encountered an error'
); )
} }
if (moment().diff(body.oauth.expires_at) > 0) { if (moment().diff(body.oauth.expires_at) > 0) {
// token is expired, need a new one. grdf does not provide a refresh token // token is expired, need a new one. grdf does not provide a refresh token
// so we request a new one from a client_credentials query // so we request a new one from a client_credentials query
// first we fetch credentials secrets from account-type // first we fetch credentials secrets from account-type
const accountSecret = getAccountSecret(); const accountSecret = getAccountSecret()
if (accountSecret) { if (accountSecret) {
var myTokenHeaders = new Headers(); var myTokenHeaders = new Headers()
myTokenHeaders.append( myTokenHeaders.append(
"Content-Type", 'Content-Type',
"application/x-www-form-urlencoded" 'application/x-www-form-urlencoded'
); )
var urlencoded = new URLSearchParams(); var urlencoded = new URLSearchParams()
urlencoded.append("grant_type", "client_credentials"); urlencoded.append('grant_type', 'client_credentials')
urlencoded.append("client_id", accountSecret.client_id); urlencoded.append('client_id', accountSecret.client_id)
urlencoded.append("client_secret", accountSecret.client_secret); urlencoded.append('client_secret', accountSecret.client_secret)
urlencoded.append("scope", "/adict/v1"); urlencoded.append('scope', '/adict/v1')
var requestOptionsToken = { var requestOptionsToken = {
method: "POST", method: 'POST',
headers: myTokenHeaders, headers: myTokenHeaders,
body: urlencoded, body: urlencoded,
redirect: "follow" redirect: 'follow'
}; }
access_token = await fetch( access_token = await fetch(
"https://sofit-sso-oidc.grdf.fr/openam/oauth2/realms/externeGrdf/access_token", 'https://sofit-sso-oidc.grdf.fr/openam/oauth2/realms/externeGrdf/access_token',
requestOptionsToken requestOptionsToken
) )
.then(async response => { .then(async response => {
if (response.status !== 200) { if (response.status !== 200) {
throw new Error(response.status + " - " + response.statusText); throw new Error(response.status + ' - ' + response.statusText)
} }
return response.text(); return response.text()
}) })
.then(result => { .then(result => {
return result.match(/.+/g).map(s => { return result.match(/.+/g).map(s => {
result = JSON.parse(s); result = JSON.parse(s)
if (result.access_token) { if (result.access_token) {
return result.access_token; return result.access_token
} }
}); })
}) })
.catch(error => { .catch(error => {
log("debug", "Error from get access_token [onDeleteAccount]"); log('debug', 'Error from get access_token [onDeleteAccount]')
throw error; throw error
}); })
} else { } else {
throw new Error( throw new Error(
"Access Token is expired and konnector failed to get a new one" 'Access Token is expired and konnector failed to get a new one'
); )
} }
} }
var myHeaders = new Headers(); var myHeaders = new Headers()
myHeaders.append("Content-Type", "application/json"); myHeaders.append('Content-Type', 'application/json')
myHeaders.append("Accept", "application/x-ndjson"); myHeaders.append('Accept', 'application/x-ndjson')
myHeaders.append("Authorization", "Bearer " + access_token); myHeaders.append('Authorization', 'Bearer ' + access_token)
var raw = JSON.stringify({ var raw = JSON.stringify({
role_tiers: ["AUTORISE_CONTRAT_FOURNITURE"], role_tiers: ['AUTORISE_CONTRAT_FOURNITURE'],
etat_droit_acces: ["Active"], etat_droit_acces: ['Active'],
id_pce: [body.oauth_callback_results.pce] id_pce: [body.oauth_callback_results.pce]
}); })
var requestOptions = { var requestOptions = {
method: "POST", method: 'POST',
headers: myHeaders, headers: myHeaders,
body: raw, body: raw,
redirect: "follow" redirect: 'follow'
}; }
let accessRights = await fetch( let accessRights = await fetch(
"https://api.grdf.fr/adict/v1/droits_acces", 'https://api.grdf.fr/adict/v1/droits_acces',
requestOptions requestOptions
) )
.then(async response => { .then(async response => {
if (response.status !== 200) { if (response.status !== 200) {
throw new Error(response.status + " - " + response.statusText); throw new Error(response.status + ' - ' + response.statusText)
} }
return response.text(); return response.text()
}) })
.then(result => { .then(result => {
return result.match(/.+/g).map(s => { return result.match(/.+/g).map(s => {
result = JSON.parse(s); result = JSON.parse(s)
if (result.id_droit_acces !== null) { if (result.id_droit_acces !== null) {
return result.id_droit_acces; return result.id_droit_acces
} }
}); })
}) })
.catch(error => { .catch(error => {
log("debug", "Error from get droits_access"); log('debug', 'Error from get droits_access')
throw error; throw error
}); })
// remove unwanted commas // remove unwanted commas
accessRights = accessRights.toString().replace(/,\s*$/, ""); accessRights = accessRights.toString().replace(/,\s*$/, '')
if (accessRights) { if (accessRights) {
var myDeleteHeaders = new Headers(); var myDeleteHeaders = new Headers()
myDeleteHeaders.append("Cache-Control", "no-cache"); myDeleteHeaders.append('Cache-Control', 'no-cache')
myDeleteHeaders.append("Content-Type", "application/json"); myDeleteHeaders.append('Content-Type', 'application/json')
myDeleteHeaders.append("Authorization", "Bearer " + access_token); myDeleteHeaders.append('Authorization', 'Bearer ' + access_token)
var deleteRaw = JSON.stringify({}); var deleteRaw = JSON.stringify({})
var deleteRequestOptions = { var deleteRequestOptions = {
method: "PATCH", method: 'PATCH',
headers: myDeleteHeaders, headers: myDeleteHeaders,
body: deleteRaw, body: deleteRaw,
redirect: "follow" redirect: 'follow'
}; }
var url = "https://api.grdf.fr/adict/v1/droit_acces/" + accessRights; var url = 'https://api.grdf.fr/adict/v1/droit_acces/' + accessRights
await fetch(url, deleteRequestOptions) await fetch(url, deleteRequestOptions)
.then(async response => { .then(async response => {
if (response.status !== 200) { if (response.status !== 200) {
throw new Error(response.status + " - " + response.statusText); throw new Error(response.status + ' - ' + response.statusText)
} }
return response.text(); return response.text()
}) })
.catch(error => { .catch(error => {
log("debug", "Error from delete droits_access"); log('debug', 'Error from delete droits_access')
throw error; throw error
}); })
log("debug", "Active consent was successfully removed"); log('debug', 'Active consent was successfully removed')
} else { } else {
log("debug", "No active consent"); log('debug', 'No active consent')
throw new Error("No active access right was found for given user"); throw new Error('No active access right was found for given user')
} }
} catch (err) { } catch (err) {
log( log(
"warn", 'warn',
`Error while trying to remove grdf consent (for ${accountRev}): ${err.message}` `Error while trying to remove grdf consent (for ${accountRev}): ${err.message}`
); )
} }
} else { } else {
throw new Error( throw new Error(
"No account revision was found, something went wrong during the deletion of said account" 'No account revision was found, something went wrong during the deletion of said account'
); )
} }
} }
const accountId = getAccountId(); const accountId = getAccountId()
onDeleteAccount(accountId).then( onDeleteAccount(accountId).then(
() => { () => {
log( log(
"info", 'info',
`onDeleteAccount: Successfully retrieved grdf account from account doctype.` `onDeleteAccount: Successfully retrieved grdf account from account doctype.`
); )
}, },
err => { err => {
log( log(
"error", 'error',
`onDeleteAccount: An error occured during getGrdfAccountInfos script: ${err.message}` `onDeleteAccount: An error occured during getGrdfAccountInfos script: ${err.message}`
); )
} }
); )
module.exports = { onDeleteAccount }; module.exports = { onDeleteAccount }
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment