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.
54 lines
1.2 KiB
54 lines
1.2 KiB
2 years ago
|
import { upsertApiKey, validateGrafanaUrl } from '../services/api_keys';
|
||
|
|
||
|
import * as express from 'express'
|
||
|
|
||
|
import * as _ from 'lodash';
|
||
|
|
||
|
|
||
|
async function checkConnection(req, res) {
|
||
|
const params = req.params;
|
||
|
|
||
|
const clientUrl = params.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);
|