mirror of
https://github.com/Telecominfraproject/wlan-cloud-owprov.git
synced 2025-10-29 17:52:28 +00:00
Compare commits
102 Commits
v2.7.0-RC3
...
gh-pages
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4fa90af31d | ||
|
|
f1ce9547d1 | ||
|
|
7ae328c059 | ||
|
|
3ada76c536 | ||
|
|
9c2b0f7de3 | ||
|
|
df9dcdaac1 | ||
|
|
b0e5fbb814 | ||
|
|
17c2f1b8e8 | ||
|
|
4b104c961a | ||
|
|
db367133a8 | ||
|
|
5baf3b1b19 | ||
|
|
6a923375ad | ||
|
|
39b1352d4e | ||
|
|
df9d05bd69 | ||
|
|
ca63e3cae6 | ||
|
|
fe14eaac58 | ||
|
|
5172d95aac | ||
|
|
5e2ab7a37b | ||
|
|
12ff4adc41 | ||
|
|
6e88403685 | ||
|
|
174b209065 | ||
|
|
0d380f9585 | ||
|
|
c249911f9c | ||
|
|
1cc9ef6466 | ||
|
|
6aee513a45 | ||
|
|
66ca992fee | ||
|
|
cd216c7949 | ||
|
|
1f0366335b | ||
|
|
38b4d82e79 | ||
|
|
601c75bccb | ||
|
|
325801b583 | ||
|
|
b1fba48ed1 | ||
|
|
9ab2b5ee60 | ||
|
|
7a5d484932 | ||
|
|
f623368923 | ||
|
|
188ecabd33 | ||
|
|
5326fbf390 | ||
|
|
6ee055adff | ||
|
|
5d66fe0d56 | ||
|
|
378ff98bfb | ||
|
|
01cbb382d1 | ||
|
|
1cba12b934 | ||
|
|
9b8de5efd2 | ||
|
|
01d7a048dd | ||
|
|
da31483c78 | ||
|
|
a22fac8b86 | ||
|
|
fe50daf627 | ||
|
|
711f1808d8 | ||
|
|
23aa41dd8d | ||
|
|
30385a5cc3 | ||
|
|
0145aa3e52 | ||
|
|
97575715a3 | ||
|
|
125800e78a | ||
|
|
606a806d62 | ||
|
|
46b5daed8f | ||
|
|
d1edab2bcf | ||
|
|
2bf972cec6 | ||
|
|
d706dba60a | ||
|
|
8b23197359 | ||
|
|
4f4dcc9071 | ||
|
|
a30b4e1dae | ||
|
|
21aa3ef685 | ||
|
|
a6a9daa8a1 | ||
|
|
5b546ea381 | ||
|
|
be8805e86d | ||
|
|
efe9076c35 | ||
|
|
4a55483f90 | ||
|
|
af336e5ddf | ||
|
|
222674ae1b | ||
|
|
ec684090ae | ||
|
|
c0004dc804 | ||
|
|
d08d64ae27 | ||
|
|
9a9d25f045 | ||
|
|
fdded83221 | ||
|
|
8a98844bac | ||
|
|
a9105f06aa | ||
|
|
ac885295ae | ||
|
|
5a0132e174 | ||
|
|
9daee84f88 | ||
|
|
d7469cf0b7 | ||
|
|
8d8d52adf2 | ||
|
|
c5e44f2a98 | ||
|
|
5c2937c7ec | ||
|
|
a8f1483362 | ||
|
|
5abe7a9909 | ||
|
|
0a3a9a4b20 | ||
|
|
9d4eb1e502 | ||
|
|
51ba962338 | ||
|
|
fef07e3150 | ||
|
|
03a6675359 | ||
|
|
19686da4d8 | ||
|
|
c5997a3511 | ||
|
|
3feb5fd666 | ||
|
|
d3cd3a1a21 | ||
|
|
5e6228b9d6 | ||
|
|
ad526ebf1d | ||
|
|
8de53277e6 | ||
|
|
93fbb3017a | ||
|
|
2e4d1ad3e8 | ||
|
|
6cacebad28 | ||
|
|
e487b68945 | ||
|
|
ffddfa87d2 |
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
DOCKER_REGISTRY_USERNAME: ucentral
|
||||
steps:
|
||||
- name: Checkout actions repo
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: Telecominfraproject/.github
|
||||
path: github
|
||||
@@ -58,11 +58,11 @@ jobs:
|
||||
- name: Get base branch name and set as output
|
||||
id: get_base_branch
|
||||
run: |
|
||||
echo ::set-output name=branch::$(echo ${GITHUB_BASE_REF##*/})
|
||||
echo ::set-output name=owgw_branch::$(echo ${GITHUB_BASE_REF##*/} | sed 's/main/master/g')
|
||||
echo "branch=$(echo ${GITHUB_BASE_REF##*/})" >> $GITHUB_OUTPUT
|
||||
echo "owgw_branch=$(echo ${GITHUB_BASE_REF##*/} | sed 's/main/master/g')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout actions repo
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: Telecominfraproject/.github
|
||||
path: github
|
||||
|
||||
2
.github/workflows/enforce-jira-issue-key.yml
vendored
2
.github/workflows/enforce-jira-issue-key.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout actions repo
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
repository: Telecominfraproject/.github
|
||||
path: github
|
||||
|
||||
40
.github/workflows/openapi-pages.yml
vendored
Normal file
40
.github/workflows/openapi-pages.yml
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
name: Update OpenAPI docs on GitHub Pages
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'openapi/**'
|
||||
branches:
|
||||
- main
|
||||
workflow_dispatch:
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
docsgen:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Generate static HTML page with docs from OpenAPI definition
|
||||
run: |
|
||||
docker run --rm -v "${PWD}:/local" openapitools/openapi-generator-cli:v6.2.1 generate -i https://raw.githubusercontent.com/Telecominfraproject/wlan-cloud-owprov/main/openapi/owprov.yaml -g html2 --skip-validate-spec -o /local/
|
||||
|
||||
- name: Update OpenAPI docs
|
||||
run: |
|
||||
mkdir tmp-docs
|
||||
mv index.html tmp-docs/index.html
|
||||
mkdir -p ~/.ssh
|
||||
ssh-keyscan -H github.com >> ~/.ssh/known_hosts
|
||||
echo https://tip-automation:${{ secrets.GIT_PUSH_PAT }}@github.com > ~/.git-credentials
|
||||
git config --global credential.helper store
|
||||
git config --global user.email "tip-automation@telecominfraproject.com"
|
||||
git config --global user.name "TIP Automation User"
|
||||
git pull
|
||||
git checkout gh-pages || git checkout -b gh-pages
|
||||
mv tmp-docs docs
|
||||
git add docs
|
||||
git commit -m'Update OpenAPI docs for GitHub pages'
|
||||
git push --set-upstream origin gh-pages
|
||||
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
HELM_REPO_USERNAME: ucentral
|
||||
steps:
|
||||
- name: Checkout uCentral assembly chart repo
|
||||
uses: actions/checkout@v2
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
path: wlan-cloud-owprov
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
project(owprov VERSION 2.7.0)
|
||||
project(owprov VERSION 2.8.0)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
||||
@@ -27,12 +27,12 @@ endif()
|
||||
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} describe --always --tags
|
||||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
RESULT_VARIABLE GIT_RESULT
|
||||
OUTPUT_VARIABLE GIT_HASH)
|
||||
if(NOT GIT_RESULT EQUAL "0")
|
||||
message(FATAL_ERROR "git describe --always --tags failed with ${GIT_RESULT}")
|
||||
message(FATAL_ERROR "git rev-parse --short HEAD failed with ${GIT_RESULT}")
|
||||
endif()
|
||||
string(REGEX REPLACE "\n$" "" GIT_HASH "${GIT_HASH}")
|
||||
endif()
|
||||
@@ -40,6 +40,7 @@ endif()
|
||||
add_definitions(-DAWS_CUSTOM_MEMORY_MANAGEMENT)
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
find_package(ZLIB REQUIRED)
|
||||
find_package(Poco REQUIRED COMPONENTS Crypto JWT Net Util NetSSL Data DataSQLite)
|
||||
find_package(nlohmann_json REQUIRED)
|
||||
find_package(nlohmann_json_schema_validator REQUIRED)
|
||||
@@ -75,15 +76,58 @@ add_executable(owprov
|
||||
src/framework/OpenWifiTypes.h
|
||||
src/framework/orm.h
|
||||
src/framework/StorageClass.h
|
||||
src/framework/MicroServiceErrorHandler.h
|
||||
src/framework/UI_WebSocketClientServer.cpp
|
||||
src/framework/UI_WebSocketClientServer.h
|
||||
src/framework/utils.h
|
||||
src/framework/utils.cpp
|
||||
src/framework/AppServiceRegistry.h
|
||||
src/framework/SubSystemServer.cpp
|
||||
src/framework/SubSystemServer.h
|
||||
src/framework/RESTAPI_utils.h
|
||||
src/framework/UI_WebSocketClientNotifications.cpp
|
||||
src/framework/AuthClient.cpp
|
||||
src/framework/AuthClient.h
|
||||
src/framework/MicroServiceNames.h
|
||||
src/framework/MicroServiceFuncs.h
|
||||
src/framework/OpenAPIRequests.cpp
|
||||
src/framework/OpenAPIRequests.h
|
||||
src/framework/MicroServiceFuncs.cpp
|
||||
src/framework/ALBserver.cpp
|
||||
src/framework/ALBserver.h
|
||||
src/framework/KafkaManager.cpp
|
||||
src/framework/KafkaManager.h
|
||||
src/framework/RESTAPI_RateLimiter.h
|
||||
src/framework/WebSocketLogger.h
|
||||
src/framework/RESTAPI_GenericServerAccounting.h
|
||||
src/framework/CIDR.h
|
||||
src/framework/RESTAPI_Handler.cpp
|
||||
src/framework/RESTAPI_Handler.h
|
||||
src/framework/RESTAPI_ExtServer.h
|
||||
src/framework/RESTAPI_ExtServer.cpp
|
||||
src/framework/RESTAPI_IntServer.cpp
|
||||
src/framework/RESTAPI_IntServer.h
|
||||
src/framework/RESTAPI_SystemCommand.h
|
||||
src/framework/RESTAPI_WebSocketServer.h
|
||||
src/framework/RESTAPI_SystemConfiguration.h
|
||||
src/framework/EventBusManager.cpp
|
||||
src/framework/EventBusManager.h
|
||||
src/framework/RESTAPI_PartHandler.h
|
||||
src/framework/MicroService.cpp
|
||||
src/framework/MicroServiceExtra.h
|
||||
src/framework/ConfigurationValidator.cpp
|
||||
src/framework/ConfigurationValidator.h
|
||||
src/framework/ow_constants.h
|
||||
src/framework/MicroServiceErrorHandler.h
|
||||
src/framework/WebSocketClientNotifications.h
|
||||
src/UI_Prov_WebSocketNotifications.h
|
||||
src/UI_Prov_WebSocketNotifications.cpp
|
||||
src/RESTObjects/RESTAPI_SecurityObjects.h src/RESTObjects/RESTAPI_SecurityObjects.cpp
|
||||
src/RESTObjects/RESTAPI_ProvObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.h
|
||||
src/RESTObjects/RESTAPI_GWobjects.h src/RESTObjects/RESTAPI_GWobjects.cpp
|
||||
src/RESTObjects/RESTAPI_FMSObjects.h src/RESTObjects/RESTAPI_FMSObjects.cpp
|
||||
src/RESTObjects/RESTAPI_CertObjects.cpp src/RESTObjects/RESTAPI_CertObjects.h
|
||||
src/RESTObjects/RESTAPI_OWLSobjects.cpp src/RESTObjects/RESTAPI_OWLSobjects.h
|
||||
src/RESTObjects/RESTAPI_ProvObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.h
|
||||
src/RESTObjects/RESTAPI_AnalyticsObjects.cpp src/RESTObjects/RESTAPI_AnalyticsObjects.h
|
||||
src/RESTObjects/RESTAPI_SubObjects.cpp src/RESTObjects/RESTAPI_SubObjects.h
|
||||
|
||||
src/RESTAPI/RESTAPI_routers.cpp
|
||||
src/Daemon.cpp src/Daemon.h
|
||||
src/Dashboard.h src/Dashboard.cpp
|
||||
@@ -144,7 +188,22 @@ add_executable(owprov
|
||||
src/storage/storage_operataor.cpp src/storage/storage_operataor.h
|
||||
src/storage/storage_sub_devices.cpp src/storage/storage_sub_devices.h
|
||||
src/storage/storage_service_class.cpp src/storage/storage_service_class.h
|
||||
src/RESTAPI/RESTAPI_sub_devices_list_handler.cpp src/RESTAPI/RESTAPI_sub_devices_list_handler.h src/RESTAPI/RESTAPI_sub_devices_handler.cpp src/RESTAPI/RESTAPI_sub_devices_handler.h src/RESTAPI/RESTAPI_service_class_list_handler.cpp src/RESTAPI/RESTAPI_service_class_list_handler.h src/RESTAPI/RESTAPI_service_class_handler.cpp src/RESTAPI/RESTAPI_service_class_handler.h src/RESTAPI/RESTAPI_operators_list_handler.cpp src/RESTAPI/RESTAPI_operators_list_handler.h src/RESTAPI/RESTAPI_operators_handler.cpp src/RESTAPI/RESTAPI_operators_handler.h src/storage/storage_op_contacts.cpp src/storage/storage_op_contacts.h src/storage/storage_op_locations.cpp src/storage/storage_op_locations.h src/RESTAPI/RESTAPI_op_contact_list_handler.cpp src/RESTAPI/RESTAPI_op_contact_list_handler.h src/RESTAPI/RESTAPI_op_contact_handler.cpp src/RESTAPI/RESTAPI_op_contact_handler.h src/RESTAPI/RESTAPI_op_location_list_handler.cpp src/RESTAPI/RESTAPI_op_location_list_handler.h src/RESTAPI/RESTAPI_op_location_handler.cpp src/RESTAPI/RESTAPI_op_location_handler.h src/ProvWebSocketClient.cpp src/ProvWebSocketClient.h src/Tasks/VenueRebooter.h src/Tasks/VenueUpgrade.h src/sdks/SDK_fms.cpp src/sdks/SDK_fms.h)
|
||||
src/RESTAPI/RESTAPI_sub_devices_list_handler.cpp src/RESTAPI/RESTAPI_sub_devices_list_handler.h
|
||||
src/RESTAPI/RESTAPI_sub_devices_handler.cpp src/RESTAPI/RESTAPI_sub_devices_handler.h
|
||||
src/RESTAPI/RESTAPI_service_class_list_handler.cpp src/RESTAPI/RESTAPI_service_class_list_handler.h
|
||||
src/RESTAPI/RESTAPI_service_class_handler.cpp src/RESTAPI/RESTAPI_service_class_handler.h
|
||||
src/RESTAPI/RESTAPI_operators_list_handler.cpp src/RESTAPI/RESTAPI_operators_list_handler.h
|
||||
src/RESTAPI/RESTAPI_operators_handler.cpp src/RESTAPI/RESTAPI_operators_handler.h
|
||||
src/storage/storage_op_contacts.cpp src/storage/storage_op_contacts.h
|
||||
src/storage/storage_op_locations.cpp src/storage/storage_op_locations.h
|
||||
src/RESTAPI/RESTAPI_op_contact_list_handler.cpp src/RESTAPI/RESTAPI_op_contact_list_handler.h
|
||||
src/RESTAPI/RESTAPI_op_contact_handler.cpp src/RESTAPI/RESTAPI_op_contact_handler.h
|
||||
src/RESTAPI/RESTAPI_op_location_list_handler.cpp src/RESTAPI/RESTAPI_op_location_list_handler.h
|
||||
src/RESTAPI/RESTAPI_op_location_handler.cpp src/RESTAPI/RESTAPI_op_location_handler.h
|
||||
src/ProvWebSocketClient.cpp src/ProvWebSocketClient.h
|
||||
src/Tasks/VenueRebooter.h src/Tasks/VenueUpgrade.h
|
||||
src/sdks/SDK_fms.cpp src/sdks/SDK_fms.h
|
||||
src/storage/storage_overrides.cpp src/storage/storage_overrides.h src/RESTAPI/RESTAPI_overrides_handler.cpp src/RESTAPI/RESTAPI_overrides_handler.h)
|
||||
|
||||
target_link_libraries(owprov PUBLIC
|
||||
${Poco_LIBRARIES}
|
||||
|
||||
50
Dockerfile
50
Dockerfile
@@ -1,17 +1,15 @@
|
||||
ARG ALPINE_VERSION=3.16.2
|
||||
ARG POCO_VERSION=poco-tip-v1
|
||||
ARG FMTLIB_VERSION=9.0.0
|
||||
ARG DEBIAN_VERSION=11.5-slim
|
||||
ARG POCO_VERSION=poco-tip-v2
|
||||
ARG CPPKAFKA_VERSION=tip-v1
|
||||
ARG JSON_VALIDATOR_VERSION=2.1.0
|
||||
|
||||
FROM alpine:$ALPINE_VERSION AS build-base
|
||||
FROM debian:$DEBIAN_VERSION AS build-base
|
||||
|
||||
RUN apk add --update --no-cache \
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
make cmake g++ git \
|
||||
unixodbc-dev postgresql-dev mariadb-dev \
|
||||
librdkafka-dev boost-dev openssl-dev \
|
||||
zlib-dev nlohmann-json \
|
||||
curl-dev
|
||||
libpq-dev libmariadb-dev libmariadbclient-dev-compat \
|
||||
librdkafka-dev libboost-all-dev libssl-dev \
|
||||
zlib1g-dev nlohmann-json3-dev ca-certificates libcurl4-openssl-dev libfmt-dev
|
||||
|
||||
FROM build-base AS poco-build
|
||||
|
||||
@@ -27,20 +25,6 @@ RUN cmake ..
|
||||
RUN cmake --build . --config Release -j8
|
||||
RUN cmake --build . --target install
|
||||
|
||||
FROM build-base AS fmtlib-build
|
||||
|
||||
ARG FMTLIB_VERSION
|
||||
|
||||
ADD https://api.github.com/repos/fmtlib/fmt/git/refs/tags/${FMTLIB_VERSION} version.json
|
||||
RUN git clone https://github.com/fmtlib/fmt --branch ${FMTLIB_VERSION} /fmtlib
|
||||
|
||||
WORKDIR /fmtlib
|
||||
RUN mkdir cmake-build
|
||||
WORKDIR cmake-build
|
||||
RUN cmake ..
|
||||
RUN make
|
||||
RUN make install
|
||||
|
||||
FROM build-base AS cppkafka-build
|
||||
|
||||
ARG CPPKAFKA_VERSION
|
||||
@@ -82,8 +66,6 @@ COPY --from=cppkafka-build /usr/local/include /usr/local/include
|
||||
COPY --from=cppkafka-build /usr/local/lib /usr/local/lib
|
||||
COPY --from=json-schema-validator-build /usr/local/include /usr/local/include
|
||||
COPY --from=json-schema-validator-build /usr/local/lib /usr/local/lib
|
||||
COPY --from=fmtlib-build /usr/local/include /usr/local/include
|
||||
COPY --from=fmtlib-build /usr/local/lib /usr/local/lib
|
||||
|
||||
WORKDIR /owprov
|
||||
RUN mkdir cmake-build
|
||||
@@ -91,21 +73,21 @@ WORKDIR /owprov/cmake-build
|
||||
RUN cmake ..
|
||||
RUN cmake --build . --config Release -j8
|
||||
|
||||
FROM alpine:$ALPINE_VERSION
|
||||
FROM debian:$DEBIAN_VERSION
|
||||
|
||||
ENV OWPROV_USER=owprov \
|
||||
OWPROV_ROOT=/owprov-data \
|
||||
OWPROV_CONFIG=/owprov-data
|
||||
|
||||
RUN addgroup -S "$OWPROV_USER" && \
|
||||
adduser -S -G "$OWPROV_USER" "$OWPROV_USER"
|
||||
RUN useradd "$OWPROV_USER"
|
||||
|
||||
RUN mkdir /openwifi
|
||||
RUN mkdir -p "$OWPROV_ROOT" "$OWPROV_CONFIG" && \
|
||||
chown "$OWPROV_USER": "$OWPROV_ROOT" "$OWPROV_CONFIG"
|
||||
|
||||
RUN apk add --update --no-cache librdkafka su-exec gettext ca-certificates bash jq curl \
|
||||
mariadb-connector-c libpq unixodbc postgresql-client
|
||||
RUN apt-get update && apt-get install --no-install-recommends -y \
|
||||
librdkafka++1 gosu gettext ca-certificates bash jq curl wget \
|
||||
libmariadb-dev-compat libpq5 postgresql-client libfmt7
|
||||
|
||||
COPY readiness_check /readiness_check
|
||||
COPY test_scripts/curl/cli /cli
|
||||
@@ -114,11 +96,13 @@ COPY owprov.properties.tmpl /
|
||||
COPY docker-entrypoint.sh /
|
||||
COPY wait-for-postgres.sh /
|
||||
RUN wget https://raw.githubusercontent.com/Telecominfraproject/wlan-cloud-ucentral-deploy/main/docker-compose/certs/restapi-ca.pem \
|
||||
-O /usr/local/share/ca-certificates/restapi-ca-selfsigned.pem
|
||||
-O /usr/local/share/ca-certificates/restapi-ca-selfsigned.crt
|
||||
|
||||
COPY --from=owprov-build /owprov/cmake-build/owprov /openwifi/owprov
|
||||
COPY --from=cppkafka-build /cppkafka/cmake-build/src/lib/* /usr/local/lib
|
||||
COPY --from=poco-build /poco/cmake-build/lib/* /usr/local/lib
|
||||
COPY --from=cppkafka-build /cppkafka/cmake-build/src/lib/* /usr/local/lib/
|
||||
COPY --from=poco-build /poco/cmake-build/lib/* /usr/local/lib/
|
||||
|
||||
RUN ldconfig
|
||||
|
||||
EXPOSE 16005 17005 16105
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
if [ "$SELFSIGNED_CERTS" = 'true' ]; then
|
||||
@@ -49,7 +49,7 @@ if [ "$1" = '/openwifi/owprov' -a "$(id -u)" = '0' ]; then
|
||||
if [ "$RUN_CHOWN" = 'true' ]; then
|
||||
chown -R "$OWPROV_USER": "$OWPROV_ROOT" "$OWPROV_CONFIG"
|
||||
fi
|
||||
exec su-exec "$OWPROV_USER" "$@"
|
||||
exec gosu "$OWPROV_USER" "$@"
|
||||
fi
|
||||
|
||||
exec "$@"
|
||||
|
||||
48635
docs/index.html
Normal file
48635
docs/index.html
Normal file
File diff suppressed because one or more lines are too long
@@ -131,8 +131,10 @@ spec:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
|
||||
{{- with .Values.securityContext }}
|
||||
securityContext:
|
||||
fsGroup: 101
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
|
||||
imagePullSecrets:
|
||||
{{- range $image, $imageValue := .Values.images }}
|
||||
|
||||
@@ -9,7 +9,7 @@ fullnameOverride: ""
|
||||
images:
|
||||
owprov:
|
||||
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owprov
|
||||
tag: v2.7.0-RC3
|
||||
tag: main
|
||||
pullPolicy: Always
|
||||
# regcred:
|
||||
# registry: tip-tip-wlan-cloud-ucentral.jfrog.io
|
||||
@@ -91,6 +91,9 @@ resources: {}
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
securityContext:
|
||||
fsGroup: 1000
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
@@ -1220,6 +1220,40 @@ components:
|
||||
items:
|
||||
$ref: '#/components/schemas/SubscriberDevice'
|
||||
|
||||
ConfigurationOverride:
|
||||
type: object
|
||||
properties:
|
||||
source:
|
||||
type: string
|
||||
reason:
|
||||
type: string
|
||||
parameterName:
|
||||
type: string
|
||||
parameterType:
|
||||
enum:
|
||||
- string
|
||||
- integer
|
||||
- boolean
|
||||
parameterValue:
|
||||
type: string
|
||||
modified:
|
||||
type: integer
|
||||
format: int64
|
||||
|
||||
ConfigurationOverrideList:
|
||||
type: object
|
||||
properties:
|
||||
serialNumber:
|
||||
type: string
|
||||
managementPolicy:
|
||||
type: string
|
||||
format: uuid
|
||||
overrides:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/ConfigurationOverride'
|
||||
|
||||
|
||||
#########################################################################################
|
||||
##
|
||||
## These are endpoints that all services in the OPenWiFI stack must provide
|
||||
@@ -2211,6 +2245,94 @@ paths:
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
/configurationOverrides/{serialNumber}:
|
||||
get:
|
||||
tags:
|
||||
- Configuration Overrides
|
||||
operationId: getCponfigurationOverrides
|
||||
summary: retrieve a list of configuration overrides for a given device
|
||||
parameters:
|
||||
- in: path
|
||||
name: serialNumber
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
description: Return a list of configuration overrides.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigurationOverrideList'
|
||||
400:
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
delete:
|
||||
tags:
|
||||
- Configuration Overrides
|
||||
operationId: deleteCponfigurationOverrides
|
||||
summary: delete all configuration overrides for a given device from a given source
|
||||
parameters:
|
||||
- in: path
|
||||
name: serialNumber
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
- in: query
|
||||
name: source
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
responses:
|
||||
200:
|
||||
$ref: '#/components/responses/Success'
|
||||
400:
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
put:
|
||||
tags:
|
||||
- Configuration Overrides
|
||||
operationId: modifyConfigurationOverrides
|
||||
summary: modify configuration overrides for a given device for a given source
|
||||
parameters:
|
||||
- in: path
|
||||
name: serialNumber
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
- in: query
|
||||
name: source
|
||||
schema:
|
||||
type: string
|
||||
required: true
|
||||
requestBody:
|
||||
description: Information used to modify the override list
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigurationOverrideList'
|
||||
responses:
|
||||
200:
|
||||
description: Return the modified configuration overrides.
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ConfigurationOverrideList'
|
||||
400:
|
||||
$ref: '#/components/responses/BadRequest'
|
||||
403:
|
||||
$ref: '#/components/responses/Unauthorized'
|
||||
404:
|
||||
$ref: '#/components/responses/NotFound'
|
||||
|
||||
|
||||
|
||||
/venue:
|
||||
get:
|
||||
tags:
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
#include "APConfig.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
#include "Poco/JSON/Parser.h"
|
||||
#include "Poco/StringTokenizer.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
APConfig::APConfig(const std::string &SerialNumber, const std::string &DeviceType, Poco::Logger &L, bool Explain)
|
||||
@@ -131,7 +135,10 @@ namespace OpenWifi {
|
||||
ProvObjects::InventoryTag D;
|
||||
if (StorageService()->InventoryDB().GetRecord("serialNumber", SerialNumber_, D)) {
|
||||
if (!D.deviceConfiguration.empty()) {
|
||||
std::cout << "Adding device specific configuration: " << D.deviceConfiguration.size() << std::endl;
|
||||
AddConfiguration(D.deviceConfiguration);
|
||||
} else {
|
||||
std::cout << "No device specific configuration." << std::endl;
|
||||
}
|
||||
if (!D.entity.empty()) {
|
||||
AddEntityConfig(D.entity);
|
||||
@@ -205,6 +212,65 @@ namespace OpenWifi {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Apply overrides...
|
||||
ProvObjects::ConfigurationOverrideList COL;
|
||||
if(StorageService()->OverridesDB().GetRecord("serialNumber", SerialNumber_, COL)) {
|
||||
for (const auto &col: COL.overrides) {
|
||||
const auto Tokens = Poco::StringTokenizer(col.parameterName, ".");
|
||||
if (Tokens[0] == "radios" && Tokens.count() == 3) {
|
||||
std::uint64_t RadioIndex = std::strtoull(Tokens[1].c_str(), nullptr, 10);
|
||||
if (RadioIndex < MaximumPossibleRadios) {
|
||||
auto RadioArray = Configuration->getArray("radios");
|
||||
if (RadioIndex < RadioArray->size()) {
|
||||
auto IndexedRadio = RadioArray->get(RadioIndex).extract<Poco::JSON::Object::Ptr>();
|
||||
if (Tokens[2] == "tx-power") {
|
||||
IndexedRadio->set("rx-power",
|
||||
std::strtoull(col.parameterValue.c_str(), nullptr, 10));
|
||||
if (Explain_) {
|
||||
Poco::JSON::Object ExObj;
|
||||
ExObj.set("from-name", "overrides");
|
||||
ExObj.set("override", col.parameterName);
|
||||
ExObj.set("source", col.source);
|
||||
ExObj.set("reason", col.reason);
|
||||
ExObj.set("value", col.parameterValue);
|
||||
Explanation_.add(ExObj);
|
||||
}
|
||||
RadioArray->set(RadioIndex, IndexedRadio);
|
||||
Configuration->set("radios", RadioArray);
|
||||
} else if (Tokens[2] == "channel") {
|
||||
if(col.parameterValue=="auto") {
|
||||
IndexedRadio->set("channel", "auto");
|
||||
} else {
|
||||
IndexedRadio->set("channel",
|
||||
std::strtoull(col.parameterValue.c_str(), nullptr, 10));
|
||||
}
|
||||
std::cout << "Setting channel in radio " << RadioIndex << std::endl;
|
||||
if (Explain_) {
|
||||
Poco::JSON::Object ExObj;
|
||||
ExObj.set("from-name", "overrides");
|
||||
ExObj.set("override", col.parameterName);
|
||||
ExObj.set("source", col.source);
|
||||
ExObj.set("reason", col.reason);
|
||||
ExObj.set("value", col.parameterValue);
|
||||
Explanation_.add(ExObj);
|
||||
}
|
||||
RadioArray->set(RadioIndex, IndexedRadio);
|
||||
Configuration->set("radios", RadioArray);
|
||||
} else {
|
||||
poco_error(Logger(), fmt::format("{}: Unsupported override variable name {}",
|
||||
col.parameterName));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
poco_error(Logger(), fmt::format("{}: radio index out of range in {}", col.parameterName));
|
||||
}
|
||||
} else {
|
||||
poco_error(Logger(),
|
||||
fmt::format("{}: Unsupported override variable name {}", col.parameterName));
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (...) {
|
||||
|
||||
}
|
||||
@@ -269,7 +335,11 @@ namespace OpenWifi {
|
||||
ExObj.set("reason", "deviceType mismatch");
|
||||
Explanation_.add(ExObj);
|
||||
}
|
||||
} else {
|
||||
poco_error(Logger(),fmt::format("Device configuration for {} is empty.", SerialNumber_));
|
||||
}
|
||||
} else {
|
||||
poco_error(Logger(),fmt::format("Invalid device configuration UUID for {}.", SerialNumber_));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
constexpr std::uint64_t MaximumPossibleRadios=6;
|
||||
|
||||
struct VerboseElement {
|
||||
ProvObjects::DeviceConfigurationElement element;
|
||||
ProvObjects::ObjectInfo info;
|
||||
|
||||
@@ -5,11 +5,14 @@
|
||||
#include "AutoDiscovery.h"
|
||||
#include "framework/ow_constants.h"
|
||||
#include "framework/KafkaTopics.h"
|
||||
#include "framework/KafkaManager.h"
|
||||
#include "StorageService.h"
|
||||
#include "Poco/JSON/Parser.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
int AutoDiscovery::Start() {
|
||||
poco_information(Logger(),"Starting...");
|
||||
Running_ = true;
|
||||
Types::TopicNotifyFunction F = [this](const std::string &Key, const std::string &Payload) { this->ConnectionReceived(Key,Payload); };
|
||||
ConnectionWatcherId_ = KafkaManager()->RegisterTopicWatcher(KafkaTopics::CONNECTION, F);
|
||||
@@ -18,10 +21,12 @@ namespace OpenWifi {
|
||||
};
|
||||
|
||||
void AutoDiscovery::Stop() {
|
||||
poco_information(Logger(),"Stopping...");
|
||||
Running_ = false;
|
||||
KafkaManager()->UnregisterTopicWatcher(KafkaTopics::CONNECTION, ConnectionWatcherId_);
|
||||
Queue_.wakeUpAll();
|
||||
Worker_.join();
|
||||
poco_information(Logger(),"Stopped...");
|
||||
};
|
||||
|
||||
void AutoDiscovery::run() {
|
||||
|
||||
@@ -4,8 +4,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/OpenWifiTypes.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
|
||||
#include "Poco/NotificationQueue.h"
|
||||
#include "Poco/Notification.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -33,7 +36,7 @@ namespace OpenWifi {
|
||||
void Stop() override;
|
||||
void ConnectionReceived( const std::string & Key, const std::string & Payload) {
|
||||
std::lock_guard G(Mutex_);
|
||||
poco_debug(Logger(),Poco::format("Device(%s): Connection/Ping message.", Key));
|
||||
poco_trace(Logger(),Poco::format("Device(%s): Connection/Ping message.", Key));
|
||||
Queue_.enqueueNotification( new DiscoveryMessage(Key,Payload));
|
||||
}
|
||||
void run() override;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "Poco/Util/Application.h"
|
||||
#include "Poco/Util/Option.h"
|
||||
#include "Poco/Environment.h"
|
||||
#include "Poco/Net/SSLManager.h"
|
||||
|
||||
#include "Daemon.h"
|
||||
#include "StorageService.h"
|
||||
@@ -20,6 +21,8 @@
|
||||
#include "Signup.h"
|
||||
#include "DeviceTypeCache.h"
|
||||
#include "FileDownloader.h"
|
||||
#include "framework/UI_WebSocketClientServer.h"
|
||||
#include "UI_Prov_WebSocketNotifications.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class Daemon *Daemon::instance_ = nullptr;
|
||||
@@ -38,7 +41,7 @@ namespace OpenWifi {
|
||||
SerialNumberCache(),
|
||||
AutoDiscovery(),
|
||||
JobController(),
|
||||
WebSocketClientServer(),
|
||||
UI_WebSocketClientServer(),
|
||||
FindCountryFromIP(),
|
||||
Signup(),
|
||||
FileDownloader()
|
||||
@@ -70,20 +73,34 @@ namespace OpenWifi {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DaemonPostInitialization(Poco::Util::Application &self) {
|
||||
Daemon()->PostInitialization(self);
|
||||
ProvWebSocketNotifications::Register();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
try {
|
||||
auto App = OpenWifi::Daemon::instance();
|
||||
auto ExitCode = App->run(argc, argv);
|
||||
delete App;
|
||||
int ExitCode;
|
||||
try {
|
||||
Poco::Net::SSLManager::instance().initializeServer(nullptr, nullptr, nullptr);
|
||||
auto App = OpenWifi::Daemon::instance();
|
||||
ExitCode = App->run(argc, argv);
|
||||
Poco::Net::SSLManager::instance().shutdown();
|
||||
} catch (Poco::Exception &exc) {
|
||||
ExitCode = Poco::Util::Application::EXIT_SOFTWARE;
|
||||
std::cout << exc.displayText() << std::endl;
|
||||
} catch (std::exception &exc) {
|
||||
ExitCode = Poco::Util::Application::EXIT_TEMPFAIL;
|
||||
std::cout << exc.what() << std::endl;
|
||||
} catch (...) {
|
||||
ExitCode = Poco::Util::Application::EXIT_TEMPFAIL;
|
||||
std::cout << "Exception on closure" << std::endl;
|
||||
}
|
||||
|
||||
return ExitCode;
|
||||
|
||||
} catch (Poco::Exception &exc) {
|
||||
std::cerr << exc.displayText() << std::endl;
|
||||
return Poco::Util::Application::EXIT_SOFTWARE;
|
||||
}
|
||||
std::cout << "Exitcode: " << ExitCode << std::endl;
|
||||
return ExitCode;
|
||||
}
|
||||
|
||||
// end of namespace
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include "Dashboard.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/MicroServiceNames.h"
|
||||
#include "framework/OpenWifiTypes.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "ProvWebSocketClient.h"
|
||||
@@ -54,8 +55,6 @@ namespace OpenWifi {
|
||||
};
|
||||
|
||||
inline Daemon * Daemon() { return Daemon::instance(); }
|
||||
inline void DaemonPostInitialization(Poco::Util::Application &self) {
|
||||
Daemon()->PostInitialization(self);
|
||||
}
|
||||
void DaemonPostInitialization(Poco::Util::Application &self);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
// Arilia Wireless Inc.
|
||||
//
|
||||
#include "Dashboard.h"
|
||||
#include "StorageService.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
void ProvisioningDashboard::Create() {
|
||||
uint64_t Now = OpenWifi::Now();
|
||||
uint64_t Now = Utils::Now();
|
||||
if(LastRun_==0 || (Now-LastRun_)>120) {
|
||||
DB_.reset();
|
||||
// Todo: call dashboard creation code.
|
||||
|
||||
@@ -6,7 +6,11 @@
|
||||
|
||||
#include <set>
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
#include "framework/AppServiceRegistry.h"
|
||||
#include "framework/OpenAPIRequests.h"
|
||||
#include "framework/MicroServiceNames.h"
|
||||
|
||||
#include "Poco/Timer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
namespace OpenWifi {
|
||||
int FileDownloader::Start() {
|
||||
poco_information(Logger(),"Starting...");
|
||||
TimerCallback_ = std::make_unique<Poco::TimerCallback<FileDownloader>>(*this,&FileDownloader::onTimer);
|
||||
Timer_.setStartInterval( 20 * 1000); // first run in 20 seconds
|
||||
Timer_.setPeriodicInterval(2 * 60 * 60 * 1000); // 1 hours
|
||||
@@ -15,8 +16,9 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
void FileDownloader::Stop() {
|
||||
poco_information(Logger(),"Stopping...");
|
||||
Timer_.stop();
|
||||
Logger().notice("Stopping.");
|
||||
poco_information(Logger(),"Stopped...");
|
||||
}
|
||||
|
||||
void FileDownloader::onTimer([[maybe_unused]] Poco::Timer &timer) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
#include "Poco/Timer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -4,8 +4,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "Poco/Net/IPAddress.h"
|
||||
|
||||
#include "framework/SubSystemServer.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
|
||||
#include "nlohmann/json.hpp"
|
||||
|
||||
namespace OpenWifi {
|
||||
@@ -23,7 +26,7 @@ namespace OpenWifi {
|
||||
public:
|
||||
static std::string Name() { return "ipinfo"; }
|
||||
inline bool Init() override {
|
||||
Key_ = MicroService::instance().ConfigGetString("iptocountry.ipinfo.token", "");
|
||||
Key_ = MicroServiceConfigGetString("iptocountry.ipinfo.token", "");
|
||||
return !Key_.empty();
|
||||
}
|
||||
|
||||
@@ -55,7 +58,7 @@ namespace OpenWifi {
|
||||
public:
|
||||
static std::string Name() { return "ipdata"; }
|
||||
inline bool Init() override {
|
||||
Key_ = MicroService::instance().ConfigGetString("iptocountry.ipdata.apikey", "");
|
||||
Key_ = MicroServiceConfigGetString("iptocountry.ipdata.apikey", "");
|
||||
return !Key_.empty();
|
||||
}
|
||||
|
||||
@@ -85,7 +88,7 @@ namespace OpenWifi {
|
||||
public:
|
||||
static std::string Name() { return "ip2location"; }
|
||||
inline bool Init() override {
|
||||
Key_ = MicroService::instance().ConfigGetString("iptocountry.ip2location.apikey", "");
|
||||
Key_ = MicroServiceConfigGetString("iptocountry.ip2location.apikey", "");
|
||||
return !Key_.empty();
|
||||
}
|
||||
|
||||
@@ -133,18 +136,22 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
inline int Start() final {
|
||||
ProviderName_ = MicroService::instance().ConfigGetString("iptocountry.provider","");
|
||||
poco_notice(Logger(),"Starting...");
|
||||
ProviderName_ = MicroServiceConfigGetString("iptocountry.provider","");
|
||||
if(!ProviderName_.empty()) {
|
||||
Provider_ = IPLocationProvider<IPToCountryProvider, IPInfo, IPData, IP2Location>(ProviderName_);
|
||||
if(Provider_!= nullptr) {
|
||||
Enabled_ = Provider_->Init();
|
||||
}
|
||||
}
|
||||
Default_ = MicroService::instance().ConfigGetString("iptocountry.default", "US");
|
||||
Default_ = MicroServiceConfigGetString("iptocountry.default", "US");
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline void Stop() final {
|
||||
poco_notice(Logger(),"Stopping...");
|
||||
// Nothing to do - just to provide the same look at the others.
|
||||
poco_notice(Logger(),"Stopped...");
|
||||
}
|
||||
|
||||
[[nodiscard]] static inline std::string ReformatAddress(const std::string & I )
|
||||
|
||||
@@ -3,15 +3,16 @@
|
||||
//
|
||||
|
||||
#include "JobController.h"
|
||||
#include "framework/utils.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
void RegisterJobTypes();
|
||||
|
||||
int JobController::Start() {
|
||||
|
||||
poco_information(Logger(),"Starting...");
|
||||
RegisterJobTypes();
|
||||
|
||||
if(!Running_)
|
||||
Thr_.start(*this);
|
||||
|
||||
@@ -20,8 +21,10 @@ namespace OpenWifi {
|
||||
|
||||
void JobController::Stop() {
|
||||
if(Running_) {
|
||||
poco_information(Logger(),"Stopping...");
|
||||
Running_ = false;
|
||||
Thr_.join();
|
||||
poco_information(Logger(),"Stopped...");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +39,7 @@ namespace OpenWifi {
|
||||
for(auto ¤t_job:jobs_) {
|
||||
if(current_job!=nullptr) {
|
||||
if(current_job->Started()==0 && Pool_.used()<Pool_.available()) {
|
||||
current_job->Logger().information(fmt::format("Starting {}: {}",current_job->JobId(),current_job->Name()));
|
||||
poco_information(current_job->Logger(),fmt::format("Starting {}: {}",current_job->JobId(),current_job->Name()));
|
||||
current_job->Start();
|
||||
Pool_.start(*current_job);
|
||||
}
|
||||
@@ -46,7 +49,7 @@ namespace OpenWifi {
|
||||
for(auto it = jobs_.begin(); it!=jobs_.end();) {\
|
||||
auto current_job = *it;
|
||||
if(current_job!=nullptr && current_job->Completed()!=0) {
|
||||
current_job->Logger().information(fmt::format("Completed {}: {}",current_job->JobId(),current_job->Name()));
|
||||
poco_information(current_job->Logger(),fmt::format("Completed {}: {}",current_job->JobId(),current_job->Name()));
|
||||
it = jobs_.erase(it);
|
||||
delete current_job;
|
||||
} else {
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
#include <utility>
|
||||
#include <functional>
|
||||
#include <list>
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
#include "RESTObjects/RESTAPI_SecurityObjects.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -30,10 +32,10 @@ namespace OpenWifi {
|
||||
const std::string & JobId() const { return jobId_; }
|
||||
const std::string & Parameter(int x) const { return parameters_[x];}
|
||||
uint64_t When() const { return when_; }
|
||||
void Start() { started_ = OpenWifi::Now(); }
|
||||
void Start() { started_ = Utils::Now(); }
|
||||
uint64_t Started() const { return started_; }
|
||||
uint64_t Completed() const { return completed_;}
|
||||
void Complete() { completed_ = OpenWifi::Now(); }
|
||||
void Complete() { completed_ = Utils::Now(); }
|
||||
|
||||
private:
|
||||
std::string jobId_;
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/KafkaTopics.h"
|
||||
#include "framework/KafkaManager.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -7,16 +7,17 @@
|
||||
#include "StorageService.h"
|
||||
#include "SerialNumberCache.h"
|
||||
#include "sdks/SDK_sec.h"
|
||||
#include "framework/UI_WebSocketClientServer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
ProvWebSocketClient::ProvWebSocketClient(Poco::Logger &Logger) :
|
||||
Logger_(Logger){
|
||||
WebSocketClientServer()->SetProcessor(this);
|
||||
UI_WebSocketClientServer()->SetProcessor(this);
|
||||
}
|
||||
|
||||
ProvWebSocketClient::~ProvWebSocketClient() {
|
||||
WebSocketClientServer()->SetProcessor(nullptr);
|
||||
UI_WebSocketClientServer()->SetProcessor(nullptr);
|
||||
}
|
||||
|
||||
void ProvWebSocketClient::ws_command_serial_number_search(const Poco::JSON::Object::Ptr &O,
|
||||
@@ -117,11 +118,11 @@ namespace OpenWifi {
|
||||
auto Command = O->get("command").toString();
|
||||
if (Command == "serial_number_search" && O->has("serial_prefix")) {
|
||||
ws_command_serial_number_search(O,Done,Answer);
|
||||
} else if (WebSocketClientServer()->GeoCodeEnabled() && Command == "address_completion" && O->has("address")) {
|
||||
} else if (UI_WebSocketClientServer()->GeoCodeEnabled() && Command == "address_completion" && O->has("address")) {
|
||||
ws_command_address_completion(O,Done,Answer);
|
||||
} else if (WebSocketClientServer()->GeoCodeEnabled() && Command == "subuser_search" && O->has("operatorId")) {
|
||||
} else if (UI_WebSocketClientServer()->GeoCodeEnabled() && Command == "subuser_search" && O->has("operatorId")) {
|
||||
ws_command_subuser_search(O,Done,Answer);
|
||||
} else if (WebSocketClientServer()->GeoCodeEnabled() && Command == "subdevice_search" && O->has("operatorId") && O->has("serial_prefix")) {
|
||||
} else if (UI_WebSocketClientServer()->GeoCodeEnabled() && Command == "subdevice_search" && O->has("operatorId") && O->has("serial_prefix")) {
|
||||
ws_command_subdevice_search(O,Done,Answer);
|
||||
} else if (Command=="exit") {
|
||||
ws_command_exit(O,Done,Answer);
|
||||
@@ -142,7 +143,7 @@ namespace OpenWifi {
|
||||
Poco::URI uri(URI);
|
||||
|
||||
uri.addQueryParameter("address",A);
|
||||
uri.addQueryParameter("key", WebSocketClientServer()->GoogleApiKey());
|
||||
uri.addQueryParameter("key", UI_WebSocketClientServer()->GoogleApiKey());
|
||||
|
||||
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort());
|
||||
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, uri.getPathAndQuery(), Poco::Net::HTTPMessage::HTTP_1_1);
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/UI_WebSocketClientServer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class ProvWebSocketClient : public WebSocketClientProcessor {
|
||||
class ProvWebSocketClient : public UI_WebSocketClientProcessor {
|
||||
public:
|
||||
explicit ProvWebSocketClient(Poco::Logger &Logger);
|
||||
virtual ~ProvWebSocketClient();
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_asset_server : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_asset_server(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer &Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_asset_server(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting &Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>
|
||||
{
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
// Arilia Wireless Inc.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
#include "RESTAPI_configurations_handler.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
@@ -5,16 +5,15 @@
|
||||
// Created by Stephane Bourque on 2021-03-04.
|
||||
// Arilia Wireless Inc.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_configurations_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_configurations_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_configurations_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_configurations_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_configurations_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_configurations_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_contact_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_contact_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_contact_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,16 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_contact_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_contact_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_contact_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "StorageService.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/ConfigurationValidator.h"
|
||||
#include "sdks/SDK_sec.h"
|
||||
#include "Poco/StringTokenizer.h"
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include "StorageService.h"
|
||||
#include "RESTAPI_db_helpers.h"
|
||||
|
||||
#include "framework/CIDR.h"
|
||||
|
||||
namespace OpenWifi{
|
||||
|
||||
void RESTAPI_entity_handler::DoGet() {
|
||||
@@ -78,7 +80,7 @@ namespace OpenWifi{
|
||||
|
||||
// When creating an entity, it cannot have any relations other that parent, notes, name, description. Everything else
|
||||
// must be conveyed through PUT.
|
||||
NewEntity.info.id = (UUID==EntityDB::RootUUID()) ? UUID : MicroService::CreateUUID();
|
||||
NewEntity.info.id = (UUID==EntityDB::RootUUID()) ? UUID : MicroServiceCreateUUID();
|
||||
|
||||
if(UUID==EntityDB::RootUUID()) {
|
||||
NewEntity.parent="";
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_entity_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_entity_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_entity_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
// Arilia Wireless Inc.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "RESTAPI_entity_list_handler.h"
|
||||
#include "StorageService.h"
|
||||
#include "RESTAPI_db_helpers.h"
|
||||
|
||||
@@ -8,14 +8,13 @@
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_entity_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_entity_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_entity_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "RESTAPI/RESTAPI_db_helpers.h"
|
||||
#include "SerialNumberCache.h"
|
||||
#include "DeviceTypeCache.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi{
|
||||
|
||||
@@ -37,17 +38,17 @@ namespace OpenWifi{
|
||||
|
||||
ProvObjects::InventoryTag Existing;
|
||||
std::string SerialNumber = GetBinding(RESTAPI::Protocol::SERIALNUMBER, "");
|
||||
Logger().debug(Poco::format("%s: Retrieving inventory information.", SerialNumber));
|
||||
poco_debug(Logger(),fmt::format("{}: Retrieving inventory information.", SerialNumber));
|
||||
if (SerialNumber.empty() || !DB_.GetRecord(RESTAPI::Protocol::SERIALNUMBER, SerialNumber, Existing)) {
|
||||
return NotFound();
|
||||
}
|
||||
Logger().debug(
|
||||
Poco::format("%s,%s: Retrieving inventory information.", Existing.serialNumber, Existing.info.id));
|
||||
poco_debug(Logger(), fmt::format("{},{}: Retrieving inventory information.", Existing.serialNumber, Existing.info.id));
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
std::string Arg;
|
||||
if (HasParameter("config", Arg) && Arg == "true") {
|
||||
bool Explain = (HasParameter("explain", Arg) && Arg == "true");
|
||||
if (GetBoolParameter("config", false)) {
|
||||
bool Explain = GetBoolParameter("explain", false);
|
||||
|
||||
APConfig Device(SerialNumber, Existing.deviceType, Logger(), Explain);
|
||||
|
||||
auto Configuration = Poco::makeShared<Poco::JSON::Object>();
|
||||
@@ -82,39 +83,39 @@ namespace OpenWifi{
|
||||
}
|
||||
return ReturnObject(Answer);
|
||||
} else if(GetBoolParameter("applyConfiguration", false)) {
|
||||
Logger().debug(Poco::format("%s: Retrieving configuration.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Retrieving configuration.",Existing.serialNumber));
|
||||
auto Device = std::make_shared<APConfig>(SerialNumber, Existing.deviceType, Logger(), false);
|
||||
auto Configuration = Poco::makeShared<Poco::JSON::Object>();
|
||||
Poco::JSON::Object ErrorsObj, WarningsObj;
|
||||
ProvObjects::InventoryConfigApplyResult Results;
|
||||
Logger().debug(Poco::format("%s: Computing configuration.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Computing configuration.",Existing.serialNumber));
|
||||
if (Device->Get(Configuration)) {
|
||||
std::ostringstream OS;
|
||||
Configuration->stringify(OS);
|
||||
Results.appliedConfiguration = OS.str();
|
||||
auto Response=Poco::makeShared<Poco::JSON::Object>();
|
||||
Logger().debug(Poco::format("%s: Sending configuration push.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Sending configuration push.",Existing.serialNumber));
|
||||
if (SDK::GW::Device::Configure(this, SerialNumber, Configuration, Response)) {
|
||||
Logger().debug(Poco::format("%s: Sending configuration pushed.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Sending configuration pushed.",Existing.serialNumber));
|
||||
GetRejectedLines(Response, Results.warnings);
|
||||
Results.errorCode = 0;
|
||||
} else {
|
||||
Logger().debug(Poco::format("%s: Sending configuration failed.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Sending configuration failed.",Existing.serialNumber));
|
||||
Results.errorCode = 1;
|
||||
}
|
||||
} else {
|
||||
Logger().debug(Poco::format("%s: Configuration is bad.",Existing.serialNumber));
|
||||
poco_debug(Logger(), fmt::format("{}: Configuration is bad.",Existing.serialNumber));
|
||||
Results.errorCode = 1;
|
||||
}
|
||||
Results.to_json(Answer);
|
||||
return ReturnObject(Answer);
|
||||
} else if(GetBoolParameter("resolveConfig", false)) {
|
||||
Logger().debug(Poco::format("%s: Retrieving configuration.",Existing.serialNumber));
|
||||
poco_debug(Logger(),fmt::format("{}: Retrieving configuration.",Existing.serialNumber));
|
||||
auto Device = std::make_shared<APConfig>(SerialNumber, Existing.deviceType, Logger(), false);
|
||||
auto Configuration = Poco::makeShared<Poco::JSON::Object>();
|
||||
Poco::JSON::Object ErrorsObj, WarningsObj;
|
||||
ProvObjects::InventoryConfigApplyResult Results;
|
||||
Logger().debug(Poco::format("%s: Computing configuration.",Existing.serialNumber));
|
||||
poco_debug(Logger(),Poco::format("{}: Computing configuration.",Existing.serialNumber));
|
||||
if (Device->Get(Configuration)) {
|
||||
Answer.set("configuration", Configuration);
|
||||
} else {
|
||||
@@ -278,23 +279,23 @@ namespace OpenWifi{
|
||||
auto RemoveSubscriber = GetParameter("removeSubscriber");
|
||||
if(!RemoveSubscriber.empty()) {
|
||||
if(Existing.subscriber == RemoveSubscriber) {
|
||||
Logger().information(Poco::format("%s: removing subscriber (%s)", SerialNumber, RemoveSubscriber));
|
||||
poco_information(Logger(),fmt::format("{}: removing subscriber ({})", SerialNumber, RemoveSubscriber));
|
||||
ProvObjects::DeviceConfiguration DC;
|
||||
if(StorageService()->ConfigurationDB().GetRecord("id",Existing.deviceConfiguration,DC)) {
|
||||
Logger().information(Poco::format("%s: removing configuration for subscriber (%s)", SerialNumber, RemoveSubscriber));
|
||||
poco_information(Logger(),fmt::format("{}: removing configuration for subscriber ({})", SerialNumber, RemoveSubscriber));
|
||||
if(DC.subscriberOnly) {
|
||||
if(!StorageService()->ConfigurationDB().DeleteRecord("id", Existing.deviceConfiguration)) {
|
||||
Logger().debug("Could not delete the subscriber configuration");
|
||||
poco_debug(Logger(),"Could not delete the subscriber configuration");
|
||||
}
|
||||
}
|
||||
else {
|
||||
Logger().debug("Configurations is not for a subscriber.");
|
||||
poco_debug(Logger(),"Configurations is not for a subscriber.");
|
||||
}
|
||||
Existing.deviceConfiguration = "";
|
||||
}
|
||||
Existing.subscriber = "";
|
||||
Poco::JSON::Object state;
|
||||
state.set("date",OpenWifi::Now());
|
||||
state.set("date",Utils::Now());
|
||||
state.set("method","auto-discovery");
|
||||
state.set("last-operation", "returned to inventory");
|
||||
std::ostringstream OO;
|
||||
@@ -307,7 +308,7 @@ namespace OpenWifi{
|
||||
SDK::GW::Device::SetSubscriber(nullptr, SerialNumber, "");
|
||||
return ReturnObject(Answer);
|
||||
} else {
|
||||
Logger().information(Poco::format("%s: wrong subscriber (%s)", SerialNumber, RemoveSubscriber));
|
||||
poco_information(Logger(),fmt::format("{}: wrong subscriber ({})", SerialNumber, RemoveSubscriber));
|
||||
}
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
@@ -385,6 +386,8 @@ namespace OpenWifi{
|
||||
}
|
||||
}
|
||||
|
||||
AssignIfPresent(RawObject, "doNotAllowOverrides", Existing.doNotAllowOverrides);
|
||||
|
||||
if( RawObject->has("devClass") && NewObject.devClass!= Existing.devClass) {
|
||||
Existing.devClass = NewObject.devClass;
|
||||
}
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_inventory_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_inventory_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_inventory_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -7,15 +7,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_inventory_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_inventory_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_inventory_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_iptocountry_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_iptocountry_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_iptocountry_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{Poco::Net::HTTPRequest::HTTP_GET,
|
||||
Poco::Net::HTTPRequest::HTTP_OPTIONS},
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "StorageService.h"
|
||||
#include "Daemon.h"
|
||||
#include "RESTAPI/RESTAPI_db_helpers.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi{
|
||||
|
||||
@@ -147,7 +148,7 @@ namespace OpenWifi{
|
||||
Existing.phones = NewObject.phones;
|
||||
if(RawObject->has("mobiles"))
|
||||
Existing.mobiles = NewObject.mobiles;
|
||||
Existing.info.modified = OpenWifi::Now();
|
||||
Existing.info.modified = Utils::Now();
|
||||
if(RawObject->has("type"))
|
||||
Existing.type = NewObject.type;
|
||||
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_location_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_location_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_location_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_location_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_location_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_location_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -7,13 +7,14 @@
|
||||
//
|
||||
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_managementPolicy_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_managementPolicy_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_managementPolicy_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -2,14 +2,15 @@
|
||||
// Created by stephane bourque on 2021-08-26.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_managementPolicy_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_managementPolicy_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_managementPolicy_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -2,13 +2,14 @@
|
||||
// Created by stephane bourque on 2021-08-26.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_managementRole_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_managementRole_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_managementRole_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -2,10 +2,7 @@
|
||||
// Created by stephane bourque on 2021-08-26.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
#include "RESTAPI_managementRole_list_handler.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "StorageService.h"
|
||||
#include "RESTAPI/RESTAPI_db_helpers.h"
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
//
|
||||
// Created by stephane bourque on 2021-08-26.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_managementRole_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_managementRole_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_managementRole_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -2,14 +2,13 @@
|
||||
// Created by stephane bourque on 2021-11-09.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_map_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_map_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_map_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
// Created by stephane bourque on 2021-11-09.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_map_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_map_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_map_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_op_contact_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_op_contact_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_op_contact_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
// Created by stephane bourque on 2022-04-07.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_op_contact_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_op_contact_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_op_contact_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_op_location_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_op_location_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_op_location_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_op_location_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_op_location_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_op_location_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "RESTAPI_operators_handler.h"
|
||||
#include "RESTAPI_db_helpers.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -83,10 +84,10 @@ namespace OpenWifi {
|
||||
|
||||
// Create the default service...
|
||||
ProvObjects::ServiceClass DefSer;
|
||||
DefSer.info.id = MicroService::CreateUUID();
|
||||
DefSer.info.id = MicroServiceCreateUUID();
|
||||
DefSer.info.name = "Default Service Class";
|
||||
DefSer.defaultService = true;
|
||||
DefSer.info.created = DefSer.info.modified = OpenWifi::Now();
|
||||
DefSer.info.created = DefSer.info.modified = Utils::Now();
|
||||
DefSer.operatorId = NewObject.info.id;
|
||||
DefSer.period = "monthly";
|
||||
DefSer.billingCode = "basic";
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_operators_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_operators_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_operators_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -2,15 +2,14 @@
|
||||
// Created by stephane bourque on 2022-04-06.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_operators_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_operators_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_operators_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
106
src/RESTAPI/RESTAPI_overrides_handler.cpp
Normal file
106
src/RESTAPI/RESTAPI_overrides_handler.cpp
Normal file
@@ -0,0 +1,106 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-11-03.
|
||||
//
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "RESTAPI_overrides_handler.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
void RESTAPI_overrides_handler::DoGet() {
|
||||
std::string SerialNumber = GetBinding(RESTAPI::Protocol::SERIALNUMBER, "");
|
||||
|
||||
if(!Utils::NormalizeMac(SerialNumber)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidSerialNumber);
|
||||
}
|
||||
|
||||
ProvObjects::ConfigurationOverrideList ExistingObject;
|
||||
if(!DB_.GetRecord("serialNumber", SerialNumber, ExistingObject)) {
|
||||
return NotFound();
|
||||
}
|
||||
Poco::JSON::Object Answer;
|
||||
ExistingObject.to_json(Answer);
|
||||
|
||||
return ReturnObject(Answer);
|
||||
}
|
||||
|
||||
void RESTAPI_overrides_handler::DoDelete() {
|
||||
std::string SerialNumber = GetBinding(RESTAPI::Protocol::SERIALNUMBER, "");
|
||||
|
||||
if(!Utils::NormalizeMac(SerialNumber)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidSerialNumber);
|
||||
}
|
||||
|
||||
auto Source = GetParameter("source","");
|
||||
if(Source.empty()) {
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
|
||||
ProvObjects::ConfigurationOverrideList ExistingObject;
|
||||
if(!DB_.GetRecord("serialNumber", SerialNumber, ExistingObject)) {
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
ExistingObject.overrides.erase( std::remove_if( ExistingObject.overrides.begin(), ExistingObject.overrides.end(),
|
||||
[Source](const ProvObjects::ConfigurationOverride &O) ->bool {
|
||||
return O.source==Source;
|
||||
}),ExistingObject.overrides.end());
|
||||
|
||||
if(DB_.UpdateRecord("serialNumber", SerialNumber, ExistingObject)) {
|
||||
return OK();
|
||||
}
|
||||
return BadRequest(RESTAPI::Errors::NoRecordsDeleted);
|
||||
}
|
||||
|
||||
void RESTAPI_overrides_handler::DoPut() {
|
||||
std::string SerialNumber = GetBinding(RESTAPI::Protocol::SERIALNUMBER, "");
|
||||
|
||||
if(!Utils::NormalizeMac(SerialNumber)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidSerialNumber);
|
||||
}
|
||||
|
||||
auto Source = GetParameter("source","");
|
||||
if(Source.empty()) {
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
|
||||
ProvObjects::ConfigurationOverrideList NewObject;
|
||||
if(!NewObject.from_json(ParsedBody_)) {
|
||||
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
||||
}
|
||||
|
||||
ProvObjects::ConfigurationOverrideList ExistingObject;
|
||||
if(!DB_.GetRecord("serialNumber", SerialNumber, ExistingObject)) {
|
||||
ExistingObject.serialNumber = SerialNumber;
|
||||
DB_.CreateRecord(ExistingObject);
|
||||
} else {
|
||||
// remove all the old records with that source.
|
||||
ExistingObject.overrides.erase( std::remove_if( ExistingObject.overrides.begin(), ExistingObject.overrides.end(),
|
||||
[Source](const ProvObjects::ConfigurationOverride &O) ->bool {
|
||||
return O.source==Source;
|
||||
}),ExistingObject.overrides.end());
|
||||
}
|
||||
|
||||
for(auto & override:NewObject.overrides) {
|
||||
if(override.parameterName.empty()) {
|
||||
continue;
|
||||
}
|
||||
if(override.parameterType!="string" && override.parameterType!="boolean" && override.parameterType!="integer") {
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
override.source = Source;
|
||||
override.modified = Utils::Now();
|
||||
ExistingObject.overrides.emplace_back(override);
|
||||
}
|
||||
|
||||
if(DB_.UpdateRecord("serialNumber",SerialNumber,ExistingObject)) {
|
||||
Poco::JSON::Object Answer;
|
||||
ExistingObject.to_json(Answer);
|
||||
return ReturnObject(Answer);
|
||||
}
|
||||
|
||||
return BadRequest(RESTAPI::Errors::RecordNotUpdated);
|
||||
}
|
||||
|
||||
} // OpenWifi
|
||||
31
src/RESTAPI/RESTAPI_overrides_handler.h
Normal file
31
src/RESTAPI/RESTAPI_overrides_handler.h
Normal file
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-11-03.
|
||||
//
|
||||
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_overrides_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_overrides_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
Poco::Net::HTTPRequest::HTTP_PUT, Poco::Net::HTTPRequest::HTTP_DELETE,
|
||||
Poco::Net::HTTPRequest::HTTP_OPTIONS},
|
||||
Server,
|
||||
TransactionId,
|
||||
Internal){}
|
||||
static auto PathName() { return std::list<std::string>{"/api/v1/configurationOverrides/{serialNumber}"}; };
|
||||
private:
|
||||
OverridesDB &DB_=StorageService()->OverridesDB();
|
||||
void DoGet() final ;
|
||||
void DoPost() final {} ;
|
||||
void DoPut() final ;
|
||||
void DoDelete() final ;
|
||||
};
|
||||
}
|
||||
@@ -2,8 +2,6 @@
|
||||
// Created by stephane bourque on 2021-10-23.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
|
||||
#include "RESTAPI/RESTAPI_entity_handler.h"
|
||||
#include "RESTAPI/RESTAPI_contact_handler.h"
|
||||
#include "RESTAPI/RESTAPI_location_handler.h"
|
||||
@@ -36,12 +34,15 @@
|
||||
#include "RESTAPI/RESTAPI_op_contact_list_handler.h"
|
||||
#include "RESTAPI/RESTAPI_op_location_handler.h"
|
||||
#include "RESTAPI/RESTAPI_op_location_list_handler.h"
|
||||
#include "RESTAPI/RESTAPI_overrides_handler.h"
|
||||
|
||||
#include "framework/RESTAPI_SystemCommand.h"
|
||||
#include "framework/RESTAPI_WebSocketServer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
Poco::Net::HTTPRequestHandler * RESTAPI_ExtRouter(const std::string &Path, RESTAPIHandler::BindingMap &Bindings,
|
||||
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
||||
Poco::Logger & L, RESTAPI_GenericServerAccounting & S, uint64_t TransactionId) {
|
||||
return RESTAPI_Router<
|
||||
RESTAPI_system_command,
|
||||
RESTAPI_entity_handler,
|
||||
@@ -76,12 +77,13 @@ namespace OpenWifi {
|
||||
RESTAPI_op_contact_list_handler,
|
||||
RESTAPI_op_location_handler,
|
||||
RESTAPI_op_location_list_handler,
|
||||
RESTAPI_asset_server
|
||||
RESTAPI_asset_server,
|
||||
RESTAPI_overrides_handler
|
||||
>(Path,Bindings,L, S, TransactionId);
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler * RESTAPI_IntRouter(const std::string &Path, RESTAPIHandler::BindingMap &Bindings,
|
||||
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
||||
Poco::Logger & L, RESTAPI_GenericServerAccounting & S, uint64_t TransactionId) {
|
||||
return RESTAPI_Router_I<
|
||||
RESTAPI_system_command,
|
||||
RESTAPI_entity_handler,
|
||||
@@ -115,7 +117,8 @@ namespace OpenWifi {
|
||||
RESTAPI_op_contact_handler,
|
||||
RESTAPI_op_contact_list_handler,
|
||||
RESTAPI_op_location_handler,
|
||||
RESTAPI_op_location_list_handler
|
||||
RESTAPI_op_location_list_handler,
|
||||
RESTAPI_overrides_handler
|
||||
>(Path, Bindings, L, S, TransactionId);
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_service_class_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_service_class_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_service_class_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_service_class_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_service_class_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_service_class_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
#include "RESTAPI_signup_handler.h"
|
||||
#include "StorageService.h"
|
||||
#include "Signup.h"
|
||||
#include "framework/OpenAPIRequests.h"
|
||||
#include "framework/MicroServiceNames.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -59,7 +63,7 @@ namespace OpenWifi {
|
||||
if (i.statusCode == ProvObjects::SignupStatusCodes::SignupWaitingForEmail ||
|
||||
i.statusCode == ProvObjects::SignupStatusCodes::SignupWaitingForDevice ||
|
||||
i.statusCode == ProvObjects::SignupStatusCodes::SignupSuccess ) {
|
||||
Logger().information(fmt::format("SIGNUP: Returning existing signup record for '{}'",i.email));
|
||||
poco_debug(Logger(),fmt::format("SIGNUP: Returning existing signup record for '{}'",i.email));
|
||||
Poco::JSON::Object Answer;
|
||||
i.to_json(Answer);
|
||||
return ReturnObject(Answer);
|
||||
@@ -93,8 +97,8 @@ namespace OpenWifi {
|
||||
// OK, we can claim this device, can we create a userid?
|
||||
// Let's create one
|
||||
// If sec.signup("email",uuid);
|
||||
auto SignupUUID = MicroService::instance().CreateUUID();
|
||||
Logger().information(fmt::format("SIGNUP: Creating signup entry for '{}', uuid='{}'",UserName, SignupUUID));
|
||||
auto SignupUUID = MicroServiceCreateUUID();
|
||||
poco_debug(Logger(),fmt::format("SIGNUP: Creating signup entry for '{}', uuid='{}'",UserName, SignupUUID));
|
||||
|
||||
Poco::JSON::Object Body;
|
||||
OpenAPIRequestPost CreateUser( uSERVICE_SECURITY, "/api/v1/signup", {
|
||||
@@ -111,12 +115,12 @@ namespace OpenWifi {
|
||||
UI.from_json(Answer);
|
||||
std::ostringstream os;
|
||||
Answer->stringify(os);
|
||||
Logger().information(fmt::format("SIGNUP: email: '{}' signupID: '{}' userId: '{}'", UserName, SignupUUID, UI.id));
|
||||
poco_debug(Logger(),fmt::format("SIGNUP: email: '{}' signupID: '{}' userId: '{}'", UserName, SignupUUID, UI.id));
|
||||
|
||||
// so create the Signup entry and modify the inventory
|
||||
ProvObjects::SignupEntry SE;
|
||||
SE.info.id = SignupUUID;
|
||||
SE.info.created = SE.info.modified = SE.submitted = OpenWifi::Now();
|
||||
SE.info.created = SE.info.modified = SE.submitted = Utils::Now();
|
||||
SE.completed = 0 ;
|
||||
SE.macAddress = macAddress;
|
||||
SE.error = 0 ;
|
||||
@@ -137,13 +141,13 @@ namespace OpenWifi {
|
||||
StateDoc.set("claimerId", UI.id);
|
||||
StateDoc.set("signupUUID", SignupUUID);
|
||||
StateDoc.set("errorCode",0);
|
||||
StateDoc.set("date", OpenWifi::Now());
|
||||
StateDoc.set("date", Utils::Now());
|
||||
StateDoc.set("status", "waiting for email-verification");
|
||||
std::ostringstream os2;
|
||||
StateDoc.stringify(os2);
|
||||
IT.realMacAddress = macAddress;
|
||||
IT.state = os2.str();
|
||||
IT.info.modified = OpenWifi::Now();
|
||||
IT.info.modified = Utils::Now();
|
||||
std::cout << "Updating inventory entry: " << SE.macAddress << std::endl;
|
||||
StorageService()->InventoryDB().UpdateRecord("id",IT.info.id,IT);
|
||||
}
|
||||
@@ -160,22 +164,22 @@ namespace OpenWifi {
|
||||
auto SignupUUID = GetParameter("signupUUID");
|
||||
auto Operation = GetParameter("operation");
|
||||
|
||||
Logger().information(fmt::format("signup-progress: {} - {} ", SignupUUID, Operation));
|
||||
poco_information(Logger(),fmt::format("signup-progress: {} - {} ", SignupUUID, Operation));
|
||||
if(SignupUUID.empty() || Operation.empty()) {
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
|
||||
ProvObjects::SignupEntry SE;
|
||||
Logger().information(fmt::format("signup-progress: {} - {} fetching entry", SignupUUID, Operation));
|
||||
poco_information(Logger(),fmt::format("signup-progress: {} - {} fetching entry", SignupUUID, Operation));
|
||||
if(!StorageService()->SignupDB().GetRecord("id",SignupUUID,SE)) {
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
Logger().information(fmt::format("signup-progress: {} - {} fetching entry", SignupUUID, Operation));
|
||||
poco_debug(Logger(),fmt::format("signup-progress: {} - {} fetching entry", SignupUUID, Operation));
|
||||
if(Operation == "emailVerified" && SE.statusCode==ProvObjects::SignupStatusCodes::SignupWaitingForEmail) {
|
||||
Logger().information(fmt::format("{}: email {} verified.",SE.info.id, SE.email));
|
||||
poco_information(Logger(),fmt::format("{}: email {} verified.",SE.info.id, SE.email));
|
||||
std::cout << "Verified email for : " << SE.email << std::endl;
|
||||
SE.info.modified = OpenWifi::Now();
|
||||
SE.info.modified = Utils::Now();
|
||||
SE.status = "emailVerified";
|
||||
SE.statusCode = ProvObjects::SignupStatusCodes::SignupWaitingForDevice;
|
||||
StorageService()->SignupDB().UpdateRecord("id", SE.info.id, SE);
|
||||
@@ -184,7 +188,7 @@ namespace OpenWifi {
|
||||
SE.to_json(Answer);
|
||||
return ReturnObject(Answer);
|
||||
}
|
||||
Logger().information(fmt::format("signup-progress: {} - {} something is bad", SignupUUID, Operation));
|
||||
poco_information(Logger(),fmt::format("signup-progress: {} - {} something is bad", SignupUUID, Operation));
|
||||
|
||||
return BadRequest(RESTAPI::Errors::UnknownId);
|
||||
}
|
||||
@@ -195,11 +199,11 @@ namespace OpenWifi {
|
||||
auto macAddress = GetParameter("macAddress");
|
||||
auto List = GetBoolParameter("listOnly",false);
|
||||
|
||||
Logger().information(fmt::format("Looking for signup for {}",EMail));
|
||||
poco_information(Logger(),fmt::format("Looking for signup for {}",EMail));
|
||||
Poco::JSON::Object Answer;
|
||||
ProvObjects::SignupEntry SE;
|
||||
if(!SignupUUID.empty()) {
|
||||
Logger().information(fmt::format("Looking for signup for {}: Signup {}",EMail, SignupUUID));
|
||||
poco_information(Logger(),fmt::format("Looking for signup for {}: Signup {}",EMail, SignupUUID));
|
||||
if(StorageService()->SignupDB().GetRecord("id", SignupUUID, SE)) {
|
||||
SE.to_json(Answer);
|
||||
return ReturnObject(Answer);
|
||||
@@ -207,25 +211,25 @@ namespace OpenWifi {
|
||||
return NotFound();
|
||||
} else if(!EMail.empty()) {
|
||||
SignupDB::RecordVec SEs;
|
||||
Logger().information(fmt::format("Looking for signup for {}: Signup {}",EMail, SignupUUID));
|
||||
poco_information(Logger(),fmt::format("Looking for signup for {}: Signup {}",EMail, SignupUUID));
|
||||
if(StorageService()->SignupDB().GetRecords(0,100,SEs, " email='"+EMail+"' ")) {
|
||||
return ReturnObject("signups",SEs);
|
||||
}
|
||||
return NotFound();
|
||||
} else if(!macAddress.empty()) {
|
||||
SignupDB::RecordVec SEs;
|
||||
Logger().information(fmt::format("Looking for signup for {}: Mac {}",EMail, macAddress));
|
||||
poco_information(Logger(),fmt::format("Looking for signup for {}: Mac {}",EMail, macAddress));
|
||||
if(StorageService()->SignupDB().GetRecords(0,100,SEs, " serialNumber='"+macAddress+"' ")) {
|
||||
return ReturnObject("signups",SEs);
|
||||
}
|
||||
return NotFound();
|
||||
} else if(List) {
|
||||
Logger().information(fmt::format("Returning list of signups...",EMail, macAddress));
|
||||
poco_information(Logger(),fmt::format("Returning list of signups...",EMail, macAddress));
|
||||
SignupDB::RecordVec SEs;
|
||||
StorageService()->SignupDB().GetRecords(0,100,SEs);
|
||||
return ReturnObject("signups",SEs);
|
||||
}
|
||||
Logger().information(fmt::format("Bad signup get",EMail, macAddress));
|
||||
poco_information(Logger(),fmt::format("Bad signup get",EMail, macAddress));
|
||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_signup_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_signup_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_signup_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,14 +3,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_sub_devices_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_sub_devices_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_sub_devices_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_sub_devices_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_sub_devices_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_sub_devices_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-02-23.
|
||||
//
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#pragma once
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_variables_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_variables_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_variables_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_variables_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_variables_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_variables_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#include "Tasks/VenueConfigUpdater.h"
|
||||
#include "Tasks/VenueRebooter.h"
|
||||
#include "Tasks/VenueUpgrade.h"
|
||||
#include "framework/CIDR.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
|
||||
#include "Kafka_ProvUpdater.h"
|
||||
|
||||
@@ -228,7 +230,7 @@ namespace OpenWifi{
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
SNL.serialNumbers = Existing.devices;
|
||||
auto JobId = MicroService::instance().CreateUUID();
|
||||
auto JobId = MicroServiceCreateUUID();
|
||||
Types::StringVec Parameters{UUID};;
|
||||
auto NewJob = new VenueConfigUpdater(JobId,"VenueConfigurationUpdater", Parameters, 0, UserInfo_.userinfo, Logger());
|
||||
JobController()->AddJob(dynamic_cast<Job*>(NewJob));
|
||||
@@ -242,7 +244,7 @@ namespace OpenWifi{
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
SNL.serialNumbers = Existing.devices;
|
||||
auto JobId = MicroService::instance().CreateUUID();
|
||||
auto JobId = MicroServiceCreateUUID();
|
||||
Types::StringVec Parameters{UUID};;
|
||||
auto NewJob = new VenueUpgrade(JobId,"VenueFirmwareUpgrade", Parameters, 0, UserInfo_.userinfo, Logger());
|
||||
JobController()->AddJob(dynamic_cast<Job*>(NewJob));
|
||||
@@ -256,7 +258,7 @@ namespace OpenWifi{
|
||||
|
||||
Poco::JSON::Object Answer;
|
||||
SNL.serialNumbers = Existing.devices;
|
||||
auto JobId = MicroService::instance().CreateUUID();
|
||||
auto JobId = MicroServiceCreateUUID();
|
||||
Types::StringVec Parameters{UUID};;
|
||||
auto NewJob = new VenueRebooter(JobId,"VenueRebooter", Parameters, 0, UserInfo_.userinfo, Logger());
|
||||
JobController()->AddJob(dynamic_cast<Job*>(NewJob));
|
||||
|
||||
@@ -7,14 +7,13 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class RESTAPI_venue_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_venue_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_venue_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET, Poco::Net::HTTPRequest::HTTP_POST,
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_Handler.h"
|
||||
#include "StorageService.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
class RESTAPI_venue_list_handler : public RESTAPIHandler {
|
||||
public:
|
||||
RESTAPI_venue_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
||||
RESTAPI_venue_list_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServerAccounting & Server, uint64_t TransactionId, bool Internal)
|
||||
: RESTAPIHandler(bindings, L,
|
||||
std::vector<std::string>{
|
||||
Poco::Net::HTTPRequest::HTTP_GET,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#include "RESTAPI_AnalyticsObjects.h"
|
||||
#include "RESTAPI_ProvObjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "RESTAPI_ProvObjects.h"
|
||||
#include "framework/utils.h"
|
||||
#include <vector>
|
||||
|
||||
namespace OpenWifi {
|
||||
@@ -375,7 +376,7 @@ namespace OpenWifi {
|
||||
};
|
||||
|
||||
struct WifiClientHistory {
|
||||
uint64_t timestamp=OpenWifi::Now();
|
||||
uint64_t timestamp=Utils::Now();
|
||||
std::string station_id;
|
||||
std::string bssid;
|
||||
std::string ssid;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
//
|
||||
|
||||
#include "RESTAPI_CertObjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
@@ -154,6 +154,7 @@ namespace OpenWifi::CertObjects {
|
||||
field_to_json(Obj,"submitted", submitted);
|
||||
field_to_json(Obj,"started", started);
|
||||
field_to_json(Obj,"completed", completed);
|
||||
field_to_json(Obj,"requesterUsername", requesterUsername);
|
||||
}
|
||||
|
||||
bool JobEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
@@ -171,6 +172,7 @@ namespace OpenWifi::CertObjects {
|
||||
field_from_json(Obj,"submitted", submitted);
|
||||
field_from_json(Obj,"started", started);
|
||||
field_from_json(Obj,"completed", completed);
|
||||
field_from_json(Obj,"requesterUsername", requesterUsername);
|
||||
return true;
|
||||
} catch (...) {
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ namespace OpenWifi::CertObjects {
|
||||
uint64_t submitted=0;
|
||||
uint64_t started=0;
|
||||
uint64_t completed=0;
|
||||
std::string requesterUsername;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
//
|
||||
|
||||
#include "RESTAPI_FMSObjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
@@ -233,7 +234,7 @@ namespace OpenWifi::FMSObjects {
|
||||
UnknownFirmwares_.clear();
|
||||
totalSecondsOld_.clear();
|
||||
numberOfDevices = 0 ;
|
||||
snapshot = OpenWifi::Now();
|
||||
snapshot = Utils::Now();
|
||||
}
|
||||
|
||||
bool DeviceReport::from_json([[maybe_unused]] const Poco::JSON::Object::Ptr &Obj) {
|
||||
|
||||
@@ -11,12 +11,13 @@
|
||||
|
||||
#include "Daemon.h"
|
||||
#ifdef TIP_GATEWAY_SERVICE
|
||||
#include "DeviceRegistry.h"
|
||||
#include "AP_WS_Server.h"
|
||||
#include "CapabilitiesCache.h"
|
||||
#endif
|
||||
|
||||
#include "RESTAPI_GWobjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
@@ -49,6 +50,8 @@ namespace OpenWifi::GWObjects {
|
||||
field_to_json(Obj,"entity", entity);
|
||||
field_to_json(Obj,"modified", modified);
|
||||
field_to_json(Obj,"locale", locale);
|
||||
field_to_json(Obj,"restrictedDevice", restrictedDevice);
|
||||
|
||||
}
|
||||
|
||||
void Device::to_json_with_status(Poco::JSON::Object &Obj) const {
|
||||
@@ -57,7 +60,7 @@ namespace OpenWifi::GWObjects {
|
||||
#ifdef TIP_GATEWAY_SERVICE
|
||||
ConnectionState ConState;
|
||||
|
||||
if (DeviceRegistry()->GetState(SerialNumber, ConState)) {
|
||||
if (AP_WS_Server()->GetState(SerialNumber, ConState)) {
|
||||
ConState.to_json(Obj);
|
||||
} else {
|
||||
field_to_json(Obj,"ipAddress", "");
|
||||
@@ -69,6 +72,7 @@ namespace OpenWifi::GWObjects {
|
||||
field_to_json(Obj,"verifiedCertificate", "NO_CERTIFICATE");
|
||||
field_to_json(Obj,"associations_2G", (uint64_t) 0);
|
||||
field_to_json(Obj,"associations_5G", (uint64_t) 0);
|
||||
field_to_json(Obj,"associations_6G", (uint64_t) 0);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -88,6 +92,7 @@ namespace OpenWifi::GWObjects {
|
||||
field_from_json(Obj,"subscriber", subscriber);
|
||||
field_from_json(Obj,"entity", entity);
|
||||
field_from_json(Obj,"locale", locale);
|
||||
field_from_json(Obj,"restrictedDevice", restrictedDevice);
|
||||
return true;
|
||||
} catch (const Poco::Exception &E) {
|
||||
}
|
||||
@@ -198,6 +203,7 @@ namespace OpenWifi::GWObjects {
|
||||
field_to_json(Obj,"lastContact", LastContact);
|
||||
field_to_json(Obj,"associations_2G", Associations_2G);
|
||||
field_to_json(Obj,"associations_5G", Associations_5G);
|
||||
field_to_json(Obj,"associations_6G", Associations_6G);
|
||||
field_to_json(Obj,"webSocketClients", webSocketClients);
|
||||
field_to_json(Obj,"websocketPackets", websocketPackets);
|
||||
field_to_json(Obj,"kafkaClients", kafkaClients);
|
||||
@@ -206,7 +212,8 @@ namespace OpenWifi::GWObjects {
|
||||
field_to_json(Obj,"started", started);
|
||||
field_to_json(Obj,"sessionId", sessionId);
|
||||
field_to_json(Obj,"connectionCompletionTime", connectionCompletionTime);
|
||||
field_to_json(Obj,"totalConnectionTime", OpenWifi::Now() - started);
|
||||
field_to_json(Obj,"totalConnectionTime", Utils::Now() - started);
|
||||
field_to_json(Obj,"certificateExpiryDate", certificateExpiryDate);
|
||||
|
||||
switch(VerifiedCertificate) {
|
||||
case NO_CERTIFICATE:
|
||||
@@ -225,12 +232,14 @@ namespace OpenWifi::GWObjects {
|
||||
void DeviceConnectionStatistics::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"averageConnectionTime", averageConnectionTime);
|
||||
field_to_json(Obj,"connectedDevices", connectedDevices );
|
||||
field_to_json(Obj,"connectingDevices", connectingDevices );
|
||||
}
|
||||
|
||||
bool DeviceConnectionStatistics::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj,"averageConnectionTime", averageConnectionTime);
|
||||
field_from_json(Obj,"connectedDevices", connectedDevices );
|
||||
field_from_json(Obj,"connectingDevices", connectingDevices );
|
||||
return true;
|
||||
} catch (const Poco::Exception &E) {
|
||||
}
|
||||
@@ -283,7 +292,7 @@ namespace OpenWifi::GWObjects {
|
||||
lastContact.clear();
|
||||
associations.clear();
|
||||
numberOfDevices = 0 ;
|
||||
snapshot = OpenWifi::Now();
|
||||
snapshot = Utils::Now();
|
||||
}
|
||||
|
||||
void CapabilitiesModel::to_json(Poco::JSON::Object &Obj) const{
|
||||
@@ -295,9 +304,12 @@ namespace OpenWifi::GWObjects {
|
||||
field_to_json(Obj,"serialNumber",serialNumber);
|
||||
field_to_json(Obj,"timeout",timeout);
|
||||
field_to_json(Obj,"type",type);
|
||||
field_to_json(Obj,"script",script);
|
||||
field_to_json(Obj,"scriptId",scriptId);
|
||||
field_to_json(Obj,"script",script);
|
||||
field_to_json(Obj,"when",when);
|
||||
field_to_json(Obj,"signature", signature);
|
||||
field_to_json(Obj,"deferred", deferred);
|
||||
field_to_json(Obj,"uri", uri);
|
||||
}
|
||||
|
||||
bool ScriptRequest::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
@@ -308,6 +320,9 @@ namespace OpenWifi::GWObjects {
|
||||
field_from_json(Obj,"script",script);
|
||||
field_from_json(Obj,"scriptId",scriptId);
|
||||
field_from_json(Obj,"when",when);
|
||||
field_from_json(Obj,"signature", signature);
|
||||
field_from_json(Obj,"deferred", deferred);
|
||||
field_from_json(Obj,"uri", uri);
|
||||
return true;
|
||||
} catch (const Poco::Exception &E) {
|
||||
}
|
||||
@@ -409,5 +424,56 @@ namespace OpenWifi::GWObjects {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ScriptEntry::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"id", id);
|
||||
field_to_json(Obj,"name", name);
|
||||
field_to_json(Obj,"description", description);
|
||||
field_to_json(Obj,"uri", uri);
|
||||
field_to_json(Obj,"content", content);
|
||||
field_to_json(Obj,"version", version);
|
||||
field_to_json(Obj,"type", type);
|
||||
field_to_json(Obj,"created", created);
|
||||
field_to_json(Obj,"modified", modified);
|
||||
field_to_json(Obj,"author", author);
|
||||
field_to_json(Obj,"restricted", restricted);
|
||||
field_to_json(Obj,"deferred", deferred);
|
||||
field_to_json(Obj,"timeout", timeout);
|
||||
}
|
||||
|
||||
bool ScriptEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj,"id", id);
|
||||
field_from_json(Obj,"name", name);
|
||||
field_from_json(Obj,"description", description);
|
||||
field_from_json(Obj,"uri", uri);
|
||||
field_from_json(Obj,"content", content);
|
||||
field_from_json(Obj,"version", version);
|
||||
field_from_json(Obj,"type", type);
|
||||
field_from_json(Obj,"created", created);
|
||||
field_from_json(Obj,"modified", modified);
|
||||
field_from_json(Obj,"author", author);
|
||||
field_from_json(Obj,"restricted", restricted);
|
||||
field_from_json(Obj,"deferred", deferred);
|
||||
field_from_json(Obj,"timeout", timeout);
|
||||
return true;
|
||||
} catch (const Poco::Exception &E) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ScriptEntryList::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"scripts",scripts);
|
||||
}
|
||||
|
||||
bool ScriptEntryList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj,"scripts",scripts);
|
||||
return true;
|
||||
} catch (const Poco::Exception &E) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -28,19 +28,21 @@ namespace OpenWifi::GWObjects {
|
||||
uint64_t TX = 0, RX = 0;
|
||||
uint64_t Associations_2G=0;
|
||||
uint64_t Associations_5G=0;
|
||||
uint64_t Associations_6G=0;
|
||||
bool Connected = false;
|
||||
uint64_t LastContact=0;
|
||||
std::string Firmware;
|
||||
CertificateValidation VerifiedCertificate = NO_CERTIFICATE;
|
||||
std::string Compatible;
|
||||
uint64_t kafkaClients=0;
|
||||
uint64_t webSocketClients=0;
|
||||
uint64_t kafkaPackets=0;
|
||||
uint64_t websocketPackets=0;
|
||||
std::string locale;
|
||||
uint64_t started=0;
|
||||
uint64_t sessionId=0;
|
||||
double connectionCompletionTime=0.0;
|
||||
std::string Compatible;
|
||||
uint64_t kafkaClients=0;
|
||||
uint64_t webSocketClients=0;
|
||||
uint64_t kafkaPackets=0;
|
||||
uint64_t websocketPackets=0;
|
||||
std::string locale;
|
||||
uint64_t started=0;
|
||||
uint64_t sessionId=0;
|
||||
double connectionCompletionTime=0.0;
|
||||
std::uint64_t certificateExpiryDate=0;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
};
|
||||
@@ -68,6 +70,7 @@ namespace OpenWifi::GWObjects {
|
||||
std::string entity;
|
||||
uint64_t modified=0;
|
||||
std::string locale;
|
||||
bool restrictedDevice=false;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
void to_json_with_status(Poco::JSON::Object &Obj) const;
|
||||
@@ -78,6 +81,8 @@ namespace OpenWifi::GWObjects {
|
||||
struct DeviceConnectionStatistics {
|
||||
std::uint64_t connectedDevices = 0;
|
||||
std::uint64_t averageConnectionTime = 0;
|
||||
std::uint64_t connectingDevices = 0;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
@@ -211,13 +216,43 @@ namespace OpenWifi::GWObjects {
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
};
|
||||
|
||||
struct ScriptEntry {
|
||||
std::string id;
|
||||
std::string name;
|
||||
std::string description;
|
||||
std::string uri;
|
||||
std::string content;
|
||||
std::string version;
|
||||
std::string type;
|
||||
std::uint64_t created;
|
||||
std::uint64_t modified;
|
||||
std::string author;
|
||||
Types::StringVec restricted;
|
||||
bool deferred=false;
|
||||
std::uint64_t timeout=30;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ScriptEntryList {
|
||||
std::vector<ScriptEntry> scripts;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ScriptRequest {
|
||||
uint64_t timeout=30;
|
||||
std::string serialNumber;
|
||||
uint64_t timeout=30;
|
||||
std::string type;
|
||||
std::string script;
|
||||
std::string scriptId;
|
||||
uint64_t when=0;
|
||||
std::uint64_t when;
|
||||
std::string signature;
|
||||
bool deferred;
|
||||
std::string uri;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// Created by stephane bourque on 2021-08-31.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
|
||||
|
||||
#include "RESTAPI_ProvObjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
@@ -600,6 +602,7 @@ namespace OpenWifi::ProvObjects {
|
||||
field_to_json( Obj, "devClass",devClass);
|
||||
field_to_json( Obj, "locale",locale);
|
||||
field_to_json( Obj, "realMacAddress",realMacAddress);
|
||||
field_to_json( Obj, "doNotAllowOverrides",doNotAllowOverrides);
|
||||
}
|
||||
|
||||
bool InventoryTag::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
@@ -621,6 +624,7 @@ namespace OpenWifi::ProvObjects {
|
||||
field_from_json( Obj,"devClass",devClass);
|
||||
field_from_json( Obj,"locale",locale);
|
||||
field_from_json( Obj,"realMacAddress",realMacAddress);
|
||||
field_from_json( Obj, "doNotAllowOverrides",doNotAllowOverrides);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
@@ -1091,7 +1095,7 @@ namespace OpenWifi::ProvObjects {
|
||||
}
|
||||
|
||||
bool UpdateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
||||
uint64_t Now = OpenWifi::Now();
|
||||
uint64_t Now = Utils::Now();
|
||||
if(O->has("name"))
|
||||
I.name = O->get("name").toString();
|
||||
|
||||
@@ -1112,7 +1116,7 @@ namespace OpenWifi::ProvObjects {
|
||||
}
|
||||
|
||||
bool CreateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
||||
uint64_t Now = OpenWifi::Now();
|
||||
uint64_t Now = Utils::Now();
|
||||
if(O->has("name"))
|
||||
I.name = O->get("name").toString();
|
||||
|
||||
@@ -1130,14 +1134,14 @@ namespace OpenWifi::ProvObjects {
|
||||
}
|
||||
I.notes = N;
|
||||
I.modified = I.created = Now;
|
||||
I.id = MicroService::CreateUUID();
|
||||
I.id = MicroServiceCreateUUID();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CreateObjectInfo([[maybe_unused]] const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
||||
I.modified = I.created = OpenWifi::Now();
|
||||
I.id = MicroService::CreateUUID();
|
||||
I.modified = I.created = Utils::Now();
|
||||
I.id = MicroServiceCreateUUID();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1193,6 +1197,48 @@ namespace OpenWifi::ProvObjects {
|
||||
return false;
|
||||
}
|
||||
|
||||
void ConfigurationOverride::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"source",source);
|
||||
field_to_json(Obj,"reason",reason);
|
||||
field_to_json(Obj,"parameterName",parameterName);
|
||||
field_to_json(Obj,"parameterType",parameterType);
|
||||
field_to_json(Obj,"parameterValue",parameterValue);
|
||||
field_to_json(Obj,"modified",modified);
|
||||
}
|
||||
|
||||
bool ConfigurationOverride::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj,"source",source);
|
||||
field_from_json(Obj,"reason",reason);
|
||||
field_from_json(Obj,"parameterName",parameterName);
|
||||
field_from_json(Obj,"parameterType",parameterType);
|
||||
field_from_json(Obj,"parameterValue",parameterValue);
|
||||
field_from_json(Obj,"modified",modified);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ConfigurationOverrideList::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj,"serialNumber",serialNumber);
|
||||
field_to_json(Obj,"managementPolicy",managementPolicy);
|
||||
field_to_json(Obj,"overrides",overrides);
|
||||
}
|
||||
|
||||
bool ConfigurationOverrideList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj,"serialNumber",serialNumber);
|
||||
field_from_json(Obj,"managementPolicy",managementPolicy);
|
||||
field_from_json(Obj,"overrides",overrides);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include "RESTAPI_SecurityObjects.h"
|
||||
#include "RESTObjects/RESTAPI_SecurityObjects.h"
|
||||
|
||||
namespace OpenWifi::ProvObjects {
|
||||
|
||||
@@ -429,6 +428,7 @@ namespace OpenWifi::ProvObjects {
|
||||
std::string devClass;
|
||||
std::string locale;
|
||||
std::string realMacAddress;
|
||||
bool doNotAllowOverrides=false;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
@@ -694,6 +694,27 @@ namespace OpenWifi::ProvObjects {
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ConfigurationOverride {
|
||||
std::string source;
|
||||
std::string reason;
|
||||
std::string parameterName;
|
||||
std::string parameterType;
|
||||
std::string parameterValue;
|
||||
std::uint64_t modified;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ConfigurationOverrideList {
|
||||
std::string serialNumber;
|
||||
Types::UUID_t managementPolicy;
|
||||
std::vector<ConfigurationOverride> overrides;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
bool UpdateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I);
|
||||
bool CreateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I);
|
||||
bool CreateObjectInfo(const SecurityObjects::UserInfo &U, ObjectInfo &I);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "Poco/JSON/Parser.h"
|
||||
#include "Poco/JSON/Stringifier.h"
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
#include "RESTAPI_SecurityObjects.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
@@ -433,7 +433,7 @@ namespace OpenWifi::SecurityObjects {
|
||||
SecurityObjects::NoteInfoVec NIV;
|
||||
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(Obj->get("notes").toString());
|
||||
for(auto const &i:NIV) {
|
||||
SecurityObjects::NoteInfo ii{.created=(uint64_t)OpenWifi::Now(), .createdBy=UInfo.email, .note=i.note};
|
||||
SecurityObjects::NoteInfo ii{.created=(uint64_t)Utils::Now(), .createdBy=UInfo.email, .note=i.note};
|
||||
Notes.push_back(ii);
|
||||
}
|
||||
}
|
||||
@@ -446,7 +446,7 @@ namespace OpenWifi::SecurityObjects {
|
||||
|
||||
bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes) {
|
||||
for(auto const &i:NewNotes) {
|
||||
SecurityObjects::NoteInfo ii{.created=(uint64_t)OpenWifi::Now(), .createdBy=UInfo.email, .note=i.note};
|
||||
SecurityObjects::NoteInfo ii{.created=(uint64_t)Utils::Now(), .createdBy=UInfo.email, .note=i.note};
|
||||
ExistingNotes.push_back(ii);
|
||||
}
|
||||
return true;
|
||||
@@ -619,5 +619,80 @@ namespace OpenWifi::SecurityObjects {
|
||||
field_to_json(Obj,"login",login);
|
||||
field_to_json(Obj,"logout",logout);
|
||||
}
|
||||
|
||||
void ApiKeyAccessRight::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj, "service", service);
|
||||
field_to_json(Obj, "access", access);
|
||||
}
|
||||
|
||||
bool ApiKeyAccessRight::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj, "service", service);
|
||||
field_from_json(Obj, "access", access);
|
||||
return true;
|
||||
} catch(...) {
|
||||
std::cout << "Cannot parse: Token" << std::endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ApiKeyAccessRightList::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj, "acls", acls);
|
||||
}
|
||||
|
||||
bool ApiKeyAccessRightList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj, "acls", acls);
|
||||
return true;
|
||||
} catch(...) {
|
||||
std::cout << "Cannot parse: Token" << std::endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ApiKeyEntry::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj, "id", id);
|
||||
field_to_json(Obj, "userUuid", userUuid);
|
||||
field_to_json(Obj, "name", name);
|
||||
field_to_json(Obj, "apiKey", apiKey);
|
||||
field_to_json(Obj, "salt", salt);
|
||||
field_to_json(Obj, "description", description);
|
||||
field_to_json(Obj, "expiresOn", expiresOn);
|
||||
field_to_json(Obj, "rights", rights);
|
||||
field_to_json(Obj, "lastUse", lastUse);
|
||||
}
|
||||
|
||||
bool ApiKeyEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj, "id", id);
|
||||
field_from_json(Obj, "userUuid", userUuid);
|
||||
field_from_json(Obj, "name", name);
|
||||
field_from_json(Obj, "apiKey", apiKey);
|
||||
field_from_json(Obj, "salt", salt);
|
||||
field_from_json(Obj, "description", description);
|
||||
field_from_json(Obj, "expiresOn", expiresOn);
|
||||
field_from_json(Obj, "rights", rights);
|
||||
field_from_json(Obj, "lastUse", lastUse);
|
||||
return true;
|
||||
} catch(...) {
|
||||
std::cout << "Cannot parse: Token" << std::endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ApiKeyEntryList::to_json(Poco::JSON::Object &Obj) const {
|
||||
field_to_json(Obj, "apiKeys", apiKeys);
|
||||
}
|
||||
|
||||
bool ApiKeyEntryList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
field_from_json(Obj, "apiKeys", apiKeys);
|
||||
return true;
|
||||
} catch(...) {
|
||||
std::cout << "Cannot parse: Token" << std::endl;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include "Poco/JSON/Object.h"
|
||||
#include "Poco/Data/LOB.h"
|
||||
#include "Poco/Data/LOBStream.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
uint64_t Now();
|
||||
@@ -62,7 +63,7 @@ namespace OpenWifi {
|
||||
std::string UserTypeToString(USER_ROLE U);
|
||||
|
||||
struct NoteInfo {
|
||||
uint64_t created=0; // = OpenWifi::Now();
|
||||
uint64_t created=0; // = Utils::Now();
|
||||
std::string createdBy;
|
||||
std::string note;
|
||||
|
||||
@@ -101,7 +102,7 @@ namespace OpenWifi {
|
||||
std::string uuid;
|
||||
std::string question;
|
||||
std::string method;
|
||||
uint64_t created = OpenWifi::Now();
|
||||
uint64_t created = Utils::Now();
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
@@ -251,7 +252,8 @@ namespace OpenWifi {
|
||||
VERIFY_EMAIL,
|
||||
SUB_FORGOT_PASSWORD,
|
||||
SUB_VERIFY_EMAIL,
|
||||
SUB_SIGNUP
|
||||
SUB_SIGNUP,
|
||||
EMAIL_INVITATION
|
||||
};
|
||||
|
||||
struct ActionLink {
|
||||
@@ -263,7 +265,7 @@ namespace OpenWifi {
|
||||
std::string locale;
|
||||
std::string message;
|
||||
uint64_t sent=0;
|
||||
uint64_t created=OpenWifi::Now();
|
||||
uint64_t created=Utils::Now();
|
||||
uint64_t expires=0;
|
||||
uint64_t completed=0;
|
||||
uint64_t canceled=0;
|
||||
@@ -323,5 +325,44 @@ namespace OpenWifi {
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
};
|
||||
|
||||
struct ApiKeyAccessRight {
|
||||
std::string service;
|
||||
std::string access;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ApiKeyAccessRightList {
|
||||
std::vector<ApiKeyAccessRight> acls;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ApiKeyEntry {
|
||||
Types::UUID_t id;
|
||||
Types::UUID_t userUuid;
|
||||
std::string name;
|
||||
std::string description;
|
||||
std::string apiKey;
|
||||
std::string salt;
|
||||
std::uint64_t created;
|
||||
std::uint64_t expiresOn=0;
|
||||
ApiKeyAccessRightList rights;
|
||||
std::uint64_t lastUse=0;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
struct ApiKeyEntryList {
|
||||
std::vector<ApiKeyEntry> apiKeys;
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,12 +3,11 @@
|
||||
//
|
||||
|
||||
#include "RESTAPI_SubObjects.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/RESTAPI_utils.h"
|
||||
|
||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||
|
||||
|
||||
namespace OpenWifi::SubObjects {
|
||||
|
||||
void HomeDeviceMode::to_json(Poco::JSON::Object &Obj) const {
|
||||
|
||||
@@ -2,11 +2,9 @@
|
||||
// Created by stephane bourque on 2021-08-11.
|
||||
//
|
||||
|
||||
#include "SerialNumberCache.h"
|
||||
#include <mutex>
|
||||
|
||||
#include "StorageService.h"
|
||||
#include "framework/MicroService.h"
|
||||
#include "SerialNumberCache.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include <mutex>
|
||||
#include "framework/SubSystemServer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class SerialNumberCache : public SubSystemServer {
|
||||
|
||||
@@ -5,12 +5,15 @@
|
||||
#include "Signup.h"
|
||||
#include "StorageService.h"
|
||||
#include "sdks/SDK_gw.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
int Signup::Start() {
|
||||
GracePeriod_ = MicroService::instance().ConfigGetInt("signup.graceperiod", 60*60);
|
||||
LingerPeriod_ = MicroService::instance().ConfigGetInt("signup.lingerperiod", 24*60*60);
|
||||
poco_information(Logger(),"Starting...");
|
||||
GracePeriod_ = MicroServiceConfigGetInt("signup.graceperiod", 60*60);
|
||||
LingerPeriod_ = MicroServiceConfigGetInt("signup.lingerperiod", 24*60*60);
|
||||
|
||||
SignupDB::RecordVec Signups_;
|
||||
StorageService()->SignupDB().GetIncompleteSignups(Signups_);
|
||||
@@ -29,10 +32,12 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
void Signup::Stop() {
|
||||
poco_information(Logger(),"Stopping...");
|
||||
Running_ = false;
|
||||
Timer_.stop();
|
||||
Worker_.wakeUp();
|
||||
Worker_.join();
|
||||
poco_information(Logger(),"Stopped...");
|
||||
}
|
||||
|
||||
void Signup::onTimer([[maybe_unused]] Poco::Timer &timer) {
|
||||
@@ -68,7 +73,7 @@ namespace OpenWifi {
|
||||
// We must now complete the device transfer to this new subscriber and complete the
|
||||
// signup job.
|
||||
IT.subscriber = SE.userId;
|
||||
IT.info.modified = OpenWifi::Now();
|
||||
IT.info.modified = Utils::Now();
|
||||
IT.realMacAddress = SE.macAddress;
|
||||
if(IT.entity.empty()) {
|
||||
|
||||
@@ -77,7 +82,7 @@ namespace OpenWifi {
|
||||
}
|
||||
Poco::JSON::Object NewState;
|
||||
NewState.set("method", "signup");
|
||||
NewState.set("date", OpenWifi::Now());
|
||||
NewState.set("date", Utils::Now());
|
||||
NewState.set("status", "completed");
|
||||
std::ostringstream OS;
|
||||
NewState.stringify(OS);
|
||||
@@ -86,8 +91,8 @@ namespace OpenWifi {
|
||||
|
||||
// we need to move this device to the SubscriberDevice DB
|
||||
ProvObjects::SubscriberDevice SD;
|
||||
SD.info.id = MicroService::CreateUUID();
|
||||
SD.info.modified = SD.info.created = OpenWifi::Now();
|
||||
SD.info.id = MicroServiceCreateUUID();
|
||||
SD.info.modified = SD.info.created = Utils::Now();
|
||||
SD.info.name = IT.realMacAddress;
|
||||
SD.operatorId = SE.operatorId;
|
||||
SD.serialNumber = SerialNumber;
|
||||
@@ -97,26 +102,26 @@ namespace OpenWifi {
|
||||
SD.state = OS.str();
|
||||
SD.subscriberId = SE.userId;
|
||||
|
||||
Logger().information(fmt::format("Setting service class for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Setting service class for {}",SD.serialNumber));
|
||||
SD.serviceClass = StorageService()->ServiceClassDB().DefaultForOperator(SE.operatorId);
|
||||
Logger().information(fmt::format("Removing old device information for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Removing old device information for {}",SD.serialNumber));
|
||||
StorageService()->SubscriberDeviceDB().DeleteRecord("serialNumber", SD.serialNumber);
|
||||
Logger().information(fmt::format("Creating subscriber device for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Creating subscriber device for {}",SD.serialNumber));
|
||||
StorageService()->SubscriberDeviceDB().CreateRecord(SD);
|
||||
Logger().information(fmt::format("Removing old inventory for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Removing old inventory for {}",SD.serialNumber));
|
||||
StorageService()->InventoryDB().DeleteRecord("serialNumber", SD.serialNumber);
|
||||
|
||||
SE.status = "signup completed";
|
||||
SE.serialNumber = SerialNumber;
|
||||
SE.statusCode = ProvObjects::SignupStatusCodes::SignupSuccess;
|
||||
SE.completed = OpenWifi::Now();
|
||||
SE.info.modified = OpenWifi::Now();
|
||||
SE.completed = Utils::Now();
|
||||
SE.info.modified = Utils::Now();
|
||||
SE.error = 0;
|
||||
Logger().information(fmt::format("Completed signup for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Completed signup for {}",SD.serialNumber));
|
||||
StorageService()->SignupDB().UpdateRecord("id", SE.info.id, SE);
|
||||
Logger().information(fmt::format("Setting GW subscriber for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Setting GW subscriber for {}",SD.serialNumber));
|
||||
SDK::GW::Device::SetSubscriber(SerialNumber, IT.subscriber);
|
||||
Logger().information(fmt::format("Success for {}",SD.serialNumber));
|
||||
poco_information(Logger(),fmt::format("Success for {}",SD.serialNumber));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "Poco/Timer.h"
|
||||
|
||||
|
||||
@@ -8,10 +8,13 @@
|
||||
|
||||
#include "StorageService.h"
|
||||
#include "RESTObjects/RESTAPI_ProvObjects.h"
|
||||
#include "framework/utils.h"
|
||||
#include "fmt/format.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
int Storage::Start() {
|
||||
poco_information(Logger(),"Starting...");
|
||||
std::lock_guard Guard(Mutex_);
|
||||
|
||||
StorageClass::Start();
|
||||
@@ -34,6 +37,7 @@ namespace OpenWifi {
|
||||
SubscriberDeviceDB_ = std::make_unique<OpenWifi::SubscriberDeviceDB>(dbType_, *Pool_, Logger());
|
||||
OpLocationDB_ = std::make_unique<OpenWifi::OpLocationDB>(dbType_, *Pool_, Logger());
|
||||
OpContactDB_ = std::make_unique<OpenWifi::OpContactDB>(dbType_, *Pool_, Logger());
|
||||
OverridesDB_ = std::make_unique<OpenWifi::OverridesDB>(dbType_, *Pool_, Logger());
|
||||
|
||||
EntityDB_->Create();
|
||||
PolicyDB_->Create();
|
||||
@@ -53,6 +57,7 @@ namespace OpenWifi {
|
||||
SubscriberDeviceDB_->Create();
|
||||
OpLocationDB_->Create();
|
||||
OpContactDB_->Create();
|
||||
OverridesDB_->Create();
|
||||
|
||||
ExistFunc_[EntityDB_->Prefix()] = [=](const char *F, std::string &V) -> bool { return EntityDB_->Exists(F,V); };
|
||||
ExistFunc_[PolicyDB_->Prefix()] = [=](const char *F, std::string &V) -> bool { return PolicyDB_->Exists(F,V); };
|
||||
@@ -72,6 +77,7 @@ namespace OpenWifi {
|
||||
ExistFunc_[SubscriberDeviceDB_->Prefix()] = [=](const char *F, std::string &V) ->bool { return SubscriberDeviceDB_->Exists(F,V); };
|
||||
ExistFunc_[OpLocationDB_->Prefix()] = [=](const char *F, std::string &V) ->bool { return OpLocationDB_->Exists(F,V); };
|
||||
ExistFunc_[OpContactDB_->Prefix()] = [=](const char *F, std::string &V) ->bool { return OpContactDB_->Exists(F,V); };
|
||||
ExistFunc_[OverridesDB_->Prefix()] = [=](const char *F, std::string &V) ->bool { return OverridesDB_->Exists(F,V); };
|
||||
|
||||
ExpandFunc_[EntityDB_->Prefix()] = [=](const char *F, std::string &V, std::string &Name, std::string & Description) -> bool { return EntityDB_->GetNameAndDescription(F,V, Name, Description); };
|
||||
ExpandFunc_[PolicyDB_->Prefix()] = [=](const char *F, std::string &V, std::string &Name, std::string & Description) -> bool { return PolicyDB_->GetNameAndDescription(F,V, Name, Description); };
|
||||
@@ -91,6 +97,7 @@ namespace OpenWifi {
|
||||
ExpandFunc_[SubscriberDeviceDB_->Prefix()] = [=](const char *F, std::string &V, std::string &Name, std::string & Description) ->bool { return SubscriberDeviceDB_->GetNameAndDescription(F,V, Name, Description); };
|
||||
ExpandFunc_[OpLocationDB_->Prefix()] = [=](const char *F, std::string &V, std::string &Name, std::string & Description) ->bool { return OpLocationDB_->GetNameAndDescription(F,V, Name, Description); };
|
||||
ExpandFunc_[OpContactDB_->Prefix()] = [=](const char *F, std::string &V, std::string &Name, std::string & Description) ->bool { return OpContactDB_->GetNameAndDescription(F,V, Name, Description); };
|
||||
ExpandFunc_[OverridesDB_->Prefix()] = [=]( [[maybe_unused]] const char *F, [[maybe_unused]] std::string &V, [[maybe_unused]] std::string &Name, [[maybe_unused]] std::string & Description) ->bool { return false; };
|
||||
|
||||
InventoryDB_->InitializeSerialCache();
|
||||
|
||||
@@ -109,8 +116,9 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
void Storage::Stop() {
|
||||
poco_information(Logger(),"Stopping...");
|
||||
Timer_.stop();
|
||||
Logger().notice("Stopping.");
|
||||
poco_information(Logger(),"Stopped...");
|
||||
}
|
||||
|
||||
bool Storage::Validate(const Poco::URI::QueryParameters &P, RESTAPI::Errors::msg &Error) {
|
||||
@@ -212,7 +220,7 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
if(modified) {
|
||||
Logger().warning(fmt::format(" fixing venue: {}", V.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing venue: {}", V.info.name));
|
||||
NewVenue.devices = NewDevices;
|
||||
VenueDB().UpdateRecord("id", V.info.id, NewVenue);
|
||||
}
|
||||
@@ -281,7 +289,7 @@ namespace OpenWifi {
|
||||
|
||||
if(Modified)
|
||||
{
|
||||
Logger().warning(fmt::format(" fixing entity: {}",E.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing entity: {}",E.info.name));
|
||||
NewEntity.devices = NewDevices;
|
||||
NewEntity.contacts = NewContacts;
|
||||
NewEntity.locations = NewLocations;
|
||||
@@ -322,7 +330,7 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
if(modified) {
|
||||
Logger().warning(fmt::format(" fixing entity: {}",T.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing entity: {}",T.info.name));
|
||||
InventoryDB().UpdateRecord("id", T.info.id, NewTag);
|
||||
}
|
||||
return true;
|
||||
@@ -339,7 +347,7 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
Logger().warning(fmt::format(" fixing configuration: {}", C.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing configuration: {}", C.info.name));
|
||||
ConfigurationDB().UpdateRecord("id", C.info.id, NewConfig);
|
||||
}
|
||||
return true;
|
||||
@@ -355,7 +363,7 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
Logger().warning(fmt::format(" fixing operator: {}", O.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing operator: {}", O.info.name));
|
||||
OperatorDB().UpdateRecord("id", O.info.id, NewOp);
|
||||
}
|
||||
return true;
|
||||
@@ -371,23 +379,23 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
if (modified) {
|
||||
Logger().warning(fmt::format(" fixing subscriber: {}", O.info.name));
|
||||
poco_warning(Logger(),fmt::format(" fixing subscriber: {}", O.info.name));
|
||||
SubscriberDeviceDB().UpdateRecord("id", O.info.id, NewSub);
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
Logger().information("Checking DB consistency: venues");
|
||||
poco_information(Logger(),"Checking DB consistency: venues");
|
||||
VenueDB().Iterate(FixVenueDevices);
|
||||
Logger().information("Checking DB consistency: entities");
|
||||
poco_information(Logger(),"Checking DB consistency: entities");
|
||||
EntityDB().Iterate(FixEntity);
|
||||
Logger().information("Checking DB consistency: inventory");
|
||||
poco_information(Logger(),"Checking DB consistency: inventory");
|
||||
InventoryDB().Iterate(FixInventory);
|
||||
Logger().information("Checking DB consistency: configurations");
|
||||
poco_information(Logger(),"Checking DB consistency: configurations");
|
||||
ConfigurationDB().Iterate(FixConfiguration);
|
||||
Logger().information("Checking DB consistency: operators");
|
||||
poco_information(Logger(),"Checking DB consistency: operators");
|
||||
OperatorDB().Iterate(FixOperator);
|
||||
Logger().information("Checking DB consistency: subscribers");
|
||||
poco_information(Logger(),"Checking DB consistency: subscribers");
|
||||
SubscriberDeviceDB().Iterate(FixSubscriber);
|
||||
}
|
||||
|
||||
@@ -397,7 +405,7 @@ namespace OpenWifi {
|
||||
|
||||
Root.info.id = EntityDB::RootUUID();
|
||||
Root.info.name = "Top Entity";
|
||||
Root.info.created = Root.info.modified = OpenWifi::Now();
|
||||
Root.info.created = Root.info.modified = Utils::Now();
|
||||
Root.deviceRules.rrm = "off";
|
||||
EntityDB().CreateRecord(Root);
|
||||
}
|
||||
@@ -405,18 +413,18 @@ namespace OpenWifi {
|
||||
auto OperatorCount = OperatorDB().Count();
|
||||
if(OperatorCount==0) {
|
||||
ProvObjects::Operator DefOp;
|
||||
DefOp.info.id = MicroService::CreateUUID();
|
||||
DefOp.info.id = MicroServiceCreateUUID();
|
||||
DefOp.info.name = "Default Operator";
|
||||
DefOp.defaultOperator = true;
|
||||
DefOp.info.created = DefOp.info.modified = OpenWifi::Now();
|
||||
DefOp.info.created = DefOp.info.modified = Utils::Now();
|
||||
DefOp.deviceRules.rrm = "inherit";
|
||||
OperatorDB_->CreateRecord(DefOp);
|
||||
|
||||
ProvObjects::ServiceClass DefSer;
|
||||
DefSer.info.id = MicroService::CreateUUID();
|
||||
DefSer.info.id = MicroServiceCreateUUID();
|
||||
DefSer.info.name = "Default Service Class";
|
||||
DefSer.defaultService = true;
|
||||
DefSer.info.created = DefSer.info.modified = OpenWifi::Now();
|
||||
DefSer.info.created = DefSer.info.modified = Utils::Now();
|
||||
DefSer.operatorId = DefOp.info.id;
|
||||
DefSer.period = "monthly";
|
||||
DefSer.billingCode = "basic";
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/StorageClass.h"
|
||||
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "storage/storage_entity.h"
|
||||
#include "storage/storage_policies.h"
|
||||
#include "storage/storage_venue.h"
|
||||
@@ -28,6 +27,10 @@
|
||||
#include "storage/storage_operataor.h"
|
||||
#include "storage/storage_service_class.h"
|
||||
#include "storage/storage_sub_devices.h"
|
||||
#include "storage/storage_overrides.h"
|
||||
|
||||
#include "Poco/URI.h"
|
||||
#include "framework/ow_constants.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -62,6 +65,7 @@ namespace OpenWifi {
|
||||
OpenWifi::SubscriberDeviceDB & SubscriberDeviceDB() { return *SubscriberDeviceDB_; };
|
||||
OpenWifi::OpLocationDB & OpLocationDB() { return *OpLocationDB_; };
|
||||
OpenWifi::OpContactDB & OpContactDB() { return *OpContactDB_; };
|
||||
OpenWifi::OverridesDB & OverridesDB() { return *OverridesDB_; };
|
||||
|
||||
bool Validate(const Poco::URI::QueryParameters &P, RESTAPI::Errors::msg &Error);
|
||||
bool Validate(const Types::StringVec &P, std::string &Error);
|
||||
@@ -87,11 +91,11 @@ namespace OpenWifi {
|
||||
|
||||
static inline bool ApplyConfigRules(ProvObjects::DeviceRules & R_res) {
|
||||
if(R_res.firmwareUpgrade=="inherit")
|
||||
R_res.firmwareUpgrade=MicroService::instance().ConfigGetString("firmware.updater.upgrade","yes");
|
||||
R_res.firmwareUpgrade=MicroServiceConfigGetString("firmware.updater.upgrade","yes");
|
||||
if(R_res.rcOnly=="inherit")
|
||||
R_res.rcOnly=MicroService::instance().ConfigGetString("firmware.updater.releaseonly","yes");
|
||||
R_res.rcOnly=MicroServiceConfigGetString("firmware.updater.releaseonly","yes");
|
||||
if(R_res.rrm=="inherit")
|
||||
R_res.rrm=MicroService::instance().ConfigGetString("rrm.default","no");
|
||||
R_res.rrm=MicroServiceConfigGetString("rrm.default","no");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -114,6 +118,7 @@ namespace OpenWifi {
|
||||
std::unique_ptr<OpenWifi::SubscriberDeviceDB> SubscriberDeviceDB_;
|
||||
std::unique_ptr<OpenWifi::OpLocationDB> OpLocationDB_;
|
||||
std::unique_ptr<OpenWifi::OpContactDB> OpContactDB_;
|
||||
std::unique_ptr<OpenWifi::OverridesDB> OverridesDB_;
|
||||
std::string DefaultOperator_;
|
||||
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include "TagServer.h"
|
||||
#include "StorageService.h"
|
||||
#include "framework/utils.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
int TagServer::Start() {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/SubSystemServer.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "StorageService.h"
|
||||
#include "APConfig.h"
|
||||
#include "sdks/SDK_gw.h"
|
||||
#include "framework/WebSocketClientNotifications.h"
|
||||
#include "JobController.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "UI_Prov_WebSocketNotifications.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -48,24 +48,24 @@ namespace OpenWifi {
|
||||
std::ostringstream OS;
|
||||
Configuration->stringify(OS);
|
||||
auto Response = Poco::makeShared<Poco::JSON::Object>();
|
||||
Logger().debug(fmt::format("{}: Pushing configuration.", Device.serialNumber));
|
||||
poco_debug(Logger(),fmt::format("{}: Pushing configuration.", Device.serialNumber));
|
||||
if (SDK::GW::Device::Configure(nullptr, Device.serialNumber, Configuration, Response)) {
|
||||
Logger().debug(fmt::format("{}: Configuration pushed.", Device.serialNumber));
|
||||
Logger().information(fmt::format("{}: Updated.", Device.serialNumber));
|
||||
poco_information(Logger(),fmt::format("{}: Updated.", Device.serialNumber));
|
||||
// std::cout << Device.serialNumber << ": Updated" << std::endl;
|
||||
updated_++;
|
||||
} else {
|
||||
Logger().information(fmt::format("{}: Not updated.", Device.serialNumber));
|
||||
poco_information(Logger(),fmt::format("{}: Not updated.", Device.serialNumber));
|
||||
// std::cout << Device.serialNumber << ": Failed" << std::endl;
|
||||
failed_++;
|
||||
}
|
||||
} else {
|
||||
Logger().debug(fmt::format("{}: Configuration is bad.", Device.serialNumber));
|
||||
poco_debug(Logger(),fmt::format("{}: Configuration is bad.", Device.serialNumber));
|
||||
bad_config_++;
|
||||
// std::cout << Device.serialNumber << ": Bad config" << std::endl;
|
||||
}
|
||||
} catch (...) {
|
||||
Logger().debug(fmt::format("{}: Configuration is bad (caused an exception).", Device.serialNumber));
|
||||
poco_debug(Logger(),fmt::format("{}: Configuration is bad (caused an exception).", Device.serialNumber));
|
||||
bad_config_++;
|
||||
}
|
||||
}
|
||||
@@ -99,7 +99,7 @@ namespace OpenWifi {
|
||||
Utils::SetThreadName("venue-update");
|
||||
VenueUUID_ = Parameter(0);
|
||||
|
||||
WebSocketNotification<WebSocketNotificationJobContent> N;
|
||||
ProvWebSocketNotifications::ConfigUpdateList_t N;
|
||||
|
||||
ProvObjects::Venue Venue;
|
||||
uint64_t Updated = 0, Failed = 0 , BadConfigs = 0 ;
|
||||
@@ -145,7 +145,7 @@ namespace OpenWifi {
|
||||
}
|
||||
}
|
||||
|
||||
Logger().debug("Waiting for outstanding update threads to finish.");
|
||||
poco_debug(Logger(),"Waiting for outstanding update threads to finish.");
|
||||
Pool_.joinAll();
|
||||
for(auto job_it = JobList.begin(); job_it !=JobList.end();) {
|
||||
VenueDeviceConfigUpdater * current_job = *job_it;
|
||||
@@ -172,12 +172,12 @@ namespace OpenWifi {
|
||||
|
||||
} else {
|
||||
N.content.details = fmt::format("Venue {} no longer exists.",VenueUUID_);
|
||||
Logger().warning(N.content.details);
|
||||
poco_warning(Logger(),N.content.details);
|
||||
}
|
||||
|
||||
// std::cout << N.content.details << std::endl;
|
||||
WebSocketClientNotificationVenueUpdateJobCompletionToUser(UserInfo().email, N);
|
||||
Logger().information(fmt::format("Job {} Completed: {} updated, {} failed to update , {} bad configurations.",
|
||||
ProvWebSocketNotifications::VenueConfigUpdateCompletion(UserInfo().email, N);
|
||||
poco_information(Logger(),fmt::format("Job {} Completed: {} updated, {} failed to update , {} bad configurations.",
|
||||
JobId(), Updated ,Failed, BadConfigs));
|
||||
Utils::SetThreadName("free");
|
||||
Complete();
|
||||
|
||||
@@ -2,13 +2,12 @@
|
||||
// Created by stephane bourque on 2022-05-04.
|
||||
//
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/WebSocketClientNotifications.h"
|
||||
|
||||
#include "StorageService.h"
|
||||
#include "APConfig.h"
|
||||
#include "sdks/SDK_gw.h"
|
||||
#include "JobController.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "UI_Prov_WebSocketNotifications.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
|
||||
@@ -29,7 +28,7 @@ namespace OpenWifi {
|
||||
Logger().debug(fmt::format("{}: Rebooted.",Device.serialNumber));
|
||||
rebooted_++;
|
||||
} else {
|
||||
Logger().information(fmt::format("{}: Not rebooted.", Device.serialNumber));
|
||||
poco_information(Logger(),fmt::format("{}: Not rebooted.", Device.serialNumber));
|
||||
failed_++;
|
||||
}
|
||||
}
|
||||
@@ -60,7 +59,7 @@ namespace OpenWifi {
|
||||
|
||||
Utils::SetThreadName("venue-reboot");
|
||||
|
||||
WebSocketClientNotificationVenueRebootList_t N;
|
||||
ProvWebSocketNotifications::VenueRebootList_t N;
|
||||
auto VenueUUID_ = Parameter(0);
|
||||
|
||||
ProvObjects::Venue Venue;
|
||||
@@ -128,8 +127,8 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
// std::cout << N.content.details << std::endl;
|
||||
WebSocketClientNotificationVenueRebootCompletionToUser(UserInfo().email,N);
|
||||
Logger().information(fmt::format("Job {} Completed: {} rebooted, {} failed to reboot.",
|
||||
ProvWebSocketNotifications::VenueRebootCompletion(UserInfo().email,N);
|
||||
poco_information(Logger(),fmt::format("Job {} Completed: {} rebooted, {} failed to reboot.",
|
||||
JobId(), rebooted_ ,failed_));
|
||||
Utils::SetThreadName("free");
|
||||
Complete();
|
||||
|
||||
@@ -4,14 +4,13 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/MicroService.h"
|
||||
#include "framework/WebSocketClientNotifications.h"
|
||||
|
||||
#include "StorageService.h"
|
||||
#include "APConfig.h"
|
||||
#include "sdks/SDK_gw.h"
|
||||
#include "sdks/SDK_fms.h"
|
||||
#include "JobController.h"
|
||||
#include "framework/MicroServiceFuncs.h"
|
||||
#include "UI_Prov_WebSocketNotifications.h"
|
||||
|
||||
namespace OpenWifi {
|
||||
class VenueDeviceUpgrade : public Poco::Runnable {
|
||||
@@ -43,11 +42,11 @@ namespace OpenWifi {
|
||||
Logger().debug(fmt::format("{}: Upgraded.",Device.serialNumber));
|
||||
upgraded_++;
|
||||
} else {
|
||||
Logger().information(fmt::format("{}: Not Upgraded.", Device.serialNumber));
|
||||
poco_information(Logger(),fmt::format("{}: Not Upgraded.", Device.serialNumber));
|
||||
not_connected_++;
|
||||
}
|
||||
} else {
|
||||
Logger().information(fmt::format("{}: Not Upgraded. No firmware available.", Device.serialNumber));
|
||||
poco_information(Logger(),fmt::format("{}: Not Upgraded. No firmware available.", Device.serialNumber));
|
||||
no_firmware_++;
|
||||
}
|
||||
}
|
||||
@@ -83,7 +82,7 @@ namespace OpenWifi {
|
||||
Utils::SetThreadName("venue-upgr");
|
||||
auto VenueUUID_ = Parameter(0);
|
||||
|
||||
WebSocketClientNotificationVenueUpgradeList_t N;
|
||||
ProvWebSocketNotifications::VenueFWUpgradeList_t N;
|
||||
|
||||
ProvObjects::Venue Venue;
|
||||
uint64_t upgraded_ = 0,
|
||||
@@ -172,8 +171,8 @@ namespace OpenWifi {
|
||||
}
|
||||
|
||||
// std::cout << N.content.details << std::endl;
|
||||
WebSocketClientNotificationVenueUpgradeCompletionToUser(UserInfo().email,N);
|
||||
Logger().information(N.content.details);
|
||||
ProvWebSocketNotifications::VenueFWUpgradeCompletion(UserInfo().email,N);
|
||||
poco_information(Logger(),N.content.details);
|
||||
Utils::SetThreadName("free");
|
||||
Complete();
|
||||
}
|
||||
|
||||
127
src/UI_Prov_WebSocketNotifications.cpp
Normal file
127
src/UI_Prov_WebSocketNotifications.cpp
Normal file
@@ -0,0 +1,127 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-10-29.
|
||||
//
|
||||
|
||||
#include "UI_Prov_WebSocketNotifications.h"
|
||||
|
||||
|
||||
namespace OpenWifi::ProvWebSocketNotifications {
|
||||
|
||||
void ConfigUpdateList::to_json(Poco::JSON::Object &Obj) const {
|
||||
RESTAPI_utils::field_to_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_to_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_to_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_to_json(Obj,"error",error);
|
||||
RESTAPI_utils::field_to_json(Obj,"warning",warning);
|
||||
RESTAPI_utils::field_to_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_to_json(Obj,"details",details);
|
||||
}
|
||||
|
||||
bool ConfigUpdateList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
RESTAPI_utils::field_from_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_from_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_from_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_from_json(Obj,"error",error);
|
||||
RESTAPI_utils::field_from_json(Obj,"warning",warning);
|
||||
RESTAPI_utils::field_from_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_from_json(Obj,"details",details);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void RebootList::to_json(Poco::JSON::Object &Obj) const {
|
||||
RESTAPI_utils::field_to_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_to_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_to_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_to_json(Obj,"warning",warning);
|
||||
RESTAPI_utils::field_to_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_to_json(Obj,"details",details);
|
||||
}
|
||||
|
||||
bool RebootList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
RESTAPI_utils::field_from_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_from_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_from_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_from_json(Obj,"warning",warning);
|
||||
RESTAPI_utils::field_from_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_from_json(Obj,"details",details);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void FWUpgradeList::to_json(Poco::JSON::Object &Obj) const {
|
||||
RESTAPI_utils::field_to_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_to_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_to_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_to_json(Obj,"notConnected",not_connected);
|
||||
RESTAPI_utils::field_to_json(Obj,"noFirmware",no_firmware);
|
||||
RESTAPI_utils::field_to_json(Obj,"skipped",skipped);
|
||||
RESTAPI_utils::field_to_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_to_json(Obj,"details",details);
|
||||
}
|
||||
|
||||
bool FWUpgradeList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||
try {
|
||||
RESTAPI_utils::field_from_json(Obj,"title",title);
|
||||
RESTAPI_utils::field_from_json(Obj,"jobId",jobId);
|
||||
RESTAPI_utils::field_from_json(Obj,"success",success);
|
||||
RESTAPI_utils::field_from_json(Obj,"notConnected",not_connected);
|
||||
RESTAPI_utils::field_from_json(Obj,"noFirmware",no_firmware);
|
||||
RESTAPI_utils::field_from_json(Obj,"skipped",skipped);
|
||||
RESTAPI_utils::field_from_json(Obj,"timeStamp",timeStamp);
|
||||
RESTAPI_utils::field_from_json(Obj,"details",details);
|
||||
return true;
|
||||
} catch(...) {
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Register() {
|
||||
static const UI_WebSocketClientServer::NotificationTypeIdVec Notifications = {
|
||||
{ 1000, "venue_fw_upgrade" },
|
||||
{ 2000, "venue_config_update" },
|
||||
{ 3000, "venue_rebooter" }
|
||||
};
|
||||
UI_WebSocketClientServer()->RegisterNotifications(Notifications);
|
||||
}
|
||||
|
||||
void VenueFWUpgradeCompletion( VenueFWUpgradeList_t &N) {
|
||||
N.type_id = 1000 ;
|
||||
UI_WebSocketClientServer()->SendNotification(N);
|
||||
}
|
||||
|
||||
void VenueFWUpgradeCompletion( const std::string & User, VenueFWUpgradeList_t &N) {
|
||||
N.type_id = 1000 ;
|
||||
UI_WebSocketClientServer()->SendUserNotification(User,N);
|
||||
}
|
||||
|
||||
void VenueConfigUpdateCompletion( ConfigUpdateList_t &N) {
|
||||
N.type_id = 2000 ;
|
||||
UI_WebSocketClientServer()->SendNotification(N);
|
||||
}
|
||||
|
||||
void VenueConfigUpdateCompletion( const std::string & User, ConfigUpdateList_t &N) {
|
||||
N.type_id = 2000 ;
|
||||
UI_WebSocketClientServer()->SendUserNotification(User,N);
|
||||
}
|
||||
|
||||
void VenueRebootCompletion( VenueRebootList_t &N) {
|
||||
N.type_id = 3000 ;
|
||||
UI_WebSocketClientServer()->SendNotification(N);
|
||||
}
|
||||
|
||||
void VenueRebootCompletion( const std::string & User, VenueRebootList_t &N) {
|
||||
N.type_id = 3000 ;
|
||||
UI_WebSocketClientServer()->SendUserNotification(User,N);
|
||||
}
|
||||
|
||||
} // namespace OpenWifi
|
||||
68
src/UI_Prov_WebSocketNotifications.h
Normal file
68
src/UI_Prov_WebSocketNotifications.h
Normal file
@@ -0,0 +1,68 @@
|
||||
//
|
||||
// Created by stephane bourque on 2022-10-29.
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "framework/UI_WebSocketClientNotifications.h"
|
||||
#include "framework/UI_WebSocketClientServer.h"
|
||||
|
||||
namespace OpenWifi::ProvWebSocketNotifications {
|
||||
struct ConfigUpdateList {
|
||||
std::string title,
|
||||
details,
|
||||
jobId;
|
||||
std::vector<std::string> success,
|
||||
error,
|
||||
warning;
|
||||
uint64_t timeStamp=OpenWifi::Utils::Now();
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
typedef WebSocketNotification<ConfigUpdateList> ConfigUpdateList_t;
|
||||
|
||||
struct RebootList {
|
||||
std::string title,
|
||||
details,
|
||||
jobId;
|
||||
std::vector<std::string> success,
|
||||
warning;
|
||||
uint64_t timeStamp=OpenWifi::Utils::Now();
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
typedef WebSocketNotification<RebootList> VenueRebootList_t;
|
||||
|
||||
struct FWUpgradeList {
|
||||
std::string title,
|
||||
details,
|
||||
jobId;
|
||||
std::vector<std::string> success,
|
||||
skipped,
|
||||
no_firmware,
|
||||
not_connected;
|
||||
uint64_t timeStamp = OpenWifi::Utils::Now();
|
||||
|
||||
void to_json(Poco::JSON::Object &Obj) const;
|
||||
|
||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||
};
|
||||
|
||||
typedef WebSocketNotification<FWUpgradeList> VenueFWUpgradeList_t;
|
||||
|
||||
void Register();
|
||||
|
||||
void VenueFWUpgradeCompletion( const std::string & User, VenueFWUpgradeList_t &N);
|
||||
void VenueFWUpgradeCompletion( VenueFWUpgradeList_t &N);
|
||||
|
||||
void VenueConfigUpdateCompletion( const std::string & User, ConfigUpdateList_t &N);
|
||||
void VenueConfigUpdateCompletion( ConfigUpdateList_t &N);
|
||||
|
||||
void VenueRebootCompletion( const std::string & User, VenueRebootList_t &N);
|
||||
void VenueRebootCompletion( VenueRebootList_t &N);
|
||||
}
|
||||
// namespace OpenWifi
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user