|
|
|
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);
|