You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
import { upsertApiKey, validateGrafanaUrl } from '../services/api_keys'; |
|
|
|
import * as express from 'express' |
|
|
|
import * as _ from 'lodash'; |
|
|
|
|
|
async function checkConnection(req, res) { |
|
const query = req.query; |
|
|
|
const clientUrl = query.url; |
|
if (_.isEmpty(clientUrl)) { |
|
res.status(400).send('"url" field is required'); |
|
return; |
|
} |
|
|
|
try { |
|
validateGrafanaUrl(clientUrl); |
|
} catch (e) { |
|
res.status(500).send(e.message); |
|
return; |
|
} |
|
|
|
res.status(200).send({ version: process.env.npm_package_version }); |
|
} |
|
|
|
async function connectPlugin(req, res) { |
|
const body = req.body; |
|
|
|
const clientUrl = body.url; |
|
if (_.isEmpty(clientUrl)) { |
|
res.status(400).send('"url" field is required'); |
|
return; |
|
} |
|
const apiToken = body.apiToken; |
|
if (_.isEmpty(apiToken)) { |
|
res.status(400).send('"apiToken" field is required'); |
|
return; |
|
} |
|
|
|
const grafanaUrl = new URL(clientUrl).origin; |
|
|
|
upsertApiKey(grafanaUrl, apiToken); |
|
|
|
console.log(`Grafana at ${grafanaUrl} is connected`); |
|
|
|
res.status(200).send({ version: process.env.npm_package_version }); |
|
} |
|
|
|
export const router = express.Router(); |
|
|
|
router.get('/', checkConnection); |
|
router.post('/', connectPlugin);
|
|
|