mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralsec.git
synced 2025-10-29 09:52:29 +00:00
Refactoring namespace for OpenWifi.
This commit is contained in:
4
CLI.md
4
CLI.md
@@ -1,9 +1,9 @@
|
|||||||
# Security Service CLI Documentation
|
# Security Service CLI Documentation
|
||||||
|
|
||||||
## Before using the CLI
|
## Before using the CLI
|
||||||
You must set the environment variable `UCENTRALSEC`. You must specify the host and port for the security service. Here is an example
|
You must set the environment variable `OWSEC`. You must specify the host and port for the security service. Here is an example
|
||||||
```csh
|
```csh
|
||||||
export UCENTRALSEC=mysecurityservice,example.com:16001
|
export OWSEC=mysecurityservice,example.com:16001
|
||||||
```
|
```
|
||||||
Once set, you can start using the `CLI`.
|
Once set, you can start using the `CLI`.
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project(ucentralsec VERSION 2.1.0)
|
project(owsec VERSION 2.2.0)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ find_package(PostgreSQL REQUIRED)
|
|||||||
find_package(MySQL REQUIRED)
|
find_package(MySQL REQUIRED)
|
||||||
find_package(Poco REQUIRED COMPONENTS JSON Crypto JWT Net Util NetSSL Data DataSQLite DataPostgreSQL DataMySQL)
|
find_package(Poco REQUIRED COMPONENTS JSON Crypto JWT Net Util NetSSL Data DataSQLite DataPostgreSQL DataMySQL)
|
||||||
|
|
||||||
add_executable( ucentralsec
|
add_executable( owsec
|
||||||
build
|
build
|
||||||
src/Daemon.h src/Daemon.cpp
|
src/Daemon.h src/Daemon.cpp
|
||||||
src/MicroService.cpp src/MicroService.h
|
src/MicroService.cpp src/MicroService.h
|
||||||
@@ -76,11 +76,11 @@ add_executable( ucentralsec
|
|||||||
src/OpenWifiTypes.h )
|
src/OpenWifiTypes.h )
|
||||||
|
|
||||||
if(NOT SMALL_BUILD)
|
if(NOT SMALL_BUILD)
|
||||||
target_link_libraries(ucentralsec PUBLIC
|
target_link_libraries(owsec PUBLIC
|
||||||
${Poco_LIBRARIES} ${Boost_LIBRARIES} ${MySQL_LIBRARIES} ${ZLIB_LIBRARIES}
|
${Poco_LIBRARIES} ${Boost_LIBRARIES} ${MySQL_LIBRARIES} ${ZLIB_LIBRARIES}
|
||||||
CppKafka::cppkafka
|
CppKafka::cppkafka
|
||||||
)
|
)
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
target_link_libraries(ucentralsec PUBLIC PocoJSON)
|
target_link_libraries(owsec PUBLIC PocoJSON)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
72
README.md
72
README.md
@@ -21,7 +21,7 @@ The entire uCentral systems uses several MicroServices. In order for the whole s
|
|||||||
access
|
access
|
||||||
|
|
||||||
- Security
|
- Security
|
||||||
- Properties file: ucentralsec.properties
|
- Properties file: owsec.properties
|
||||||
- Ports
|
- Ports
|
||||||
- Public: 16001
|
- Public: 16001
|
||||||
- Private: 17001
|
- Private: 17001
|
||||||
@@ -42,7 +42,7 @@ access
|
|||||||
- ALB: 16104
|
- ALB: 16104
|
||||||
|
|
||||||
## Security Configuration
|
## Security Configuration
|
||||||
The service relies on a properties configuration file called `ucentralsec.properties`. In this file, you should configure several entries. Many values are optional
|
The service relies on a properties configuration file called `owsec.properties`. In this file, you should configure several entries. Many values are optional
|
||||||
and you can rely on the defaults. Here are some values of note:
|
and you can rely on the defaults. Here are some values of note:
|
||||||
|
|
||||||
### `authentication.default.password`
|
### `authentication.default.password`
|
||||||
@@ -52,7 +52,7 @@ Set the hash of the default username and password. Please look below on how to d
|
|||||||
Set the default username to use to login.
|
Set the default username to use to login.
|
||||||
|
|
||||||
### Default username and password
|
### Default username and password
|
||||||
The default username and password are set in `ucentralsec.properties` file. The following entries manage the username and password
|
The default username and password are set in `owsec.properties` file. The following entries manage the username and password
|
||||||
```text
|
```text
|
||||||
authentication.default.username = tip@ucentral.com
|
authentication.default.username = tip@ucentral.com
|
||||||
authentication.default.password = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
authentication.default.password = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
@@ -97,19 +97,19 @@ This security service uses Kafka to coordinate security with other services that
|
|||||||
in order to use this. You can find several examples of Kafka services available with Docker. Here are the values you need to configure.
|
in order to use this. You can find several examples of Kafka services available with Docker. Here are the values you need to configure.
|
||||||
|
|
||||||
```asm
|
```asm
|
||||||
ucentral.kafka.group.id = security
|
openwifi.kafka.group.id = security
|
||||||
ucentral.kafka.client.id = security1
|
openwifi.kafka.client.id = security1
|
||||||
ucentral.kafka.enable = true
|
openwifi.kafka.enable = true
|
||||||
ucentral.kafka.brokerlist = my.kafkaserver.arilia.com:9092
|
openwifi.kafka.brokerlist = my.kafkaserver.arilia.com:9092
|
||||||
ucentral.kafka.auto.commit = false
|
openwifi.kafka.auto.commit = false
|
||||||
ucentral.kafka.queue.buffering.max.ms = 50
|
openwifi.kafka.queue.buffering.max.ms = 50
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `ucentral.kafka.brokerlist`
|
#### `openwifi.kafka.brokerlist`
|
||||||
This is the list of your kafka brokers. This is a comma separated list. You should use IP addresses or FQDNs and the relevant ports, usually 9092 is the
|
This is the list of your kafka brokers. This is a comma separated list. You should use IP addresses or FQDNs and the relevant ports, usually 9092 is the
|
||||||
default.
|
default.
|
||||||
|
|
||||||
#### `ucentral.kafka.group.id`
|
#### `openwifi.kafka.group.id`
|
||||||
Every service on the Kafka bux must have a unique value (at least in our case). This should be a string. We suggest using a name corresponding to the
|
Every service on the Kafka bux must have a unique value (at least in our case). This should be a string. We suggest using a name corresponding to the
|
||||||
function provided. In this case, security.
|
function provided. In this case, security.
|
||||||
|
|
||||||
@@ -124,17 +124,17 @@ Here are the parameters for the public interface. The important files are:
|
|||||||
- `restapi-ca.pem` : the CA of your certificate
|
- `restapi-ca.pem` : the CA of your certificate
|
||||||
- `restapi-cert.pem` : the certificate for the public interface
|
- `restapi-cert.pem` : the certificate for the public interface
|
||||||
- `restapi-key.pem` : the key associated with this certificate
|
- `restapi-key.pem` : the key associated with this certificate
|
||||||
- `ucentral.restapi.host.0.key.password` : if you key is password protected, you may supply that password here.
|
- `openwifi.restapi.host.0.key.password` : if you key is password protected, you may supply that password here.
|
||||||
|
|
||||||
```asm
|
```asm
|
||||||
ucentral.restapi.host.0.backlog = 100
|
openwifi.restapi.host.0.backlog = 100
|
||||||
ucentral.restapi.host.0.security = relaxed
|
openwifi.restapi.host.0.security = relaxed
|
||||||
ucentral.restapi.host.0.rootca = $UCENTRALSEC_ROOT/certs/restapi-ca.pem
|
openwifi.restapi.host.0.rootca = $OWSEC_ROOT/certs/restapi-ca.pem
|
||||||
ucentral.restapi.host.0.address = *
|
openwifi.restapi.host.0.address = *
|
||||||
ucentral.restapi.host.0.port = 16001
|
openwifi.restapi.host.0.port = 16001
|
||||||
ucentral.restapi.host.0.cert = $UCENTRALSEC_ROOT/certs/restapi-cert.pem
|
openwifi.restapi.host.0.cert = $OWSEC_ROOT/certs/restapi-cert.pem
|
||||||
ucentral.restapi.host.0.key = $UCENTRALSEC_ROOT/certs/restapi-key.pem
|
openwifi.restapi.host.0.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
ucentral.restapi.host.0.key.password = mypassword
|
openwifi.restapi.host.0.key.password = mypassword
|
||||||
```
|
```
|
||||||
|
|
||||||
#### The private interface
|
#### The private interface
|
||||||
@@ -142,14 +142,14 @@ The private interface is used for service-to-service communication. You can use
|
|||||||
to the filenames used in the previous section.
|
to the filenames used in the previous section.
|
||||||
|
|
||||||
```asm
|
```asm
|
||||||
ucentral.internal.restapi.host.0.backlog = 100
|
openwifi.internal.restapi.host.0.backlog = 100
|
||||||
ucentral.internal.restapi.host.0.security = relaxed
|
openwifi.internal.restapi.host.0.security = relaxed
|
||||||
ucentral.internal.restapi.host.0.rootca = $UCENTRALSEC_ROOT/certs/restapi-ca.pem
|
openwifi.internal.restapi.host.0.rootca = $OWSEC_ROOT/certs/restapi-ca.pem
|
||||||
ucentral.internal.restapi.host.0.address = *
|
openwifi.internal.restapi.host.0.address = *
|
||||||
ucentral.internal.restapi.host.0.port = 17001
|
openwifi.internal.restapi.host.0.port = 17001
|
||||||
ucentral.internal.restapi.host.0.cert = $UCENTRALSEC_ROOT/certs/restapi-cert.pem
|
openwifi.internal.restapi.host.0.cert = $OWSEC_ROOT/certs/restapi-cert.pem
|
||||||
ucentral.internal.restapi.host.0.key = $UCENTRALSEC_ROOT/certs/restapi-key.pem
|
openwifi.internal.restapi.host.0.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
ucentral.internal.restapi.host.0.key.password = mypassword
|
openwifi.internal.restapi.host.0.key.password = mypassword
|
||||||
```
|
```
|
||||||
|
|
||||||
### Other important values
|
### Other important values
|
||||||
@@ -157,19 +157,19 @@ Here are other important values you must set.
|
|||||||
|
|
||||||
|
|
||||||
```asm
|
```asm
|
||||||
ucentral.system.data = $UCENTRALSEC_ROOT/data
|
openwifi.system.data = $OWSEC_ROOT/data
|
||||||
ucentral.system.uri.private = https://localhost:17001
|
openwifi.system.uri.private = https://localhost:17001
|
||||||
ucentral.system.uri.public = https://ucentral.dpaas.arilia.com:16001
|
openwifi.system.uri.public = https://openwifi.dpaas.arilia.com:16001
|
||||||
ucentral.system.commandchannel = /tmp/app.ucentralsec
|
openwifi.system.commandchannel = /tmp/app.ucentralsec
|
||||||
ucentral.service.key = $UCENTRALSEC_ROOT/certs/restapi-key.pem
|
openwifi.service.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
```
|
```
|
||||||
|
|
||||||
#### `ucentral.system.data`
|
#### `openwifi.system.data`
|
||||||
The location of some important data files including the user name database.
|
The location of some important data files including the user name database.
|
||||||
|
|
||||||
#### `ucentral.system.uri.private`
|
#### `openwifi.system.uri.private`
|
||||||
This is the FQDN used internally between services.
|
This is the FQDN used internally between services.
|
||||||
|
|
||||||
#### `ucentral.system.uri.public`
|
#### `openwifi.system.uri.public`
|
||||||
This is the FQDN used externally serving the OpenAPI interface.
|
This is the FQDN used externally serving the OpenAPI interface.
|
||||||
|
|
||||||
|
|||||||
148
new.properties
Normal file
148
new.properties
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
#
|
||||||
|
# uCentral protocol server for devices. This is where you point
|
||||||
|
# all your devices. You can replace the * for address by the specific
|
||||||
|
# address of one of your interfaces
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# REST API access
|
||||||
|
#
|
||||||
|
openwifi.restapi.host.0.backlog = 100
|
||||||
|
openwifi.restapi.host.0.security = relaxed
|
||||||
|
openwifi.restapi.host.0.rootca = $OWSEC_ROOT/certs/restapi-ca.pem
|
||||||
|
openwifi.restapi.host.0.address = *
|
||||||
|
openwifi.restapi.host.0.port = 16001
|
||||||
|
openwifi.restapi.host.0.cert = $OWSEC_ROOT/certs/restapi-cert.pem
|
||||||
|
openwifi.restapi.host.0.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
|
openwifi.restapi.host.0.key.password = mypassword
|
||||||
|
openwifi.restapi.wwwassets = $OWSEC_ROOT/wwwassets
|
||||||
|
|
||||||
|
openwifi.internal.restapi.host.0.backlog = 100
|
||||||
|
openwifi.internal.restapi.host.0.security = relaxed
|
||||||
|
openwifi.internal.restapi.host.0.rootca = $OWSEC_ROOT/certs/restapi-ca.pem
|
||||||
|
openwifi.internal.restapi.host.0.address = *
|
||||||
|
openwifi.internal.restapi.host.0.port = 17001
|
||||||
|
openwifi.internal.restapi.host.0.cert = $OWSEC_ROOT/certs/restapi-cert.pem
|
||||||
|
openwifi.internal.restapi.host.0.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
|
openwifi.internal.restapi.host.0.key.password = mypassword
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generic section that all microservices must have
|
||||||
|
#
|
||||||
|
authentication.enabled = true
|
||||||
|
authentication.default.username = tip@ucentral.com
|
||||||
|
authentication.default.password = 13268b7daa751240369d125e79c873bd8dd3bef7981bdfd38ea03dbb1fbe7dcf
|
||||||
|
openwifi.system.data = $OWSEC_ROOT/data
|
||||||
|
openwifi.system.uri.private = https://localhost:17001
|
||||||
|
openwifi.system.uri.public = https://local.dpaas.arilia.com:16001
|
||||||
|
openwifi.system.uri.ui = https://ucentral-ui.arilia.com
|
||||||
|
openwifi.system.commandchannel = /tmp/app.ucentralsec
|
||||||
|
openwifi.service.key = $OWSEC_ROOT/certs/restapi-key.pem
|
||||||
|
openwifi.service.key.password = mypassword
|
||||||
|
|
||||||
|
#
|
||||||
|
# Security Microservice Specific Section
|
||||||
|
#
|
||||||
|
mailer.hostname = smtp.gmail.com
|
||||||
|
mailer.username = ************************
|
||||||
|
mailer.password = ************************
|
||||||
|
mailer.loginmethod = login
|
||||||
|
mailer.port = 587
|
||||||
|
mailer.templates = $OWSEC_ROOT/templates
|
||||||
|
|
||||||
|
|
||||||
|
#############################
|
||||||
|
# Generic information for all micro services
|
||||||
|
#############################
|
||||||
|
#
|
||||||
|
# NLB Support
|
||||||
|
#
|
||||||
|
alb.enable = true
|
||||||
|
alb.port = 16101
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kafka
|
||||||
|
#
|
||||||
|
openwifi.kafka.group.id = security
|
||||||
|
openwifi.kafka.client.id = security1
|
||||||
|
openwifi.kafka.enable = true
|
||||||
|
openwifi.kafka.brokerlist = a1.arilia.com:9092
|
||||||
|
openwifi.kafka.auto.commit = false
|
||||||
|
openwifi.kafka.queue.buffering.max.ms = 50
|
||||||
|
openwifi.document.policy.access = /wwwassets/access_policy.html
|
||||||
|
openwifi.document.policy.password = /wwwassets/password_policy.html
|
||||||
|
openwifi.avatar.maxsize = 2000000
|
||||||
|
|
||||||
|
#
|
||||||
|
# This section select which form of persistence you need
|
||||||
|
# Only one selected at a time. If you select multiple, this service will die if a horrible
|
||||||
|
# death and might make your beer flat.
|
||||||
|
#
|
||||||
|
storage.type = sqlite
|
||||||
|
#storage.type = postgresql
|
||||||
|
#storage.type = mysql
|
||||||
|
#storage.type = odbc
|
||||||
|
|
||||||
|
storage.type.sqlite.db = security.db
|
||||||
|
storage.type.sqlite.idletime = 120
|
||||||
|
storage.type.sqlite.maxsessions = 128
|
||||||
|
|
||||||
|
storage.type.postgresql.maxsessions = 64
|
||||||
|
storage.type.postgresql.idletime = 60
|
||||||
|
storage.type.postgresql.host = localhost
|
||||||
|
storage.type.postgresql.username = stephb
|
||||||
|
storage.type.postgresql.password = snoopy99
|
||||||
|
storage.type.postgresql.database = ucentral
|
||||||
|
storage.type.postgresql.port = 5432
|
||||||
|
storage.type.postgresql.connectiontimeout = 60
|
||||||
|
|
||||||
|
storage.type.mysql.maxsessions = 64
|
||||||
|
storage.type.mysql.idletime = 60
|
||||||
|
storage.type.mysql.host = localhost
|
||||||
|
storage.type.mysql.username = stephb
|
||||||
|
storage.type.mysql.password = snoopy99
|
||||||
|
storage.type.mysql.database = ucentral
|
||||||
|
storage.type.mysql.port = 3306
|
||||||
|
storage.type.mysql.connectiontimeout = 60
|
||||||
|
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
########################################################################
|
||||||
|
#
|
||||||
|
# Logging: please leave as is for now.
|
||||||
|
#
|
||||||
|
########################################################################
|
||||||
|
logging.formatters.f1.class = PatternFormatter
|
||||||
|
logging.formatters.f1.pattern = %s: [%p] %t
|
||||||
|
logging.formatters.f1.times = UTC
|
||||||
|
logging.channels.c1.class = ConsoleChannel
|
||||||
|
logging.channels.c1.formatter = f1
|
||||||
|
|
||||||
|
# This is where the logs will be written. This path MUST exist
|
||||||
|
logging.channels.c2.class = FileChannel
|
||||||
|
logging.channels.c2.path = $OWSEC_ROOT/logs/log
|
||||||
|
logging.channels.c2.formatter.class = PatternFormatter
|
||||||
|
logging.channels.c2.formatter.pattern = %Y-%m-%d %H:%M:%S %s: [%p] %t
|
||||||
|
logging.channels.c2.rotation = 20 M
|
||||||
|
logging.channels.c2.archive = timestamp
|
||||||
|
logging.channels.c2.purgeCount = 20
|
||||||
|
logging.channels.c3.class = ConsoleChannel
|
||||||
|
logging.channels.c3.pattern = %s: [%p] %t
|
||||||
|
|
||||||
|
# External Channel
|
||||||
|
logging.loggers.root.channel = c2
|
||||||
|
logging.loggers.root.level = debug
|
||||||
|
|
||||||
|
# Inline Channel with PatternFormatter
|
||||||
|
# logging.loggers.l1.name = logger1
|
||||||
|
# logging.loggers.l1.channel.class = ConsoleChannel
|
||||||
|
# logging.loggers.l1.channel.pattern = %s: [%p] %t
|
||||||
|
# logging.loggers.l1.level = information
|
||||||
|
# SplitterChannel
|
||||||
|
# logging.channels.splitter.class = SplitterChannel
|
||||||
|
# logging.channels.splitter.channels = l1,l2
|
||||||
|
# logging.loggers.l2.name = logger2
|
||||||
|
# logging.loggers.l2.channel = splitter
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
22
new.service
Normal file
22
new.service
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=OpenWiFi Security Service
|
||||||
|
After=network-online.target docker.service
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
Environment="UCENTRALSEC_ROOT=/home/admin/dev/wlan-cloud-ucentralsec"
|
||||||
|
ExecStart=/home/admin/dev/wlan-cloud-ucentralsec/cmake-build/owsec
|
||||||
|
WorkingDirectory=/home/admin/dev/wlan-cloud-ucentralsec
|
||||||
|
# ExecReload=/bin/kill -s HUP $MAINPID
|
||||||
|
User=admin
|
||||||
|
# TimeoutSec=0
|
||||||
|
RestartSec=2
|
||||||
|
Restart=always
|
||||||
|
StartLimitBurst=3
|
||||||
|
# KillMode=process
|
||||||
|
LimitNOFILE=500000
|
||||||
|
LimitNPROC=500000
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
export UCENTRALSEC_CONFIG=`pwd`
|
export OWSEC_CONFIG=`pwd`
|
||||||
export UCENTRALSEC_ROOT=`pwd`
|
export OWSEC_ROOT=`pwd`
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-06-04.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef UCENTRALGW_ALBHEALTHCHECKSERVER_H
|
#ifndef UCENTRALGW_ALBHEALTHCHECKSERVER_H
|
||||||
@@ -26,12 +30,12 @@ namespace OpenWifi {
|
|||||||
/// Return a HTML document with the current date and time.
|
/// Return a HTML document with the current date and time.
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ALBRequestHandler(Poco::Logger & L)
|
explicit ALBRequestHandler(Poco::Logger & L)
|
||||||
: Logger_(L)
|
: Logger_(L)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleRequest(Poco::Net::HTTPServerRequest& Request, Poco::Net::HTTPServerResponse& Response)
|
void handleRequest(Poco::Net::HTTPServerRequest& Request, Poco::Net::HTTPServerResponse& Response) override
|
||||||
{
|
{
|
||||||
Logger_.information(Poco::format("ALB-REQUEST(%s): New ALB request.",Request.clientAddress().toString()));
|
Logger_.information(Poco::format("ALB-REQUEST(%s): New ALB request.",Request.clientAddress().toString()));
|
||||||
Response.setChunkedTransferEncoding(true);
|
Response.setChunkedTransferEncoding(true);
|
||||||
@@ -83,7 +87,7 @@ namespace OpenWifi {
|
|||||||
return instance_;
|
return instance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Start() {
|
int Start() override {
|
||||||
if(Daemon()->ConfigGetBool("alb.enable",false)) {
|
if(Daemon()->ConfigGetBool("alb.enable",false)) {
|
||||||
Port_ = (int)Daemon()->ConfigGetInt("alb.port",15015);
|
Port_ = (int)Daemon()->ConfigGetInt("alb.port",15015);
|
||||||
Socket_ = std::make_unique<Poco::Net::ServerSocket>(Port_);
|
Socket_ = std::make_unique<Poco::Net::ServerSocket>(Port_);
|
||||||
@@ -95,7 +99,7 @@ namespace OpenWifi {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Stop() {
|
void Stop() override {
|
||||||
if(Server_)
|
if(Server_)
|
||||||
Server_->stop();
|
Server_->stop();
|
||||||
}
|
}
|
||||||
|
|||||||
14
src/Daemon.h
14
src/Daemon.h
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
static const char * vDAEMON_PROPERTIES_FILENAME = "ucentralsec.properties";
|
static const char * vDAEMON_PROPERTIES_FILENAME = "owsec.properties";
|
||||||
static const char * vDAEMON_ROOT_ENV_VAR = "UCENTRALSEC_ROOT";
|
static const char * vDAEMON_ROOT_ENV_VAR = "UCENTRALSEC_ROOT";
|
||||||
static const char * vDAEMON_CONFIG_ENV_VAR = "UCENTRALSEC_CONFIG";
|
static const char * vDAEMON_CONFIG_ENV_VAR = "UCENTRALSEC_CONFIG";
|
||||||
static const char * vDAEMON_APP_NAME = uSERVICE_SECURITY.c_str();
|
static const char * vDAEMON_APP_NAME = uSERVICE_SECURITY.c_str();
|
||||||
@@ -34,15 +34,15 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
class Daemon : public MicroService {
|
class Daemon : public MicroService {
|
||||||
public:
|
public:
|
||||||
explicit Daemon(std::string PropFile,
|
explicit Daemon(const std::string & PropFile,
|
||||||
std::string RootEnv,
|
const std::string & RootEnv,
|
||||||
std::string ConfigEnv,
|
const std::string & ConfigEnv,
|
||||||
std::string AppName,
|
const std::string & AppName,
|
||||||
uint64_t BusTimer,
|
uint64_t BusTimer,
|
||||||
Types::SubSystemVec SubSystems) :
|
const Types::SubSystemVec & SubSystems) :
|
||||||
MicroService( PropFile, RootEnv, ConfigEnv, AppName, BusTimer, SubSystems) {};
|
MicroService( PropFile, RootEnv, ConfigEnv, AppName, BusTimer, SubSystems) {};
|
||||||
|
|
||||||
void initialize(Poco::Util::Application &self);
|
void initialize(Poco::Util::Application &self) override;
|
||||||
static Daemon *instance();
|
static Daemon *instance();
|
||||||
private:
|
private:
|
||||||
static Daemon *instance_;
|
static Daemon *instance_;
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ namespace OpenWifi {
|
|||||||
class KafkaManager *KafkaManager::instance_ = nullptr;
|
class KafkaManager *KafkaManager::instance_ = nullptr;
|
||||||
|
|
||||||
KafkaManager::KafkaManager() noexcept:
|
KafkaManager::KafkaManager() noexcept:
|
||||||
SubSystemServer("KafkaManager", "KAFKA-SVR", "ucentral.kafka")
|
SubSystemServer("KafkaManager", "KAFKA-SVR", "openwifi.kafka")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void KafkaManager::initialize(Poco::Util::Application & self) {
|
void KafkaManager::initialize(Poco::Util::Application & self) {
|
||||||
SubSystemServer::initialize(self);
|
SubSystemServer::initialize(self);
|
||||||
KafkaEnabled_ = Daemon()->ConfigGetBool("ucentral.kafka.enable",false);
|
KafkaEnabled_ = Daemon()->ConfigGetBool("openwifi.kafka.enable",false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SMALL_BUILD
|
#ifdef SMALL_BUILD
|
||||||
@@ -55,8 +55,8 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
void KafkaManager::ProducerThr() {
|
void KafkaManager::ProducerThr() {
|
||||||
cppkafka::Configuration Config({
|
cppkafka::Configuration Config({
|
||||||
{ "client.id", Daemon()->ConfigGetString("ucentral.kafka.client.id") },
|
{ "client.id", Daemon()->ConfigGetString("openwifi.kafka.client.id") },
|
||||||
{ "metadata.broker.list", Daemon()->ConfigGetString("ucentral.kafka.brokerlist") }
|
{ "metadata.broker.list", Daemon()->ConfigGetString("openwifi.kafka.brokerlist") }
|
||||||
});
|
});
|
||||||
SystemInfoWrapper_ = R"lit({ "system" : { "id" : )lit" +
|
SystemInfoWrapper_ = R"lit({ "system" : { "id" : )lit" +
|
||||||
std::to_string(Daemon()->ID()) +
|
std::to_string(Daemon()->ID()) +
|
||||||
@@ -96,10 +96,10 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
void KafkaManager::ConsumerThr() {
|
void KafkaManager::ConsumerThr() {
|
||||||
cppkafka::Configuration Config({
|
cppkafka::Configuration Config({
|
||||||
{ "client.id", Daemon()->ConfigGetString("ucentral.kafka.client.id") },
|
{ "client.id", Daemon()->ConfigGetString("openwifi.kafka.client.id") },
|
||||||
{ "metadata.broker.list", Daemon()->ConfigGetString("ucentral.kafka.brokerlist") },
|
{ "metadata.broker.list", Daemon()->ConfigGetString("openwifi.kafka.brokerlist") },
|
||||||
{ "group.id", Daemon()->ConfigGetString("ucentral.kafka.group.id") },
|
{ "group.id", Daemon()->ConfigGetString("openwifi.kafka.group.id") },
|
||||||
{ "enable.auto.commit", Daemon()->ConfigGetBool("ucentral.kafka.auto.commit",false) },
|
{ "enable.auto.commit", Daemon()->ConfigGetBool("openwifi.kafka.auto.commit",false) },
|
||||||
{ "auto.offset.reset", "latest" } ,
|
{ "auto.offset.reset", "latest" } ,
|
||||||
{ "enable.partition.eof", false }
|
{ "enable.partition.eof", false }
|
||||||
});
|
});
|
||||||
@@ -125,8 +125,8 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
bool AutoCommit = Daemon()->ConfigGetBool("ucentral.kafka.auto.commit",false);
|
bool AutoCommit = Daemon()->ConfigGetBool("openwifi.kafka.auto.commit",false);
|
||||||
auto BatchSize = Daemon()->ConfigGetInt("ucentral.kafka.consumer.batchsize",20);
|
auto BatchSize = Daemon()->ConfigGetInt("openwifi.kafka.consumer.batchsize",20);
|
||||||
|
|
||||||
Types::StringVec Topics;
|
Types::StringVec Topics;
|
||||||
for(const auto &i:Notifiers_)
|
for(const auto &i:Notifiers_)
|
||||||
@@ -174,7 +174,7 @@ namespace OpenWifi {
|
|||||||
return std::move( SystemInfoWrapper_ + PayLoad + "}");
|
return std::move( SystemInfoWrapper_ + PayLoad + "}");
|
||||||
}
|
}
|
||||||
|
|
||||||
void KafkaManager::PostMessage(std::string topic, std::string key, std::string PayLoad, bool WrapMessage ) {
|
void KafkaManager::PostMessage(const std::string &topic, const std::string & key, const std::string &PayLoad, bool WrapMessage ) {
|
||||||
if(KafkaEnabled_) {
|
if(KafkaEnabled_) {
|
||||||
SubMutexGuard G(Mutex_);
|
SubMutexGuard G(Mutex_);
|
||||||
KMessage M{
|
KMessage M{
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace OpenWifi {
|
|||||||
int Start() override;
|
int Start() override;
|
||||||
void Stop() override;
|
void Stop() override;
|
||||||
|
|
||||||
void PostMessage(std::string topic, std::string key, std::string payload, bool WrapMessage = true);
|
void PostMessage(const std::string &topic, const std::string & key, const std::string &payload, bool WrapMessage = true);
|
||||||
[[nodiscard]] std::string WrapSystemId(const std::string & PayLoad);
|
[[nodiscard]] std::string WrapSystemId(const std::string & PayLoad);
|
||||||
[[nodiscard]] bool Enabled() { return KafkaEnabled_; }
|
[[nodiscard]] bool Enabled() { return KafkaEnabled_; }
|
||||||
int RegisterTopicWatcher(const std::string &Topic, Types::TopicNotifyFunction & F);
|
int RegisterTopicWatcher(const std::string &Topic, Types::TopicNotifyFunction & F);
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-06-22.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
//
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
|
//
|
||||||
|
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
@@ -182,7 +187,7 @@ namespace OpenWifi {
|
|||||||
} else {
|
} else {
|
||||||
config().setString(LogFilePathKey, LogDir_);
|
config().setString(LogFilePathKey, LogDir_);
|
||||||
}
|
}
|
||||||
Poco::File DataDir(ConfigPath("ucentral.system.data"));
|
Poco::File DataDir(ConfigPath("openwifi.system.data"));
|
||||||
DataDir_ = DataDir.path();
|
DataDir_ = DataDir.path();
|
||||||
if(!DataDir.exists()) {
|
if(!DataDir.exists()) {
|
||||||
try {
|
try {
|
||||||
@@ -191,16 +196,16 @@ namespace OpenWifi {
|
|||||||
logger().log(E);
|
logger().log(E);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::string KeyFile = ConfigPath("ucentral.service.key");
|
std::string KeyFile = ConfigPath("openwifi.service.key");
|
||||||
std::string KeyFilePassword = ConfigPath("ucentral.service.key.password" , "" );
|
std::string KeyFilePassword = ConfigPath("openwifi.service.key.password" , "" );
|
||||||
AppKey_ = Poco::SharedPtr<Poco::Crypto::RSAKey>(new Poco::Crypto::RSAKey("", KeyFile, KeyFilePassword));
|
AppKey_ = Poco::SharedPtr<Poco::Crypto::RSAKey>(new Poco::Crypto::RSAKey("", KeyFile, KeyFilePassword));
|
||||||
Cipher_ = CipherFactory_.createCipher(*AppKey_);
|
Cipher_ = CipherFactory_.createCipher(*AppKey_);
|
||||||
ID_ = Utils::GetSystemId();
|
ID_ = Utils::GetSystemId();
|
||||||
if(!DebugMode_)
|
if(!DebugMode_)
|
||||||
DebugMode_ = ConfigGetBool("ucentral.system.debug",false);
|
DebugMode_ = ConfigGetBool("openwifi.system.debug",false);
|
||||||
MyPrivateEndPoint_ = ConfigGetString("ucentral.system.uri.private");
|
MyPrivateEndPoint_ = ConfigGetString("openwifi.system.uri.private");
|
||||||
MyPublicEndPoint_ = ConfigGetString("ucentral.system.uri.public");
|
MyPublicEndPoint_ = ConfigGetString("openwifi.system.uri.public");
|
||||||
UIURI_ = ConfigGetString("ucentral.system.uri.ui");
|
UIURI_ = ConfigGetString("openwifi.system.uri.ui");
|
||||||
MyHash_ = CreateHash(MyPublicEndPoint_);
|
MyHash_ = CreateHash(MyPublicEndPoint_);
|
||||||
InitializeSubSystemServers();
|
InitializeSubSystemServers();
|
||||||
ServerApplication::initialize(self);
|
ServerApplication::initialize(self);
|
||||||
@@ -427,7 +432,7 @@ namespace OpenWifi {
|
|||||||
Poco::Thread::trySleep((unsigned long)Daemon()->DaemonBusTimer());
|
Poco::Thread::trySleep((unsigned long)Daemon()->DaemonBusTimer());
|
||||||
if(!Running_)
|
if(!Running_)
|
||||||
break;
|
break;
|
||||||
auto Msg = Daemon()->MakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_KEEP_ALIVE);
|
Msg = Daemon()->MakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_KEEP_ALIVE);
|
||||||
KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS,Daemon()->PrivateEndPoint(),Msg, false);
|
KafkaManager()->PostMessage(KafkaTopics::SERVICE_EVENTS,Daemon()->PrivateEndPoint(),Msg, false);
|
||||||
}
|
}
|
||||||
Msg = Daemon()->MakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_LEAVE);
|
Msg = Daemon()->MakeSystemEventMessage(KafkaTopics::ServiceEvents::EVENT_LEAVE);
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-06-22.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef UCENTRALGW_MICROSERVICE_H
|
#ifndef UCENTRALGW_MICROSERVICE_H
|
||||||
@@ -34,6 +38,7 @@ namespace OpenWifi {
|
|||||||
static const std::string uSERVICE_FIRMWARE{ "ucentralfms"};
|
static const std::string uSERVICE_FIRMWARE{ "ucentralfms"};
|
||||||
static const std::string uSERVICE_TOPOLOGY{ "owtopo"};
|
static const std::string uSERVICE_TOPOLOGY{ "owtopo"};
|
||||||
static const std::string uSERVICE_PROVISIONING{ "owprov"};
|
static const std::string uSERVICE_PROVISIONING{ "owprov"};
|
||||||
|
static const std::string uSERVICE_OWLS{ "owls"};
|
||||||
|
|
||||||
class MyErrorHandler : public Poco::ErrorHandler {
|
class MyErrorHandler : public Poco::ErrorHandler {
|
||||||
public:
|
public:
|
||||||
@@ -82,9 +87,6 @@ namespace OpenWifi {
|
|||||||
DAEMON_APP_NAME(std::move(AppName)),
|
DAEMON_APP_NAME(std::move(AppName)),
|
||||||
DAEMON_BUS_TIMER(BusTimer),
|
DAEMON_BUS_TIMER(BusTimer),
|
||||||
SubSystems_(std::move(Subsystems)) {
|
SubSystems_(std::move(Subsystems)) {
|
||||||
std::string V{APP_VERSION};
|
|
||||||
std::string B{BUILD_NUMBER};
|
|
||||||
Version_ = V + "(" + B + ")";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(const ArgVec &args) override;
|
int main(const ArgVec &args) override;
|
||||||
@@ -136,9 +138,9 @@ namespace OpenWifi {
|
|||||||
[[nodiscard]] MicroServiceMetaVec GetServices();
|
[[nodiscard]] MicroServiceMetaVec GetServices();
|
||||||
[[nodiscard]] bool IsValidAPIKEY(const Poco::Net::HTTPServerRequest &Request);
|
[[nodiscard]] bool IsValidAPIKEY(const Poco::Net::HTTPServerRequest &Request);
|
||||||
|
|
||||||
void SavePID();
|
static void SavePID();
|
||||||
inline uint64_t GetPID() { return Poco::Process::id(); };
|
static inline uint64_t GetPID() { return Poco::Process::id(); };
|
||||||
[[nodiscard]] inline const std::string GetPublicAPIEndPoint() const { return MyPublicEndPoint_ + "/api/v1"; };
|
[[nodiscard]] inline const std::string GetPublicAPIEndPoint() { return MyPublicEndPoint_ + "/api/v1"; };
|
||||||
[[nodiscard]] inline const std::string & GetUIURI() const { return UIURI_;};
|
[[nodiscard]] inline const std::string & GetUIURI() const { return UIURI_;};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -159,7 +161,7 @@ namespace OpenWifi {
|
|||||||
std::string MyPrivateEndPoint_;
|
std::string MyPrivateEndPoint_;
|
||||||
std::string MyPublicEndPoint_;
|
std::string MyPublicEndPoint_;
|
||||||
std::string UIURI_;
|
std::string UIURI_;
|
||||||
std::string Version_;
|
std::string Version_{std::string(APP_VERSION) + "("+ BUILD_NUMBER + ")"};
|
||||||
BusEventManager BusEventManager_;
|
BusEventManager BusEventManager_;
|
||||||
SubMutex InfraMutex_;
|
SubMutex InfraMutex_;
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-07-01.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
//
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "OpenAPIRequest.h"
|
#include "OpenAPIRequest.h"
|
||||||
|
|
||||||
#include "Poco/Net/HTTPSClientSession.h"
|
#include "Poco/Net/HTTPSClientSession.h"
|
||||||
#include <Poco/Net/HTTPClientSession.h>
|
|
||||||
#include <Poco/Net/HTTPRequest.h>
|
#include <Poco/Net/HTTPRequest.h>
|
||||||
#include <Poco/Net/HTTPResponse.h>
|
#include <Poco/Net/HTTPResponse.h>
|
||||||
#include <Poco/StreamCopier.h>
|
|
||||||
#include <Poco/JSON/Parser.h>
|
#include <Poco/JSON/Parser.h>
|
||||||
#include <Poco/Path.h>
|
|
||||||
#include <Poco/URI.h>
|
#include <Poco/URI.h>
|
||||||
#include <Poco/Exception.h>
|
#include <Poco/Exception.h>
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
@@ -19,12 +22,12 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
OpenAPIRequestGet::OpenAPIRequestGet( const std::string & ServiceType,
|
OpenAPIRequestGet::OpenAPIRequestGet( std::string ServiceType,
|
||||||
const std::string & EndPoint,
|
std::string EndPoint,
|
||||||
Types::StringPairVec & QueryData,
|
Types::StringPairVec & QueryData,
|
||||||
uint64_t msTimeout):
|
uint64_t msTimeout):
|
||||||
Type_(ServiceType),
|
Type_(std::move(ServiceType)),
|
||||||
EndPoint_(EndPoint),
|
EndPoint_(std::move(EndPoint)),
|
||||||
QueryData_(QueryData),
|
QueryData_(QueryData),
|
||||||
msTimeout_(msTimeout) {
|
msTimeout_(msTimeout) {
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-07-01.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef UCENTRALGW_OPENAPIREQUEST_H
|
#ifndef UCENTRALGW_OPENAPIREQUEST_H
|
||||||
@@ -13,8 +17,8 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
class OpenAPIRequestGet {
|
class OpenAPIRequestGet {
|
||||||
public:
|
public:
|
||||||
explicit OpenAPIRequestGet( const std::string & Type,
|
explicit OpenAPIRequestGet( std::string Type,
|
||||||
const std::string & EndPoint,
|
std::string EndPoint,
|
||||||
Types::StringPairVec & QueryData,
|
Types::StringPairVec & QueryData,
|
||||||
uint64_t msTimeout);
|
uint64_t msTimeout);
|
||||||
int Do(Poco::JSON::Object::Ptr &ResponseObject);
|
int Do(Poco::JSON::Object::Ptr &ResponseObject);
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
//
|
//
|
||||||
// Created by stephane bourque on 2021-06-13.
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef UCENTRALGW_UCENTRALTYPES_H
|
#ifndef UCENTRALGW_UCENTRALTYPES_H
|
||||||
@@ -16,6 +20,8 @@
|
|||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
#include "Poco/StringTokenizer.h"
|
#include "Poco/StringTokenizer.h"
|
||||||
|
#include "Poco/JSON/Parser.h"
|
||||||
|
#include "Poco/JSON/Stringifier.h"
|
||||||
|
|
||||||
namespace OpenWifi::Types {
|
namespace OpenWifi::Types {
|
||||||
typedef std::pair<std::string,std::string> StringPair;
|
typedef std::pair<std::string,std::string> StringPair;
|
||||||
@@ -42,26 +48,58 @@ namespace OpenWifi::Types {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline std::string to_string( const StringVec &V) {
|
inline std::string to_string( const StringVec &V) {
|
||||||
std::string Result;
|
Poco::JSON::Array O;
|
||||||
|
|
||||||
bool first=true;
|
|
||||||
for(const auto &i:V) {
|
for(const auto &i:V) {
|
||||||
if(first) {
|
O.add(i);
|
||||||
Result += i;
|
}
|
||||||
first = false;
|
std::stringstream SS;
|
||||||
} else {
|
Poco::JSON::Stringifier::stringify(O,SS);
|
||||||
Result += ",";
|
return SS.str();
|
||||||
Result += i;
|
}
|
||||||
}
|
|
||||||
|
inline std::string to_string( const StringPairVec &V) {
|
||||||
|
Poco::JSON::Array O;
|
||||||
|
for(const auto &i:V) {
|
||||||
|
Poco::JSON::Array OO;
|
||||||
|
OO.add(i.first);
|
||||||
|
OO.add(i.second);
|
||||||
|
O.add(OO);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::stringstream SS;
|
||||||
|
Poco::JSON::Stringifier::stringify(O,SS);
|
||||||
|
return SS.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void from_string(const std::string &S, StringPairVec &V) {
|
||||||
|
try {
|
||||||
|
Poco::JSON::Parser P;
|
||||||
|
auto O = P.parse(S).extract<Poco::JSON::Array::Ptr>();
|
||||||
|
|
||||||
|
for(const auto &i:*O) {
|
||||||
|
auto Inner = i.extract<Poco::JSON::Array::Ptr>();
|
||||||
|
for(const auto &j:*Inner) {
|
||||||
|
auto S1 = i[0].toString();
|
||||||
|
auto S2 = i[1].toString();
|
||||||
|
V.push_back(std::make_pair(S1,S2));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
}
|
}
|
||||||
return Result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void from_string(const std::string &S, StringVec &V) {
|
inline void from_string(const std::string &S, StringVec &V) {
|
||||||
Poco::StringTokenizer Tokens(S,",",Poco::StringTokenizer::TOK_TRIM | Poco::StringTokenizer::TOK_IGNORE_EMPTY);
|
try {
|
||||||
|
Poco::JSON::Parser P;
|
||||||
|
auto O = P.parse(S).extract<Poco::JSON::Array::Ptr>();
|
||||||
|
|
||||||
for(auto const &i:Tokens)
|
for(auto const &i:*O) {
|
||||||
V.emplace_back(i);
|
V.push_back(i.toString());
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace OpenWifi {
|
|||||||
class RESTAPI_InternalServer *RESTAPI_InternalServer::instance_ = nullptr;
|
class RESTAPI_InternalServer *RESTAPI_InternalServer::instance_ = nullptr;
|
||||||
|
|
||||||
RESTAPI_InternalServer::RESTAPI_InternalServer() noexcept:
|
RESTAPI_InternalServer::RESTAPI_InternalServer() noexcept:
|
||||||
SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "ucentral.internal.restapi")
|
SubSystemServer("RESTAPIInternalServer", "REST-ISRV", "openwifi.internal.restapi")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
typedef std::vector<ProfileAction> ProfileActionVec;
|
typedef std::vector<ProfileAction> ProfileActionVec;
|
||||||
|
|
||||||
struct SecurityProfile {
|
struct SecurityProfile {
|
||||||
uint64_t id;
|
uint64_t id=0;
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string description;
|
std::string description;
|
||||||
ProfileActionVec policy;
|
ProfileActionVec policy;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
Poco::Net::HTMLForm form(Request, Request.stream(), partHandler);
|
Poco::Net::HTMLForm form(Request, Request.stream(), partHandler);
|
||||||
Poco::JSON::Object Answer;
|
Poco::JSON::Object Answer;
|
||||||
if (!partHandler.Name().empty() && partHandler.Length()<Daemon()->ConfigGetInt("ucentral.avatar.maxsize",2000000)) {
|
if (!partHandler.Name().empty() && partHandler.Length()<Daemon()->ConfigGetInt("openwifi.avatar.maxsize",2000000)) {
|
||||||
Answer.set(RESTAPI::Protocol::AVATARID, Id);
|
Answer.set(RESTAPI::Protocol::AVATARID, Id);
|
||||||
Answer.set(RESTAPI::Protocol::ERRORCODE, 0);
|
Answer.set(RESTAPI::Protocol::ERRORCODE, 0);
|
||||||
Logger_.information(Poco::format("Uploaded avatar: %s Type: %s", partHandler.Name(), partHandler.ContentType()));
|
Logger_.information(Poco::format("Uploaded avatar: %s Type: %s", partHandler.Name(), partHandler.ContentType()));
|
||||||
|
|||||||
@@ -64,9 +64,9 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RESTAPIHandler::ParseParameters(Poco::Net::HTTPServerRequest &request) {
|
void RESTAPIHandler::ParseParameters(Poco::Net::HTTPServerRequest &request) {
|
||||||
|
|
||||||
Poco::URI uri(request.getURI());
|
Poco::URI uri(request.getURI());
|
||||||
Parameters_ = uri.getQueryParameters();
|
Parameters_ = uri.getQueryParameters();
|
||||||
|
InitQueryBlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_number(const std::string &s) {
|
static bool is_number(const std::string &s) {
|
||||||
@@ -111,6 +111,26 @@ namespace OpenWifi {
|
|||||||
return Default;
|
return Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RESTAPIHandler::HasParameter(const std::string &Name, std::string &Value) {
|
||||||
|
for (const auto &i : Parameters_) {
|
||||||
|
if (i.first == Name) {
|
||||||
|
Value = i.second;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RESTAPIHandler::HasParameter(const std::string &Name, uint64_t & Value) {
|
||||||
|
for (const auto &i : Parameters_) {
|
||||||
|
if (i.first == Name) {
|
||||||
|
Value = std::stoi(i.second);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string &RESTAPIHandler::GetBinding(const std::string &Name, const std::string &Default) {
|
const std::string &RESTAPIHandler::GetBinding(const std::string &Name, const std::string &Default) {
|
||||||
auto E = Bindings_.find(Poco::toLower(Name));
|
auto E = Bindings_.find(Poco::toLower(Name));
|
||||||
if (E == Bindings_.end())
|
if (E == Bindings_.end())
|
||||||
@@ -130,6 +150,22 @@ namespace OpenWifi {
|
|||||||
return Return;
|
return Return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RESTAPIHandler::AssignIfPresent(const Poco::JSON::Object::Ptr &O, const std::string &Field, std::string &Value) {
|
||||||
|
if(O->has(Field)) {
|
||||||
|
Value = O->get(Field).toString();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RESTAPIHandler::AssignIfPresent(const Poco::JSON::Object::Ptr &O, const std::string &Field, uint64_t &Value) {
|
||||||
|
if(O->has(Field)) {
|
||||||
|
Value = O->get(Field);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void RESTAPIHandler::AddCORS(Poco::Net::HTTPServerRequest &Request,
|
void RESTAPIHandler::AddCORS(Poco::Net::HTTPServerRequest &Request,
|
||||||
Poco::Net::HTTPServerResponse &Response) {
|
Poco::Net::HTTPServerResponse &Response) {
|
||||||
auto Origin = Request.find("Origin");
|
auto Origin = Request.find("Origin");
|
||||||
@@ -364,7 +400,17 @@ namespace OpenWifi {
|
|||||||
Poco::JSON::Stringifier::stringify(Object, Answer);
|
Poco::JSON::Stringifier::stringify(Object, Answer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RESTAPIHandler::ReturnCountOnly(Poco::Net::HTTPServerRequest &Request, uint64_t Count,
|
||||||
|
Poco::Net::HTTPServerResponse &Response) {
|
||||||
|
Poco::JSON::Object Answer;
|
||||||
|
Answer.set("count", Count);
|
||||||
|
ReturnObject(Request,Answer,Response);
|
||||||
|
}
|
||||||
|
|
||||||
bool RESTAPIHandler::InitQueryBlock() {
|
bool RESTAPIHandler::InitQueryBlock() {
|
||||||
|
if(QueryBlockInitialized_)
|
||||||
|
return true;
|
||||||
|
QueryBlockInitialized_=true;
|
||||||
QB_.SerialNumber = GetParameter(RESTAPI::Protocol::SERIALNUMBER, "");
|
QB_.SerialNumber = GetParameter(RESTAPI::Protocol::SERIALNUMBER, "");
|
||||||
QB_.StartDate = GetParameter(RESTAPI::Protocol::STARTDATE, 0);
|
QB_.StartDate = GetParameter(RESTAPI::Protocol::STARTDATE, 0);
|
||||||
QB_.EndDate = GetParameter(RESTAPI::Protocol::ENDDATE, 0);
|
QB_.EndDate = GetParameter(RESTAPI::Protocol::ENDDATE, 0);
|
||||||
@@ -376,8 +422,10 @@ namespace OpenWifi {
|
|||||||
QB_.LogType = GetParameter(RESTAPI::Protocol::LOGTYPE,0);
|
QB_.LogType = GetParameter(RESTAPI::Protocol::LOGTYPE,0);
|
||||||
QB_.LastOnly = GetBoolParameter(RESTAPI::Protocol::LASTONLY,false);
|
QB_.LastOnly = GetBoolParameter(RESTAPI::Protocol::LASTONLY,false);
|
||||||
QB_.Newest = GetBoolParameter(RESTAPI::Protocol::NEWEST,false);
|
QB_.Newest = GetBoolParameter(RESTAPI::Protocol::NEWEST,false);
|
||||||
|
QB_.CountOnly = GetBoolParameter(RESTAPI::Protocol::COUNTONLY,false);
|
||||||
|
|
||||||
if(QB_.Offset<1) return false;
|
if(QB_.Offset<1)
|
||||||
|
QB_.Offset=1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include "Poco/NullStream.h"
|
#include "Poco/NullStream.h"
|
||||||
|
|
||||||
#include "RESTAPI_SecurityObjects.h"
|
#include "RESTAPI_SecurityObjects.h"
|
||||||
|
#include "RESTAPI_utils.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
@@ -86,7 +87,7 @@ namespace OpenWifi {
|
|||||||
struct QueryBlock {
|
struct QueryBlock {
|
||||||
uint64_t StartDate = 0 , EndDate = 0 , Offset = 0 , Limit = 0, LogType = 0 ;
|
uint64_t StartDate = 0 , EndDate = 0 , Offset = 0 , Limit = 0, LogType = 0 ;
|
||||||
std::string SerialNumber, Filter, Select;
|
std::string SerialNumber, Filter, Select;
|
||||||
bool Lifetime=false, LastOnly=false, Newest=false;
|
bool Lifetime=false, LastOnly=false, Newest=false, CountOnly=false;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::map<std::string, std::string> BindingMap;
|
typedef std::map<std::string, std::string> BindingMap;
|
||||||
@@ -142,10 +143,25 @@ namespace OpenWifi {
|
|||||||
const std::string &GetBinding(const std::string &Name, const std::string &Default);
|
const std::string &GetBinding(const std::string &Name, const std::string &Default);
|
||||||
bool InitQueryBlock();
|
bool InitQueryBlock();
|
||||||
|
|
||||||
|
void ReturnCountOnly(Poco::Net::HTTPServerRequest &Request, uint64_t Count,
|
||||||
|
Poco::Net::HTTPServerResponse &Response);
|
||||||
|
|
||||||
[[nodiscard]] static uint64_t Get(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, uint64_t Default=0);
|
[[nodiscard]] static uint64_t Get(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, uint64_t Default=0);
|
||||||
[[nodiscard]] static std::string GetS(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, const std::string & Default="");
|
[[nodiscard]] static std::string GetS(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, const std::string & Default="");
|
||||||
[[nodiscard]] static bool GetB(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, bool Default=false);
|
[[nodiscard]] static bool GetB(const char *Parameter,const Poco::JSON::Object::Ptr &Obj, bool Default=false);
|
||||||
[[nodiscard]] static uint64_t GetWhen(const Poco::JSON::Object::Ptr &Obj);
|
[[nodiscard]] static uint64_t GetWhen(const Poco::JSON::Object::Ptr &Obj);
|
||||||
|
bool HasParameter(const std::string &QueryParameter, std::string &Value);
|
||||||
|
bool HasParameter(const std::string &QueryParameter, uint64_t & Value);
|
||||||
|
|
||||||
|
bool AssignIfPresent(const Poco::JSON::Object::Ptr &O, const std::string &Field, std::string &Value);
|
||||||
|
bool AssignIfPresent(const Poco::JSON::Object::Ptr &O, const std::string &Field, uint64_t &Value);
|
||||||
|
|
||||||
|
template<typename T> void ReturnObject( Poco::Net::HTTPServerRequest &Request, const char *Name, const std::vector<T> & Objects,
|
||||||
|
Poco::Net::HTTPServerResponse &Response) {
|
||||||
|
Poco::JSON::Object Answer;
|
||||||
|
RESTAPI_utils::field_to_json(Answer,Name,Objects);
|
||||||
|
ReturnObject(Request, Answer, Response);
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BindingMap Bindings_;
|
BindingMap Bindings_;
|
||||||
@@ -156,6 +172,7 @@ namespace OpenWifi {
|
|||||||
std::vector<std::string> Methods_;
|
std::vector<std::string> Methods_;
|
||||||
QueryBlock QB_;
|
QueryBlock QB_;
|
||||||
bool Internal_=false;
|
bool Internal_=false;
|
||||||
|
bool QueryBlockInitialized_=false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class RESTAPI_UnknownRequestHandler : public RESTAPIHandler {
|
class RESTAPI_UnknownRequestHandler : public RESTAPIHandler {
|
||||||
|
|||||||
@@ -30,9 +30,9 @@ namespace OpenWifi {
|
|||||||
int RESTAPI_Server::Start() {
|
int RESTAPI_Server::Start() {
|
||||||
Logger_.information("Starting.");
|
Logger_.information("Starting.");
|
||||||
|
|
||||||
AsserDir_ = Daemon()->ConfigPath("ucentral.restapi.wwwassets");
|
AsserDir_ = Daemon()->ConfigPath("openwifi.restapi.wwwassets");
|
||||||
AccessPolicy_ = Daemon()->ConfigGetString("ucentral.document.policy.access", "/wwwassets/access_policy.html");
|
AccessPolicy_ = Daemon()->ConfigGetString("openwifi.document.policy.access", "/wwwassets/access_policy.html");
|
||||||
PasswordPolicy_ = Daemon()->ConfigGetString("ucentral.document.policy.password", "/wwwassets/possword_policy.html");
|
PasswordPolicy_ = Daemon()->ConfigGetString("openwifi.document.policy.password", "/wwwassets/possword_policy.html");
|
||||||
|
|
||||||
for(const auto & Svr: ConfigServersList_) {
|
for(const auto & Svr: ConfigServersList_) {
|
||||||
Logger_.information(Poco::format("Starting: %s:%s Keyfile:%s CertFile: %s", Svr.Address(), std::to_string(Svr.Port()),
|
Logger_.information(Poco::format("Starting: %s:%s Keyfile:%s CertFile: %s", Svr.Address(), std::to_string(Svr.Port()),
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ namespace OpenWifi {
|
|||||||
std::string AccessPolicy_;
|
std::string AccessPolicy_;
|
||||||
|
|
||||||
RESTAPI_Server() noexcept:
|
RESTAPI_Server() noexcept:
|
||||||
SubSystemServer("RESTAPIServer", "REST-SRV", "ucentral.restapi")
|
SubSystemServer("RESTAPIServer", "REST-SRV", "openwifi.restapi")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,11 +15,6 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
class Storage *Storage::instance_ = nullptr;
|
class Storage *Storage::instance_ = nullptr;
|
||||||
|
|
||||||
Storage::Storage() noexcept:
|
|
||||||
SubSystemServer("Storage", "STORAGE-SVR", "storage")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string Storage::ConvertParams(const std::string & S) const {
|
std::string Storage::ConvertParams(const std::string & S) const {
|
||||||
std::string R;
|
std::string R;
|
||||||
|
|
||||||
|
|||||||
@@ -177,7 +177,6 @@ namespace OpenWifi {
|
|||||||
int Create_UserTable();
|
int Create_UserTable();
|
||||||
int Create_AvatarTable();
|
int Create_AvatarTable();
|
||||||
|
|
||||||
int Setup_SQLite();
|
|
||||||
[[nodiscard]] std::string ConvertParams(const std::string &S) const;
|
[[nodiscard]] std::string ConvertParams(const std::string &S) const;
|
||||||
[[nodiscard]] inline std::string ComputeRange(uint64_t From, uint64_t HowMany) {
|
[[nodiscard]] inline std::string ComputeRange(uint64_t From, uint64_t HowMany) {
|
||||||
if(dbType_==sqlite) {
|
if(dbType_==sqlite) {
|
||||||
@@ -190,11 +189,15 @@ namespace OpenWifi {
|
|||||||
return " LIMIT " + std::to_string(HowMany) + " OFFSET " + std::to_string(From-1) + " ";
|
return " LIMIT " + std::to_string(HowMany) + " OFFSET " + std::to_string(From-1) + " ";
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SMALL_BUILD
|
Storage() noexcept:
|
||||||
|
SubSystemServer("Storage", "STORAGE-SVR", "storage")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int Setup_SQLite();
|
||||||
int Setup_MySQL();
|
int Setup_MySQL();
|
||||||
int Setup_PostgreSQL();
|
int Setup_PostgreSQL();
|
||||||
#endif
|
|
||||||
Storage() noexcept;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
inline Storage * Storage() { return Storage::instance(); };
|
inline Storage * Storage() { return Storage::instance(); };
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${UCENTRALSEC}" == "" ]]
|
if [[ "${OWSEC}" == "" ]]
|
||||||
then
|
then
|
||||||
echo "You must set the variable UCENTRALSEC in order to use this script. Something like"
|
echo "You must set the variable OWSEC in order to use this script. Something like"
|
||||||
echo "UCENTRALSEC=myauthgateway.isp.com:16001"
|
echo "OWSEC=myauthgateway.isp.com:16001"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ browser=""
|
|||||||
|
|
||||||
login() {
|
login() {
|
||||||
payload="{ \"userId\" : \"$username\" , \"password\" : \"$password\" }"
|
payload="{ \"userId\" : \"$username\" , \"password\" : \"$password\" }"
|
||||||
token=$(curl ${FLAGS} -X POST -H "Content-Type: application/json" -d "$payload" "https://${UCENTRALSEC}/api/v1/oauth2" | jq -r '.access_token')
|
token=$(curl ${FLAGS} -X POST -H "Content-Type: application/json" -d "$payload" "https://${OWSEC}/api/v1/oauth2" | jq -r '.access_token')
|
||||||
|
|
||||||
if [[ "${token}" == "" ]]
|
if [[ "${token}" == "" ]]
|
||||||
then
|
then
|
||||||
@@ -55,7 +55,7 @@ login() {
|
|||||||
|
|
||||||
testlogin() {
|
testlogin() {
|
||||||
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\" }"
|
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\" }"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/oauth2" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/oauth2" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
userMustChangePassword=$(cat ${result_file} | jq -r '.userMustChangePassword')
|
userMustChangePassword=$(cat ${result_file} | jq -r '.userMustChangePassword')
|
||||||
@@ -68,14 +68,14 @@ testlogin() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\", \"newPassword\" : \"$3\" }"
|
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\", \"newPassword\" : \"$3\" }"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/oauth2" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/oauth2" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
elif [[ "$3" != "" ]]
|
elif [[ "$3" != "" ]]
|
||||||
then
|
then
|
||||||
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\", \"newPassword\" : \"$3\" }"
|
payload="{ \"userId\" : \"$1\" , \"password\" : \"$2\", \"newPassword\" : \"$3\" }"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/oauth2" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/oauth2" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
@@ -85,7 +85,7 @@ testlogin() {
|
|||||||
|
|
||||||
emailtest() {
|
emailtest() {
|
||||||
payload="{ \"userId\" : \"$1\" }"
|
payload="{ \"userId\" : \"$1\" }"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/oauth2?forgotPassword=true" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/oauth2?forgotPassword=true" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
@@ -114,18 +114,18 @@ findbrowser() {
|
|||||||
logout() {
|
logout() {
|
||||||
curl ${FLAGS} -X DELETE -H "Content-Type: application/json" \
|
curl ${FLAGS} -X DELETE -H "Content-Type: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
"https://${UCENTRALSEC}/api/v1/oauth2/${token}"
|
"https://${OWSEC}/api/v1/oauth2/${token}"
|
||||||
rm -rf token.json
|
rm -rf token.json
|
||||||
}
|
}
|
||||||
|
|
||||||
me() {
|
me() {
|
||||||
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
"https://${UCENTRALSEC}/api/v1/oauth2?me=true"
|
"https://${OWSEC}/api/v1/oauth2?me=true"
|
||||||
}
|
}
|
||||||
|
|
||||||
listendpoints() {
|
listendpoints() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/systemEndpoints" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/systemEndpoints" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" > ${result_file}
|
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
@@ -161,12 +161,12 @@ listendpoints() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getlogo() {
|
getlogo() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/wwwassets/open-wifi.svg"
|
curl ${FLAGS} -X GET "https://${OWSEC}/wwwassets/open-wifi.svg"
|
||||||
}
|
}
|
||||||
|
|
||||||
createuser() {
|
createuser() {
|
||||||
payload="{ \"id\": \"0\", \"email\" : \"$1\", \"currentPassword\" : \"$2\", \"changePassword\" : true}"
|
payload="{ \"id\": \"0\", \"email\" : \"$1\", \"currentPassword\" : \"$2\", \"changePassword\" : true}"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/user/0" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/user/0" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
@@ -175,7 +175,7 @@ createuser() {
|
|||||||
|
|
||||||
createuser_v() {
|
createuser_v() {
|
||||||
payload="{ \"id\": \"0\", \"email\" : \"$1\", \"currentPassword\" : \"$2\", \"changePassword\" : true}"
|
payload="{ \"id\": \"0\", \"email\" : \"$1\", \"currentPassword\" : \"$2\", \"changePassword\" : true}"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/user/0?email_verification=true" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/user/0?email_verification=true" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
@@ -183,7 +183,7 @@ createuser_v() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deleteuser() {
|
deleteuser() {
|
||||||
curl ${FLAGS} -X DELETE "https://${UCENTRALSEC}/api/v1/user/$1" \
|
curl ${FLAGS} -X DELETE "https://${OWSEC}/api/v1/user/$1" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
@@ -191,7 +191,7 @@ deleteuser() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getuser() {
|
getuser() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/user/$1" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/user/$1" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
@@ -199,7 +199,7 @@ getuser() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
listusers() {
|
listusers() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/users" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/users" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
@@ -208,41 +208,41 @@ listusers() {
|
|||||||
|
|
||||||
policies() {
|
policies() {
|
||||||
payload="{}"
|
payload="{}"
|
||||||
curl ${FLAGS} -X POST "https://${UCENTRALSEC}/api/v1/oauth2?requirements=true" \
|
curl ${FLAGS} -X POST "https://${OWSEC}/api/v1/oauth2?requirements=true" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "$payload" > ${result_file}
|
-d "$payload" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
setavatar() {
|
setavatar() {
|
||||||
curl ${FLAGS} -F 'data=@open-wifi.svg' "https://${UCENTRALSEC}/api/v1/avatar/$1" \
|
curl ${FLAGS} -F 'data=@open-wifi.svg' "https://${OWSEC}/api/v1/avatar/$1" \
|
||||||
-H "Authorization: Bearer ${token}" > ${result_file};
|
-H "Authorization: Bearer ${token}" > ${result_file};
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
getavatar() {
|
getavatar() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/avatar/$1" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/avatar/$1" \
|
||||||
-H "accept: application/octet-stream" \
|
-H "accept: application/octet-stream" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-o "user.svg"
|
-o "user.svg"
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteavatar() {
|
deleteavatar() {
|
||||||
curl ${FLAGS} -X DELETE "https://${UCENTRALSEC}/api/v1/avatar/$1" \
|
curl ${FLAGS} -X DELETE "https://${OWSEC}/api/v1/avatar/$1" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Content-Type: application/json" > ${result_file}
|
-H "Content-Type: application/json" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
secversion() {
|
secversion() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/system?command=version" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/system?command=version" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" > ${result_file}
|
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
sectimes() {
|
sectimes() {
|
||||||
curl ${FLAGS} -X GET "https://${UCENTRALSEC}/api/v1/system?command=times" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/system?command=times" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" > ${result_file}
|
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
|
|||||||
Reference in New Issue
Block a user