mirror of https://git.48k.eu/ogserver
parent
c0f5d2c206
commit
866b6c5e37
|
@ -3,6 +3,7 @@ sbin_PROGRAMS = ogserver
|
|||
AM_CFLAGS = ${LIBDBI_CFLAGS} ${LIBJANSSON_CFLAGS} ${LIBEVENT_CFLAGS} -g -Wall
|
||||
|
||||
ogserver_SOURCES= sources/ogAdmServer.c \
|
||||
sources/cfg.c \
|
||||
sources/core.c \
|
||||
sources/dbi.c \
|
||||
sources/main.c \
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"rest" : {
|
||||
"ip" : "127.0.0.1",
|
||||
"port" : "8888",
|
||||
"api_token": "5a5ca1172136299640a9f47469237e0a"
|
||||
},
|
||||
"database" : {
|
||||
"name" : "opengnsys",
|
||||
"user" : "mysql",
|
||||
"pass" : "mysql"
|
||||
},
|
||||
"wol" : {
|
||||
"interface" : "lo"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,165 @@
|
|||
/*
|
||||
* Copyright (C) 2020 Soleta Networks <info@soleta.eu>
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the
|
||||
* Free Software Foundation, version 3.
|
||||
*/
|
||||
|
||||
#include "json.h"
|
||||
#include "cfg.h"
|
||||
#include "ogAdmServer.h"
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <syslog.h>
|
||||
|
||||
static int parse_json_rest(struct og_server_cfg *cfg, json_t *element)
|
||||
{
|
||||
const char *key;
|
||||
json_t *value;
|
||||
|
||||
json_object_foreach(element, key, value) {
|
||||
if (!strcmp(key, "ip")) {
|
||||
if (og_json_parse_string(value, &cfg->rest.ip) < 0)
|
||||
return -1;
|
||||
} else if (!strcmp(key, "port")) {
|
||||
if (og_json_parse_string(value, &cfg->rest.port) < 0)
|
||||
return -1;
|
||||
} else if (!strcmp(key, "api_token")) {
|
||||
if (og_json_parse_string(value, &cfg->rest.api_token) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
syslog(LOG_ERR, "unknown key `%s' in rest\n", key);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_json_db(struct og_server_cfg *cfg, json_t *element)
|
||||
{
|
||||
const char *key;
|
||||
json_t *value;
|
||||
|
||||
json_object_foreach(element, key, value) {
|
||||
if (!strcmp(key, "ip")) {
|
||||
if (og_json_parse_string(value, &cfg->db.ip) < 0)
|
||||
return -1;
|
||||
} else if (!strcmp(key, "user")) {
|
||||
if (og_json_parse_string(value, &cfg->db.user) < 0)
|
||||
return -1;
|
||||
} else if (!strcmp(key, "pass")) {
|
||||
if (og_json_parse_string(value, &cfg->db.pass) < 0)
|
||||
return -1;
|
||||
} else if (!strcmp(key, "name")) {
|
||||
if (og_json_parse_string(value, &cfg->db.name) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
syslog(LOG_ERR, "unknown key `%s' in db\n", key);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int parse_json_wol(struct og_server_cfg *cfg, json_t *element)
|
||||
{
|
||||
const char *key;
|
||||
json_t *value;
|
||||
|
||||
json_object_foreach(element, key, value) {
|
||||
if (!strcmp(key, "interface")) {
|
||||
if (og_json_parse_string(value, &cfg->wol.interface) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
syslog(LOG_ERR, "unknown key `%s' in wol\n", key);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define OG_SERVER_CFG_REST (1 << 0)
|
||||
#define OG_SERVER_CFG_DB (1 << 1)
|
||||
#define OG_SERVER_CFG_WOL (1 << 2)
|
||||
|
||||
int parse_json_config(const char *filename, struct og_server_cfg *cfg)
|
||||
{
|
||||
json_t *root, *value;
|
||||
uint32_t flags = 0;
|
||||
json_error_t err;
|
||||
const char *key;
|
||||
char buf[4096];
|
||||
int fd, ret;
|
||||
|
||||
fd = open(filename, O_RDONLY);
|
||||
if (!fd) {
|
||||
syslog(LOG_ERR, "Cannot open %s", filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = read(fd, buf, sizeof(buf));
|
||||
if (ret < 0 || ret == sizeof(buf)) {
|
||||
syslog(LOG_ERR, "Cannot read from %s", filename);
|
||||
return -1;
|
||||
}
|
||||
|
||||
root = json_loads(buf, 0, &err);
|
||||
if (!root) {
|
||||
syslog(LOG_ERR, "Cannot parse malformed json file");
|
||||
return -1;
|
||||
}
|
||||
|
||||
json_object_foreach(root, key, value) {
|
||||
if (!strcmp(key, "rest")) {
|
||||
if (parse_json_rest(cfg, value) < 0)
|
||||
return -1;
|
||||
|
||||
flags |= OG_SERVER_CFG_REST;
|
||||
} else if (!strcmp(key, "wol")) {
|
||||
if (parse_json_wol(cfg, value) < 0)
|
||||
return -1;
|
||||
|
||||
flags |= OG_SERVER_CFG_WOL;
|
||||
} else if (!strcmp(key, "database")) {
|
||||
if (parse_json_db(cfg, value) < 0)
|
||||
return -1;
|
||||
|
||||
flags |= OG_SERVER_CFG_DB;
|
||||
} else {
|
||||
syslog(LOG_ERR, "unknown key `%s' in %s\n",
|
||||
key, filename);
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
|
||||
if ((flags & OG_SERVER_CFG_REST) &&
|
||||
(flags & OG_SERVER_CFG_DB) &&
|
||||
(flags & OG_SERVER_CFG_WOL)) {
|
||||
ret = 0;
|
||||
} else {
|
||||
syslog(LOG_ERR, "Missing attributes in json file");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
json_decref(root);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void from_json_to_legacy(struct og_server_cfg *cfg)
|
||||
{
|
||||
snprintf(servidoradm, sizeof(servidoradm), cfg->rest.ip);
|
||||
snprintf(puerto, sizeof(puerto), cfg->rest.port);
|
||||
snprintf(usuario, sizeof(usuario), cfg->db.user);
|
||||
snprintf(pasguor, sizeof(pasguor), cfg->db.pass);
|
||||
snprintf(datasource, sizeof(datasource), cfg->db.ip);
|
||||
snprintf(catalog, sizeof(catalog), cfg->db.name);
|
||||
snprintf(interface, sizeof(interface), cfg->wol.interface);
|
||||
snprintf(auth_token, sizeof(auth_token), cfg->rest.api_token);
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
#ifndef _OG_SERVER_CFG_H
|
||||
#define _OG_SERVER_CFG_H
|
||||
|
||||
struct og_server_cfg {
|
||||
struct {
|
||||
const char *user;
|
||||
const char *pass;
|
||||
const char *ip;
|
||||
const char *name;
|
||||
} db;
|
||||
struct {
|
||||
const char *ip;
|
||||
const char *port;
|
||||
const char *api_token;
|
||||
} rest;
|
||||
struct {
|
||||
const char *interface;
|
||||
} wol;
|
||||
};
|
||||
|
||||
int parse_json_config(const char *filename, struct og_server_cfg *cfg);
|
||||
|
||||
extern char auth_token[4096];
|
||||
extern char usuario[4096];
|
||||
extern char pasguor[4096];
|
||||
extern char catalog[4096];
|
||||
extern char datasource[4096];
|
||||
extern char interface[4096];
|
||||
extern char api_token[4096];
|
||||
|
||||
void from_json_to_legacy(struct og_server_cfg *cfg);
|
||||
|
||||
#endif
|
|
@ -15,11 +15,15 @@
|
|||
#include "json.h"
|
||||
#include "schedule.h"
|
||||
#include "core.h"
|
||||
#include "cfg.h"
|
||||
#include <syslog.h>
|
||||
|
||||
#define OG_SERVER_CFG_DATABASE "/opt/opengnsys/cfg/ogserver.json"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
struct ev_io ev_io_server_rest, ev_io_agent_rest;
|
||||
struct og_server_cfg cfg = {};
|
||||
int i;
|
||||
|
||||
og_loop = ev_default_loop(0);
|
||||
|
@ -32,8 +36,12 @@ int main(int argc, char *argv[])
|
|||
if (!validacionParametros(argc, argv, 1)) // Valida parámetros de ejecución
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
if (!tomaConfiguracion(szPathFileCfg)) { // Toma parametros de configuracion
|
||||
exit(EXIT_FAILURE);
|
||||
if (!tomaConfiguracion(szPathFileCfg)) {
|
||||
syslog(LOG_INFO, "falling back to %s\n", OG_SERVER_CFG_DATABASE);
|
||||
if (parse_json_config(OG_SERVER_CFG_DATABASE, &cfg) < 0)
|
||||
exit(EXIT_FAILURE);
|
||||
|
||||
from_json_to_legacy(&cfg);
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXIMOS_CLIENTES; i++) {
|
||||
|
|
|
@ -23,11 +23,11 @@
|
|||
#include <jansson.h>
|
||||
#include <time.h>
|
||||
|
||||
static char usuario[LONPRM]; // Usuario de acceso a la base de datos
|
||||
static char pasguor[LONPRM]; // Password del usuario
|
||||
static char datasource[LONPRM]; // Dirección IP del gestor de base de datos
|
||||
static char catalog[LONPRM]; // Nombre de la base de datos
|
||||
static char interface[LONPRM]; // Interface name
|
||||
char usuario[LONPRM]; // Usuario de acceso a la base de datos
|
||||
char pasguor[LONPRM]; // Password del usuario
|
||||
char datasource[LONPRM]; // Dirección IP del gestor de base de datos
|
||||
char catalog[LONPRM]; // Nombre de la base de datos
|
||||
char interface[LONPRM]; // Interface name
|
||||
char auth_token[LONPRM]; // API token
|
||||
|
||||
struct og_dbi_config dbi_config = {
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "utils.h"
|
||||
#include "list.h"
|
||||
#include "rest.h"
|
||||
#include "cfg.h"
|
||||
#include "schedule.h"
|
||||
#include <ev.h>
|
||||
#include <syslog.h>
|
||||
|
|
|
@ -94,6 +94,4 @@ struct og_cmd {
|
|||
const struct og_cmd *og_cmd_find(const char *client_ip);
|
||||
void og_cmd_free(const struct og_cmd *cmd);
|
||||
|
||||
extern char auth_token[LONPRM];
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue