mirror of
https://github.com/Telecominfraproject/wlan-cloud-ucentralfms.git
synced 2025-10-31 18:57:45 +00:00
Compare commits
7 Commits
v2.6.0-RC2
...
release/v2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
889d98a162 | ||
|
|
a46401bf87 | ||
|
|
f0be8ffdc5 | ||
|
|
941680c0fd | ||
|
|
f2b64939a3 | ||
|
|
bf7375c8f1 | ||
|
|
e516e60179 |
35
.github/workflows/ci.yml
vendored
35
.github/workflows/ci.yml
vendored
@@ -13,7 +13,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- 'release/*'
|
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
@@ -40,16 +39,6 @@ jobs:
|
|||||||
registry_user: ucentral
|
registry_user: ucentral
|
||||||
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
|
||||||
|
|
||||||
- name: Notify on failure via Slack
|
|
||||||
if: failure() && github.ref == 'refs/heads/main'
|
|
||||||
uses: rtCamp/action-slack-notify@v2
|
|
||||||
env:
|
|
||||||
SLACK_USERNAME: GitHub Actions failure notifier
|
|
||||||
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
|
|
||||||
SLACK_COLOR: "${{ job.status }}"
|
|
||||||
SLACK_ICON: https://raw.githubusercontent.com/quintessence/slack-icons/master/images/github-logo-slack-icon.png
|
|
||||||
SLACK_TITLE: Docker build failed for OWFMS service
|
|
||||||
|
|
||||||
trigger-testing:
|
trigger-testing:
|
||||||
if: startsWith(github.ref, 'refs/pull/')
|
if: startsWith(github.ref, 'refs/pull/')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -78,26 +67,4 @@ jobs:
|
|||||||
workflow: ow_docker-compose.yml
|
workflow: ow_docker-compose.yml
|
||||||
token: ${{ secrets.WLAN_TESTING_PAT }}
|
token: ${{ secrets.WLAN_TESTING_PAT }}
|
||||||
ref: master
|
ref: master
|
||||||
inputs: '{"deployment_version": "${{ env.BASE_BRANCH }}", "owgw_version": "${{ env.OWGW_BASE_BRANCH }}", "owsec_version": "${{ env.BASE_BRANCH }}", "owfms_version": "${{ github.sha }}", "owprov_version": "${{ env.BASE_BRANCH }}", "owanalytics_version": "${{ env.BASE_BRANCH }}", "owsub_version": "${{ env.BASE_BRANCH }}", "microservice": "owfms"}'
|
inputs: '{"owgw_version": "${{ env.OWGW_BASE_BRANCH }}", "owgwui_version": "${{ env.BASE_BRANCH }}", "owsec_version": "${{ env.BASE_BRANCH }}", "owfms_version": "${{ github.sha }}", "owprov_version": "main", "owprovui_version": "main"}'
|
||||||
|
|
||||||
trigger-deploy-to-dev:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.ref == 'refs/heads/main'
|
|
||||||
needs:
|
|
||||||
- docker
|
|
||||||
steps:
|
|
||||||
- name: Checkout actions repo
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
repository: Telecominfraproject/.github
|
|
||||||
path: github
|
|
||||||
|
|
||||||
- name: Trigger deployment of the latest version to dev instance and wait for result
|
|
||||||
uses: ./github/composite-actions/trigger-workflow-and-wait
|
|
||||||
with:
|
|
||||||
owner: Telecominfraproject
|
|
||||||
repo: wlan-testing
|
|
||||||
workflow: ucentralgw-dev-deployment.yaml
|
|
||||||
token: ${{ secrets.WLAN_TESTING_PAT }}
|
|
||||||
ref: master
|
|
||||||
inputs: '{"force_latest": "true"}'
|
|
||||||
|
|||||||
9
.github/workflows/cleanup.yml
vendored
9
.github/workflows/cleanup.yml
vendored
@@ -4,7 +4,6 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
- 'release/*'
|
|
||||||
types: [ closed ]
|
types: [ closed ]
|
||||||
|
|
||||||
defaults:
|
defaults:
|
||||||
@@ -17,10 +16,4 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
|
export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
|
||||||
|
curl -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owfms/$PR_BRANCH_TAG"
|
||||||
if [[ ! $PR_BRANCH_TAG =~ (main|master|release-*) ]]; then
|
|
||||||
echo "PR branch is $PR_BRANCH_TAG, deleting Docker image"
|
|
||||||
curl -s -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owfms/$PR_BRANCH_TAG"
|
|
||||||
else
|
|
||||||
echo "PR branch is $PR_BRANCH_TAG, not deleting Docker image"
|
|
||||||
fi
|
|
||||||
|
|||||||
46
.github/workflows/release.yml
vendored
46
.github/workflows/release.yml
vendored
@@ -1,46 +0,0 @@
|
|||||||
name: Release chart package
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
helm-package:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
env:
|
|
||||||
HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
|
|
||||||
HELM_REPO_USERNAME: ucentral
|
|
||||||
steps:
|
|
||||||
- name: Checkout uCentral assembly chart repo
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
path: wlan-cloud-ucentralfms
|
|
||||||
|
|
||||||
- name: Build package
|
|
||||||
working-directory: wlan-cloud-ucentralfms/helm
|
|
||||||
run: |
|
|
||||||
helm plugin install https://github.com/aslafy-z/helm-git --version 0.10.0
|
|
||||||
helm repo add bitnami https://charts.bitnami.com/bitnami
|
|
||||||
helm repo update
|
|
||||||
helm dependency update
|
|
||||||
mkdir dist
|
|
||||||
helm package . -d dist
|
|
||||||
|
|
||||||
- name: Generate GitHub release body
|
|
||||||
working-directory: wlan-cloud-ucentralfms/helm
|
|
||||||
run: |
|
|
||||||
pip3 install yq -q
|
|
||||||
echo "Docker image - tip-tip-wlan-cloud-ucentral.jfrog.io/owfms:$GITHUB_REF_NAME" > release.txt
|
|
||||||
echo "Helm charted may be attached to this release" >> release.txt
|
|
||||||
echo "Deployment artifacts may be found in https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy/tree/$GITHUB_REF_NAME" >> release.txt
|
|
||||||
|
|
||||||
- name: Create GitHub release
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
with:
|
|
||||||
body_path: wlan-cloud-ucentralfms/helm/release.txt
|
|
||||||
files: wlan-cloud-ucentralfms/helm/dist/*
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project(owfms VERSION 2.6.0)
|
project(owfms VERSION 2.5.0)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
|
||||||
@@ -37,13 +37,19 @@ if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
|
|||||||
string(REGEX REPLACE "\n$" "" GIT_HASH "${GIT_HASH}")
|
string(REGEX REPLACE "\n$" "" GIT_HASH "${GIT_HASH}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# set(BUILD_SHARED_LIBS 1)
|
add_definitions(-DAWS_CUSTOM_MEMORY_MANAGEMENT)
|
||||||
# add_definitions(-DAWS_CUSTOM_MEMORY_MANAGEMENT)
|
|
||||||
|
|
||||||
|
set(BUILD_SHARED_LIBS 1)
|
||||||
|
add_definitions(-DAWS_CUSTOM_MEMORY_MANAGEMENT)
|
||||||
|
|
||||||
|
set(Boost_USE_STATIC_LIBS OFF)
|
||||||
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
|
set(Boost_USE_STATIC_RUNTIME OFF)
|
||||||
|
|
||||||
|
find_package(Boost REQUIRED system)
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
find_package(fmt REQUIRED)
|
|
||||||
find_package(Poco REQUIRED COMPONENTS Crypto JWT Net Util NetSSL Data DataSQLite)
|
|
||||||
find_package(AWSSDK REQUIRED COMPONENTS s3)
|
find_package(AWSSDK REQUIRED COMPONENTS s3)
|
||||||
|
find_package(Poco REQUIRED COMPONENTS Crypto JWT Net Util NetSSL Data DataSQLite)
|
||||||
|
|
||||||
if(SMALL_BUILD)
|
if(SMALL_BUILD)
|
||||||
find_package(Poco REQUIRED COMPONENTS Crypto JWT Net Util NetSSL Data DataSQLite)
|
find_package(Poco REQUIRED COMPONENTS Crypto JWT Net Util NetSSL Data DataSQLite)
|
||||||
@@ -58,12 +64,6 @@ include_directories(/usr/local/include /usr/local/opt/openssl/include src inclu
|
|||||||
|
|
||||||
configure_file(src/ow_version.h.in ${PROJECT_SOURCE_DIR}/src/ow_version.h @ONLY)
|
configure_file(src/ow_version.h.in ${PROJECT_SOURCE_DIR}/src/ow_version.h @ONLY)
|
||||||
|
|
||||||
add_compile_options(-Wall -Wextra)
|
|
||||||
if(ASAN)
|
|
||||||
add_compile_options(-fsanitize=address)
|
|
||||||
add_link_options(-fsanitize=address)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_executable( owfms
|
add_executable( owfms
|
||||||
build
|
build
|
||||||
src/ow_version.h.in
|
src/ow_version.h.in
|
||||||
@@ -72,9 +72,10 @@ add_executable( owfms
|
|||||||
src/framework/MicroService.h
|
src/framework/MicroService.h
|
||||||
src/framework/OpenWifiTypes.h
|
src/framework/OpenWifiTypes.h
|
||||||
src/framework/orm.h
|
src/framework/orm.h
|
||||||
|
src/framework/RESTAPI_errors.h
|
||||||
|
src/framework/RESTAPI_protocol.h
|
||||||
src/framework/StorageClass.h
|
src/framework/StorageClass.h
|
||||||
src/framework/ow_constants.h
|
src/framework/uCentral_Protocol.h
|
||||||
src/framework/WebSocketClientNotifications.h
|
|
||||||
src/RESTObjects/RESTAPI_SecurityObjects.h src/RESTObjects/RESTAPI_SecurityObjects.cpp
|
src/RESTObjects/RESTAPI_SecurityObjects.h src/RESTObjects/RESTAPI_SecurityObjects.cpp
|
||||||
src/RESTObjects/RESTAPI_ProvObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.h
|
src/RESTObjects/RESTAPI_ProvObjects.cpp src/RESTObjects/RESTAPI_ProvObjects.h
|
||||||
src/RESTObjects/RESTAPI_GWobjects.h src/RESTObjects/RESTAPI_GWobjects.cpp
|
src/RESTObjects/RESTAPI_GWobjects.h src/RESTObjects/RESTAPI_GWobjects.cpp
|
||||||
@@ -101,14 +102,11 @@ add_executable( owfms
|
|||||||
src/NewCommandHandler.cpp src/NewCommandHandler.h
|
src/NewCommandHandler.cpp src/NewCommandHandler.h
|
||||||
src/storage/orm_history.cpp src/storage/orm_history.h
|
src/storage/orm_history.cpp src/storage/orm_history.h
|
||||||
src/storage/orm_firmwares.cpp src/storage/orm_firmwares.h
|
src/storage/orm_firmwares.cpp src/storage/orm_firmwares.h
|
||||||
src/storage/orm_deviceInfo.cpp src/storage/orm_deviceInfo.h src/RESTAPI/RESTAPI_deviceInformation_handler.cpp src/RESTAPI/RESTAPI_deviceInformation_handler.h)
|
src/storage/orm_deviceInfo.cpp src/storage/orm_deviceInfo.h)
|
||||||
|
|
||||||
target_link_libraries( owfms PUBLIC
|
target_link_libraries(owfms PUBLIC
|
||||||
${Poco_LIBRARIES}
|
${Poco_LIBRARIES} ${MySQL_LIBRARIES}
|
||||||
${MySQL_LIBRARIES}
|
${Boost_LIBRARIES}
|
||||||
${ZLIB_LIBRARIES}
|
${ZLIB_LIBRARIES} ${AWSSDK_LINK_LIBRARIES}
|
||||||
${AWSSDK_LINK_LIBRARIES}
|
CppKafka::cppkafka )
|
||||||
fmt::fmt
|
|
||||||
CppKafka::cppkafka
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|||||||
14
Dockerfile
14
Dockerfile
@@ -19,18 +19,6 @@ RUN cmake ..
|
|||||||
RUN cmake --build . --config Release -j8
|
RUN cmake --build . --config Release -j8
|
||||||
RUN cmake --build . --target install
|
RUN cmake --build . --target install
|
||||||
|
|
||||||
FROM build-base AS fmtlib-build
|
|
||||||
|
|
||||||
ADD https://api.github.com/repos/fmtlib/fmt/git/refs/heads/master version.json
|
|
||||||
RUN git clone https://github.com/fmtlib/fmt /fmtlib
|
|
||||||
|
|
||||||
WORKDIR /fmtlib
|
|
||||||
RUN mkdir cmake-build
|
|
||||||
WORKDIR cmake-build
|
|
||||||
RUN cmake ..
|
|
||||||
RUN make
|
|
||||||
RUN make install
|
|
||||||
|
|
||||||
FROM build-base AS cppkafka-build
|
FROM build-base AS cppkafka-build
|
||||||
|
|
||||||
ADD https://api.github.com/repos/stephb9959/cppkafka/git/refs/heads/master version.json
|
ADD https://api.github.com/repos/stephb9959/cppkafka/git/refs/heads/master version.json
|
||||||
@@ -85,8 +73,6 @@ 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=json-schema-validator-build /usr/local/lib /usr/local/lib
|
||||||
COPY --from=aws-sdk-cpp-build /usr/local/include /usr/local/include
|
COPY --from=aws-sdk-cpp-build /usr/local/include /usr/local/include
|
||||||
COPY --from=aws-sdk-cpp-build /usr/local/lib /usr/local/lib
|
COPY --from=aws-sdk-cpp-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 /owfms
|
WORKDIR /owfms
|
||||||
RUN mkdir cmake-build
|
RUN mkdir cmake-build
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ if [ "$SELFSIGNED_CERTS" = 'true' ]; then
|
|||||||
update-ca-certificates
|
update-ca-certificates
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$TEMPLATE_CONFIG" = 'true' ]]; then
|
if [[ "$TEMPLATE_CONFIG" = 'true' && ! -f "$OWFMS_CONFIG"/owfms.properties ]]; then
|
||||||
RESTAPI_HOST_ROOTCA=${RESTAPI_HOST_ROOTCA:-"\$OWFMS_ROOT/certs/restapi-ca.pem"} \
|
RESTAPI_HOST_ROOTCA=${RESTAPI_HOST_ROOTCA:-"\$OWFMS_ROOT/certs/restapi-ca.pem"} \
|
||||||
RESTAPI_HOST_PORT=${RESTAPI_HOST_PORT:-"16004"} \
|
RESTAPI_HOST_PORT=${RESTAPI_HOST_PORT:-"16004"} \
|
||||||
RESTAPI_HOST_CERT=${RESTAPI_HOST_CERT:-"\$OWFMS_ROOT/certs/restapi-cert.pem"} \
|
RESTAPI_HOST_CERT=${RESTAPI_HOST_CERT:-"\$OWFMS_ROOT/certs/restapi-cert.pem"} \
|
||||||
@@ -29,10 +29,6 @@ if [[ "$TEMPLATE_CONFIG" = 'true' ]]; then
|
|||||||
S3_BUCKET_URI=${S3_BUCKET_URI:-"ucentral-ap-firmware.s3.amazonaws.com"} \
|
S3_BUCKET_URI=${S3_BUCKET_URI:-"ucentral-ap-firmware.s3.amazonaws.com"} \
|
||||||
KAFKA_ENABLE=${KAFKA_ENABLE:-"true"} \
|
KAFKA_ENABLE=${KAFKA_ENABLE:-"true"} \
|
||||||
KAFKA_BROKERLIST=${KAFKA_BROKERLIST:-"localhost:9092"} \
|
KAFKA_BROKERLIST=${KAFKA_BROKERLIST:-"localhost:9092"} \
|
||||||
KAFKA_SSL_CA_LOCATION=${KAFKA_SSL_CA_LOCATION:-""} \
|
|
||||||
KAFKA_SSL_CERTIFICATE_LOCATION=${KAFKA_SSL_CERTIFICATE_LOCATION:-""} \
|
|
||||||
KAFKA_SSL_KEY_LOCATION=${KAFKA_SSL_KEY_LOCATION:-""} \
|
|
||||||
KAFKA_SSL_KEY_PASSWORD=${KAFKA_SSL_KEY_PASSWORD:-""} \
|
|
||||||
STORAGE_TYPE=${STORAGE_TYPE:-"sqlite"} \
|
STORAGE_TYPE=${STORAGE_TYPE:-"sqlite"} \
|
||||||
STORAGE_TYPE_POSTGRESQL_HOST=${STORAGE_TYPE_POSTGRESQL_HOST:-"localhost"} \
|
STORAGE_TYPE_POSTGRESQL_HOST=${STORAGE_TYPE_POSTGRESQL_HOST:-"localhost"} \
|
||||||
STORAGE_TYPE_POSTGRESQL_USERNAME=${STORAGE_TYPE_POSTGRESQL_USERNAME:-"owfms"} \
|
STORAGE_TYPE_POSTGRESQL_USERNAME=${STORAGE_TYPE_POSTGRESQL_USERNAME:-"owfms"} \
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ fullnameOverride: ""
|
|||||||
images:
|
images:
|
||||||
owfms:
|
owfms:
|
||||||
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owfms
|
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owfms
|
||||||
tag: v2.6.0-RC2
|
tag: v2.5.2
|
||||||
pullPolicy: Always
|
pullPolicy: Always
|
||||||
# regcred:
|
# regcred:
|
||||||
# registry: tip-tip-wlan-cloud-ucentral.jfrog.io
|
# registry: tip-tip-wlan-cloud-ucentral.jfrog.io
|
||||||
@@ -155,10 +155,6 @@ configProperties:
|
|||||||
openwifi.kafka.brokerlist: localhost:9092
|
openwifi.kafka.brokerlist: localhost:9092
|
||||||
openwifi.kafka.auto.commit: false
|
openwifi.kafka.auto.commit: false
|
||||||
openwifi.kafka.queue.buffering.max.ms: 50
|
openwifi.kafka.queue.buffering.max.ms: 50
|
||||||
openwifi.kafka.ssl.ca.location: ""
|
|
||||||
openwifi.kafka.ssl.certificate.location: ""
|
|
||||||
openwifi.kafka.ssl.key.location: ""
|
|
||||||
openwifi.kafka.ssl.key.password: ""
|
|
||||||
# Storage
|
# Storage
|
||||||
storage.type: sqlite # (sqlite|postgresql|mysql|odbc)
|
storage.type: sqlite # (sqlite|postgresql|mysql|odbc)
|
||||||
## SQLite
|
## SQLite
|
||||||
|
|||||||
@@ -140,25 +140,6 @@ components:
|
|||||||
items:
|
items:
|
||||||
$ref: '#/components/schemas/FirmwareDetails'
|
$ref: '#/components/schemas/FirmwareDetails'
|
||||||
|
|
||||||
DeviceCurrentInfo:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
serialNumber:
|
|
||||||
type: string
|
|
||||||
revision:
|
|
||||||
type: string
|
|
||||||
upgraded:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
|
|
||||||
DeviceCurrentInfoList:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
devices:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/DeviceCurrentInfo'
|
|
||||||
|
|
||||||
RevisionHistoryEntry:
|
RevisionHistoryEntry:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
@@ -276,26 +257,6 @@ components:
|
|||||||
totalSecondsOld:
|
totalSecondsOld:
|
||||||
$ref: '#/components/schemas/TagIntPairList'
|
$ref: '#/components/schemas/TagIntPairList'
|
||||||
|
|
||||||
DeviceInformation:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
serialNumber:
|
|
||||||
type: string
|
|
||||||
history:
|
|
||||||
$ref: '#/components/schemas/RevisionHistoryEntryList'
|
|
||||||
currentFirmware:
|
|
||||||
type: string
|
|
||||||
currentFirmwareDate:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
latestFirmware:
|
|
||||||
type: string
|
|
||||||
latestFirmwareDate:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
latestFirmwareAvailable:
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
##
|
##
|
||||||
## These are endpoints that all services in the uCentral stack must provide
|
## These are endpoints that all services in the uCentral stack must provide
|
||||||
@@ -494,10 +455,9 @@ paths:
|
|||||||
required: false
|
required: false
|
||||||
- in: query
|
- in: query
|
||||||
name: latestOnly
|
name: latestOnly
|
||||||
description: Return only the latest firmware
|
description: Return only the latest firwares
|
||||||
schema:
|
schema:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
|
||||||
required: false
|
required: false
|
||||||
- in: query
|
- in: query
|
||||||
name: deviceType
|
name: deviceType
|
||||||
@@ -508,28 +468,19 @@ paths:
|
|||||||
name: revisionSet
|
name: revisionSet
|
||||||
schema:
|
schema:
|
||||||
type: boolean
|
type: boolean
|
||||||
default: false
|
|
||||||
required: false
|
required: false
|
||||||
- in: query
|
- in: query
|
||||||
name: deviceSet
|
name: deviceSet
|
||||||
schema:
|
schema:
|
||||||
type: boolean
|
type: boolean
|
||||||
required: false
|
required: false
|
||||||
- in: query
|
|
||||||
name: rcOnly
|
|
||||||
schema:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
required: false
|
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: List firmwares
|
description: List firmwares
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
oneOf:
|
$ref: '#/components/schemas/FirmwareDetailsList'
|
||||||
- $ref: '#/components/schemas/FirmwareDetailsList'
|
|
||||||
- $ref: '#/components/schemas/FirmwareDetails'
|
|
||||||
403:
|
403:
|
||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
404:
|
404:
|
||||||
@@ -676,31 +627,13 @@ paths:
|
|||||||
schema:
|
schema:
|
||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
- in: query
|
|
||||||
description: Return current device list and current firmware
|
|
||||||
name: currentList
|
|
||||||
schema:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
required: false
|
|
||||||
example: You must set {serialNumber} to 000000000000
|
|
||||||
- in: query
|
|
||||||
description: Return current device list and current firmware
|
|
||||||
name: unknownList
|
|
||||||
schema:
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
required: false
|
|
||||||
example: You must set {serialNumber} to 000000000000
|
|
||||||
responses:
|
responses:
|
||||||
200:
|
200:
|
||||||
description: List of device history upgrade.
|
description: List of device history upgrade.
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
oneOf:
|
$ref: '#/components/schemas/RevisionHistoryEntryList'
|
||||||
- $ref: '#/components/schemas/RevisionHistoryEntryList'
|
|
||||||
- $ref: '#/components/schemas/DeviceCurrentInfoList'
|
|
||||||
403:
|
403:
|
||||||
$ref: '#/components/responses/Unauthorized'
|
$ref: '#/components/responses/Unauthorized'
|
||||||
404:
|
404:
|
||||||
@@ -855,28 +788,6 @@ paths:
|
|||||||
404:
|
404:
|
||||||
$ref: '#/components/responses/NotFound'
|
$ref: '#/components/responses/NotFound'
|
||||||
|
|
||||||
/deviceInformation/{serialNumber}:
|
|
||||||
get:
|
|
||||||
tags:
|
|
||||||
- Device Information
|
|
||||||
summary: receive a repor on a single decide
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: serialNumber
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
example:
|
|
||||||
aabbccdd1234
|
|
||||||
required: true
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
$ref: '#/components/schemas/DeviceInformation'
|
|
||||||
403:
|
|
||||||
$ref: '#/components/responses/Unauthorized'
|
|
||||||
404:
|
|
||||||
$ref: '#/components/responses/NotFound'
|
|
||||||
|
|
||||||
|
|
||||||
#########################################################################################
|
#########################################################################################
|
||||||
##
|
##
|
||||||
## These are endpoints that all services in the uCentral stack must provide
|
## These are endpoints that all services in the uCentral stack must provide
|
||||||
|
|||||||
@@ -69,10 +69,6 @@ openwifi.kafka.enable = true
|
|||||||
openwifi.kafka.brokerlist = a1.arilia.com:9092
|
openwifi.kafka.brokerlist = a1.arilia.com:9092
|
||||||
openwifi.kafka.auto.commit = false
|
openwifi.kafka.auto.commit = false
|
||||||
openwifi.kafka.queue.buffering.max.ms = 50
|
openwifi.kafka.queue.buffering.max.ms = 50
|
||||||
openwifi.kafka.ssl.ca.location =
|
|
||||||
openwifi.kafka.ssl.certificate.location =
|
|
||||||
openwifi.kafka.ssl.key.location =
|
|
||||||
openwifi.kafka.ssl.key.password =
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# This section select which form of persistence you need
|
# This section select which form of persistence you need
|
||||||
|
|||||||
@@ -67,10 +67,6 @@ openwifi.kafka.enable = ${KAFKA_ENABLE}
|
|||||||
openwifi.kafka.brokerlist = ${KAFKA_BROKERLIST}
|
openwifi.kafka.brokerlist = ${KAFKA_BROKERLIST}
|
||||||
openwifi.kafka.auto.commit = false
|
openwifi.kafka.auto.commit = false
|
||||||
openwifi.kafka.queue.buffering.max.ms = 50
|
openwifi.kafka.queue.buffering.max.ms = 50
|
||||||
openwifi.kafka.ssl.ca.location = ${KAFKA_SSL_CA_LOCATION}
|
|
||||||
openwifi.kafka.ssl.certificate.location = ${KAFKA_SSL_CERTIFICATE_LOCATION}
|
|
||||||
openwifi.kafka.ssl.key.location = ${KAFKA_SSL_KEY_LOCATION}
|
|
||||||
openwifi.kafka.ssl.key.password = ${KAFKA_SSL_KEY_PASSWORD}
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# This section select which form of persistence you need
|
# This section select which form of persistence you need
|
||||||
|
|||||||
@@ -37,29 +37,28 @@ namespace OpenWifi {
|
|||||||
Queue_.emplace_back(std::make_pair(std::move(serialNumber),std::move(DeviceType)));
|
Queue_.emplace_back(std::make_pair(std::move(serialNumber),std::move(DeviceType)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::onTimer([[maybe_unused]] Poco::Timer & timer) {
|
void AutoUpdater::onTimer(Poco::Timer & timer) {
|
||||||
Utils::SetThreadName("auto-updater");
|
|
||||||
Running_ = true;
|
Running_ = true;
|
||||||
std::unique_lock L(Mutex_);
|
std::unique_lock L(Mutex_);
|
||||||
while(!Queue_.empty() && Running_) {
|
while(!Queue_.empty() && Running_) {
|
||||||
auto Entry = Queue_.front();
|
auto Entry = Queue_.front();
|
||||||
Queue_.pop_front();
|
Queue_.pop_front();
|
||||||
try {
|
try {
|
||||||
Logger().debug(fmt::format("Preparing to upgrade {}",Entry.first));
|
Logger().debug(Poco::format("Preparing to upgrade %s",Entry.first));
|
||||||
auto CacheEntry = Cache_.find(Entry.first);
|
auto CacheEntry = Cache_.find(Entry.first);
|
||||||
uint64_t now = OpenWifi::Now();
|
uint64_t Now = std::time(nullptr);
|
||||||
std::string firmwareUpgrade;
|
std::string firmwareUpgrade;
|
||||||
if(CacheEntry == Cache_.end() || (CacheEntry->second.LastCheck-now)>300) {
|
if(CacheEntry == Cache_.end() || (CacheEntry->second.LastCheck-Now)>300) {
|
||||||
// get the firmware settings for that device.
|
// get the firmware settings for that device.
|
||||||
SerialCache C;
|
SerialCache C;
|
||||||
C.LastCheck = now;
|
C.LastCheck = Now;
|
||||||
bool firmwareRCOnly;
|
bool firmwareRCOnly;
|
||||||
if(OpenWifi::SDK::Prov::GetFirmwareOptions(Entry.first, firmwareUpgrade, firmwareRCOnly)) {
|
if(OpenWifi::SDK::Prov::GetFirmwareOptions(Entry.first, firmwareUpgrade, firmwareRCOnly)) {
|
||||||
Logger().debug(fmt::format("Found firmware options for {}",Entry.first));
|
Logger().debug(Poco::format("Found firmware options for %s",Entry.first));
|
||||||
C.firmwareRCOnly = firmwareRCOnly;
|
C.firmwareRCOnly = firmwareRCOnly;
|
||||||
C.firmwareUpgrade = firmwareUpgrade;
|
C.firmwareUpgrade = firmwareUpgrade;
|
||||||
} else {
|
} else {
|
||||||
Logger().debug(fmt::format("Found no firmware options for {}",Entry.first));
|
Logger().debug(Poco::format("Found no firmware options for %s",Entry.first));
|
||||||
C.firmwareRCOnly = firmwareRCOnly;
|
C.firmwareRCOnly = firmwareRCOnly;
|
||||||
C.firmwareUpgrade = firmwareUpgrade;
|
C.firmwareUpgrade = firmwareUpgrade;
|
||||||
}
|
}
|
||||||
@@ -69,7 +68,7 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(firmwareUpgrade=="no") {
|
if(firmwareUpgrade=="no") {
|
||||||
Logger().information(fmt::format("Device {} not upgradable. Provisioning service settings.",Entry.first));
|
Logger().information(Poco::format("Device %s not upgradable. Provisioning service settings.",Entry.first));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,25 +78,25 @@ namespace OpenWifi {
|
|||||||
if(LF) {
|
if(LF) {
|
||||||
if(StorageService()->FirmwaresDB().GetFirmware(fwEntry.Id,fwDetails)) {
|
if(StorageService()->FirmwaresDB().GetFirmware(fwEntry.Id,fwDetails)) {
|
||||||
// send the command to upgrade this device...
|
// send the command to upgrade this device...
|
||||||
Logger().information(fmt::format("Upgrading {} to version {}", Entry.first, fwEntry.Revision));
|
Logger().information(Poco::format("Upgrading %s to version %s", Entry.first, fwEntry.Revision));
|
||||||
if(OpenWifi::SDK::GW::SendFirmwareUpgradeCommand(Entry.first,fwDetails.uri)) {
|
if(OpenWifi::SDK::GW::SendFirmwareUpgradeCommand(Entry.first,fwDetails.uri)) {
|
||||||
Logger().information(fmt::format("Upgrade command sent for {}",Entry.first));
|
Logger().information(Poco::format("Upgrade command sent for %s",Entry.first));
|
||||||
} else {
|
} else {
|
||||||
Logger().information(fmt::format("Upgrade command not sent for {}",Entry.first));
|
Logger().information(Poco::format("Upgrade command not sent for %s",Entry.first));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Logger().information(fmt::format("Firmware for device {} ({}) cannot be found.", Entry.first, Entry.second ));
|
Logger().information(Poco::format("Firmware for device %s (%s) cannot be found.", Entry.first, Entry.second ));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Logger().information(fmt::format("Firmware for device {} ({}) cannot be found.", Entry.first, Entry.second ));
|
Logger().information(Poco::format("Firmware for device %s (%s) cannot be found.", Entry.first, Entry.second ));
|
||||||
}
|
}
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
Logger().information(fmt::format("Exception during auto update for device {}.", Entry.first ));
|
Logger().information(Poco::format("Exception during auto update for device %s.", Entry.first ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoUpdater::reinitialize([[maybe_unused]] Poco::Util::Application &self) {
|
void AutoUpdater::reinitialize(Poco::Util::Application &self) {
|
||||||
Logger().information("Reinitializing.");
|
Logger().information("Reinitializing.");
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,12 @@ namespace OpenWifi {
|
|||||||
return instance_;
|
return instance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Daemon::PostInitialization([[maybe_unused]] Poco::Util::Application &self) {
|
void Daemon::initialize(Poco::Util::Application &self) {
|
||||||
|
MicroService::initialize(*this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MicroServicePostInitialization() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
src/Daemon.h
15
src/Daemon.h
@@ -12,11 +12,11 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
[[maybe_unused]] static const char * vDAEMON_PROPERTIES_FILENAME = "owfms.properties";
|
static const char * vDAEMON_PROPERTIES_FILENAME = "owfms.properties";
|
||||||
[[maybe_unused]] static const char * vDAEMON_ROOT_ENV_VAR = "OWFMS_ROOT";
|
static const char * vDAEMON_ROOT_ENV_VAR = "OWFMS_ROOT";
|
||||||
[[maybe_unused]] static const char * vDAEMON_CONFIG_ENV_VAR = "OWFMS_CONFIG";
|
static const char * vDAEMON_CONFIG_ENV_VAR = "OWFMS_CONFIG";
|
||||||
[[maybe_unused]] static const char * vDAEMON_APP_NAME = uSERVICE_FIRMWARE.c_str();
|
static const char * vDAEMON_APP_NAME = uSERVICE_FIRMWARE.c_str();
|
||||||
[[maybe_unused]] static const uint64_t vDAEMON_BUS_TIMER = 10000;
|
static const uint64_t vDAEMON_BUS_TIMER = 10000;
|
||||||
|
|
||||||
class Daemon : public MicroService {
|
class Daemon : public MicroService {
|
||||||
public:
|
public:
|
||||||
@@ -28,7 +28,7 @@ namespace OpenWifi {
|
|||||||
const SubSystemVec & SubSystems) :
|
const SubSystemVec & SubSystems) :
|
||||||
MicroService( PropFile, RootEnv, ConfigEnv, AppName, BusTimer, SubSystems) {};
|
MicroService( PropFile, RootEnv, ConfigEnv, AppName, BusTimer, SubSystems) {};
|
||||||
|
|
||||||
void PostInitialization(Poco::Util::Application &self);
|
void initialize(Poco::Util::Application &self);
|
||||||
static Daemon *instance();
|
static Daemon *instance();
|
||||||
inline void ResetDashboard() { DB_.Reset(); }
|
inline void ResetDashboard() { DB_.Reset(); }
|
||||||
inline void CreateDashboard() { DB_.Create(); }
|
inline void CreateDashboard() { DB_.Create(); }
|
||||||
@@ -40,9 +40,6 @@ namespace OpenWifi {
|
|||||||
};
|
};
|
||||||
|
|
||||||
inline Daemon * Daemon() { return Daemon::instance(); }
|
inline Daemon * Daemon() { return Daemon::instance(); }
|
||||||
inline void DaemonPostInitialization(Poco::Util::Application &self) {
|
|
||||||
Daemon()->PostInitialization(self);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //UCENTRALFWS_DAEMON_H
|
#endif //UCENTRALFWS_DAEMON_H
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void DeviceDashboard::Create() {
|
void DeviceDashboard::Create() {
|
||||||
uint64_t Now = OpenWifi::Now();
|
uint64_t Now = std::time(nullptr);
|
||||||
|
|
||||||
if(LastRun_==0 || (Now-LastRun_)>120) {
|
if(LastRun_==0 || (Now-LastRun_)>120) {
|
||||||
DB_.reset();
|
DB_.reset();
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<FMSObjects::Firmware> GetFirmware([[maybe_unused]] const std::string & DeviceType, [[maybe_unused]] const std::string & Revision) {
|
std::shared_ptr<FMSObjects::Firmware> GetFirmware(const std::string & DeviceType, const std::string & Revision) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<FMSObjects::Firmware> AddFirmware([[maybe_unused]] const FMSObjects::Firmware &F) {
|
std::shared_ptr<FMSObjects::Firmware> AddFirmware(const FMSObjects::Firmware &F) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ namespace OpenWifi {
|
|||||||
std::shared_ptr<FMSObjects::Firmware> GetFirmware(const std::string & DeviceType, const std::string & Revision);
|
std::shared_ptr<FMSObjects::Firmware> GetFirmware(const std::string & DeviceType, const std::string & Revision);
|
||||||
std::shared_ptr<FMSObjects::Firmware> AddFirmware(const FMSObjects::Firmware &F);
|
std::shared_ptr<FMSObjects::Firmware> AddFirmware(const FMSObjects::Firmware &F);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::atomic_bool Running_=false;
|
std::atomic_bool Running_=false;
|
||||||
FirmwareCacheMap Cache_;
|
FirmwareCacheMap Cache_;
|
||||||
|
|||||||
@@ -20,26 +20,14 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
RevisionSet_.insert(Revision);
|
RevisionSet_.insert(Revision);
|
||||||
DeviceSet_.insert(DeviceType);
|
DeviceSet_.insert(DeviceType);
|
||||||
|
|
||||||
auto E = Cache_.find(DeviceType);
|
auto E = Cache_.find(DeviceType);
|
||||||
if((E==Cache_.end()) || (TimeStamp >= E->second.TimeStamp)) {
|
if((E==Cache_.end()) || (TimeStamp >= E->second.TimeStamp)) {
|
||||||
Cache_[DeviceType] = LatestFirmwareCacheEntry{
|
Cache_[DeviceType] = LatestFirmwareCacheEntry{ .Id=Id,
|
||||||
.Id=Id,
|
|
||||||
.TimeStamp=TimeStamp,
|
.TimeStamp=TimeStamp,
|
||||||
.Revision=Revision};
|
.Revision=Revision};
|
||||||
}
|
|
||||||
|
|
||||||
if(!IsRC(Revision))
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
auto rcE = rcCache_.find(DeviceType);
|
|
||||||
if((rcE==rcCache_.end()) || (TimeStamp >= rcE->second.TimeStamp)) {
|
|
||||||
rcCache_[DeviceType] = LatestFirmwareCacheEntry{
|
|
||||||
.Id=Id,
|
|
||||||
.TimeStamp=TimeStamp,
|
|
||||||
.Revision=Revision};
|
|
||||||
}
|
}
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LatestFirmwareCache::FindLatestFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry ) {
|
bool LatestFirmwareCache::FindLatestFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry ) {
|
||||||
@@ -50,21 +38,10 @@ namespace OpenWifi {
|
|||||||
Entry = E->second;
|
Entry = E->second;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LatestFirmwareCache::FindLatestRCOnlyFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry ) {
|
|
||||||
std::lock_guard G(Mutex_);
|
|
||||||
|
|
||||||
auto E=rcCache_.find(DeviceType);
|
|
||||||
if(E!=rcCache_.end()) {
|
|
||||||
Entry = E->second;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool LatestFirmwareCache::IsLatest(const std::string &DeviceType, const std::string &Revision) {
|
bool LatestFirmwareCache::IsLatest(const std::string &DeviceType, const std::string &Revision) {
|
||||||
std::lock_guard G(Mutex_);
|
std::lock_guard G(Mutex_);
|
||||||
|
|
||||||
@@ -75,16 +52,6 @@ namespace OpenWifi {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LatestFirmwareCache::IsLatestRCOnly(const std::string &DeviceType, const std::string &Revision) {
|
|
||||||
std::lock_guard G(Mutex_);
|
|
||||||
|
|
||||||
auto E=rcCache_.find(DeviceType);
|
|
||||||
if(E!=rcCache_.end()) {
|
|
||||||
return E->second.Revision==Revision;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LatestFirmwareCache::DumpCache() {
|
void LatestFirmwareCache::DumpCache() {
|
||||||
std::lock_guard G(Mutex_);
|
std::lock_guard G(Mutex_);
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ namespace OpenWifi {
|
|||||||
std::string Revision;
|
std::string Revision;
|
||||||
};
|
};
|
||||||
typedef std::map<std::string, LatestFirmwareCacheEntry> LatestFirmwareCacheMap;
|
typedef std::map<std::string, LatestFirmwareCacheEntry> LatestFirmwareCacheMap;
|
||||||
typedef std::map<std::string, LatestFirmwareCacheEntry> rcOnlyLatestFirmwareCacheMap;
|
|
||||||
|
|
||||||
class LatestFirmwareCache : public SubSystemServer {
|
class LatestFirmwareCache : public SubSystemServer {
|
||||||
public:
|
public:
|
||||||
@@ -35,25 +34,13 @@ namespace OpenWifi {
|
|||||||
bool AddToCache(const std::string & DeviceType, const std::string & Revision, const std::string &Id, uint64_t TimeStamp);
|
bool AddToCache(const std::string & DeviceType, const std::string & Revision, const std::string &Id, uint64_t TimeStamp);
|
||||||
// void AddRevision(const std::string &Revision);
|
// void AddRevision(const std::string &Revision);
|
||||||
bool FindLatestFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry );
|
bool FindLatestFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry );
|
||||||
bool FindLatestRCOnlyFirmware(const std::string &DeviceType, LatestFirmwareCacheEntry &Entry );
|
|
||||||
|
|
||||||
inline static bool IsRC(const std::string & Revision) {
|
|
||||||
// OpenWrt 21.02-SNAPSHOT r16399+120-c67509efd7 / TIP-v2.5.0-36b5478
|
|
||||||
auto Tokens = Poco::StringTokenizer(Revision,"/", Poco::StringTokenizer::TOK_TRIM);
|
|
||||||
if(Tokens.count()!=2)
|
|
||||||
return false;
|
|
||||||
return (Tokens[1].substr(0,5) == "IP-v");
|
|
||||||
}
|
|
||||||
|
|
||||||
void DumpCache();
|
void DumpCache();
|
||||||
inline Types::StringSet GetRevisions() { std::lock_guard G(Mutex_); return RevisionSet_; };
|
inline Types::StringSet GetRevisions() { std::lock_guard G(Mutex_); return RevisionSet_; };
|
||||||
inline Types::StringSet GetDevices() { std::lock_guard G(Mutex_); return DeviceSet_; };
|
inline Types::StringSet GetDevices() { std::lock_guard G(Mutex_); return DeviceSet_; };
|
||||||
bool IsLatest(const std::string &DeviceType, const std::string &Revision);
|
bool IsLatest(const std::string &DeviceType, const std::string &Revision);
|
||||||
bool IsLatestRCOnly(const std::string &DeviceType, const std::string &Revision);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
LatestFirmwareCacheMap Cache_;
|
LatestFirmwareCacheMap Cache_;
|
||||||
rcOnlyLatestFirmwareCacheMap rcCache_;
|
|
||||||
Types::StringSet RevisionSet_;
|
Types::StringSet RevisionSet_;
|
||||||
Types::StringSet DeviceSet_;
|
Types::StringSet DeviceSet_;
|
||||||
explicit LatestFirmwareCache() noexcept:
|
explicit LatestFirmwareCache() noexcept:
|
||||||
|
|||||||
@@ -16,20 +16,19 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
void ManifestCreator::onTimer([[maybe_unused]] Poco::Timer &timer) {
|
void ManifestCreator::onTimer(Poco::Timer &timer) {
|
||||||
Utils::SetThreadName("manifest");
|
|
||||||
Logger().information("Performing DB refresh");
|
Logger().information("Performing DB refresh");
|
||||||
S3BucketContent BucketList;
|
S3BucketContent BucketList;
|
||||||
StorageService()->FirmwaresDB().RemoveOldFirmware();
|
StorageService()->FirmwaresDB().RemoveOldFirmware();
|
||||||
ReadBucket(BucketList);
|
ReadBucket(BucketList);
|
||||||
Logger().information(fmt::format("Found {} firmware entries in S3 repository.", BucketList.size()));
|
Logger().information(Poco::format("Found %Lu firmware entries in S3 repository.",(uint64_t)BucketList.size()));
|
||||||
ComputeManifest(BucketList);
|
ComputeManifest(BucketList);
|
||||||
AddManifestToDB(BucketList);
|
AddManifestToDB(BucketList);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ManifestCreator::ComputeManifest(S3BucketContent &BucketContent) {
|
bool ManifestCreator::ComputeManifest(S3BucketContent &BucketContent) {
|
||||||
|
|
||||||
uint64_t Limit = OpenWifi::Now() - MaxAge_, Rejected=0, Accepted=0, BadFormat=0, MissingJson=0;
|
uint64_t Limit = std::time(nullptr) - MaxAge_, Rejected=0, Accepted=0, BadFormat=0, MissingJson=0;
|
||||||
for(auto &[Name,Entry]:BucketContent) {
|
for(auto &[Name,Entry]:BucketContent) {
|
||||||
std::string C = Entry.S3ContentManifest;
|
std::string C = Entry.S3ContentManifest;
|
||||||
|
|
||||||
@@ -49,7 +48,7 @@ namespace OpenWifi {
|
|||||||
Entry.Image = ParsedContent->get("image").toString();
|
Entry.Image = ParsedContent->get("image").toString();
|
||||||
auto FullNme = Name + "-upgrade.bin";
|
auto FullNme = Name + "-upgrade.bin";
|
||||||
if(FullNme!=Entry.Image) {
|
if(FullNme!=Entry.Image) {
|
||||||
Logger().error(fmt::format("MANIFEST({}): Image name does not match manifest name ({}).",Name,Entry.Image));
|
Logger().error(Poco::format("MANIFEST(%s): Image name does not match manifest name (%s).",Name,Entry.Image));
|
||||||
Entry.Valid = false;
|
Entry.Valid = false;
|
||||||
BadFormat++;
|
BadFormat++;
|
||||||
continue;
|
continue;
|
||||||
@@ -61,7 +60,7 @@ namespace OpenWifi {
|
|||||||
Entry.Valid = false;
|
Entry.Valid = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Logger().error(fmt::format("MANIFEST({}): Entry does not have a valid JSON manifest.",Name));
|
Logger().error(Poco::format("MANIFEST(%s): Entry does not have a valid JSON manifest.",Name));
|
||||||
MissingJson++;
|
MissingJson++;
|
||||||
Entry.Valid = false;
|
Entry.Valid = false;
|
||||||
}
|
}
|
||||||
@@ -70,10 +69,10 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Logger().information(fmt::format("Accepted {} firmwares.", Accepted));
|
Logger().information(Poco::format("Accepted %Lu firmwares.", Accepted));
|
||||||
Logger().information(fmt::format("Rejected {} too old firmwares.", Rejected));
|
Logger().information(Poco::format("Rejected %Lu too old firmwares.", Rejected));
|
||||||
Logger().information(fmt::format("Rejected {} bad JSON.", BadFormat));
|
Logger().information(Poco::format("Rejected %Lu bad JSON.", BadFormat));
|
||||||
Logger().information(fmt::format("Rejected {} missing JSON.", MissingJson));
|
Logger().information(Poco::format("Rejected %Lu missing JSON.", MissingJson));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -92,14 +91,14 @@ namespace OpenWifi {
|
|||||||
F.id = MicroService::instance().CreateUUID();
|
F.id = MicroService::instance().CreateUUID();
|
||||||
F.release = Release;
|
F.release = Release;
|
||||||
F.size = BucketEntry.S3Size;
|
F.size = BucketEntry.S3Size;
|
||||||
F.created = OpenWifi::Now();
|
F.created = std::time(nullptr);
|
||||||
F.imageDate = BucketEntry.S3TimeStamp;
|
F.imageDate = BucketEntry.S3TimeStamp;
|
||||||
F.image = BucketEntry.Image;
|
F.image = BucketEntry.S3Name;
|
||||||
F.uri = BucketEntry.URI;
|
F.uri = BucketEntry.URI;
|
||||||
F.revision = BucketEntry.Revision;
|
F.revision = BucketEntry.Revision;
|
||||||
F.deviceType = BucketEntry.Compatible;
|
F.deviceType = BucketEntry.Compatible;
|
||||||
if(StorageService()->FirmwaresDB().AddFirmware(F)) {
|
if(StorageService()->FirmwaresDB().AddFirmware(F)) {
|
||||||
Logger().information(fmt::format("Adding firmware '{}', size={}",Release,F.size));
|
Logger().information(Poco::format("Adding firmware '%s'",Release));
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -127,8 +126,8 @@ namespace OpenWifi {
|
|||||||
AwsCreds_.SetAWSSecretKey(S3Secret_);
|
AwsCreds_.SetAWSSecretKey(S3Secret_);
|
||||||
|
|
||||||
ManifestCreatorCallBack_ = std::make_unique<Poco::TimerCallback<ManifestCreator>>(*this, &ManifestCreator::onTimer);
|
ManifestCreatorCallBack_ = std::make_unique<Poco::TimerCallback<ManifestCreator>>(*this, &ManifestCreator::onTimer);
|
||||||
Timer_.setStartInterval(1 * 60 * 1000); // first run in 1 minutes
|
Timer_.setStartInterval(5 * 60 * 1000); // first run in 5 minutes
|
||||||
Timer_.setPeriodicInterval((long)(DBRefresh_ * 1000));
|
Timer_.setPeriodicInterval(DBRefresh_ * 1000);
|
||||||
Timer_.start(*ManifestCreatorCallBack_);
|
Timer_.start(*ManifestCreatorCallBack_);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -185,7 +184,7 @@ namespace OpenWifi {
|
|||||||
while(!isDone) {
|
while(!isDone) {
|
||||||
Outcome = S3Client.ListObjectsV2(Request);
|
Outcome = S3Client.ListObjectsV2(Request);
|
||||||
if(!Outcome.IsSuccess()) {
|
if(!Outcome.IsSuccess()) {
|
||||||
Logger().error(fmt::format("Error while doing ListObjectsV2: {}, {}",
|
Logger().error(Poco::format("Error while doing ListObjectsV2: %s, %s",
|
||||||
std::string{Outcome.GetError().GetExceptionName()},
|
std::string{Outcome.GetError().GetExceptionName()},
|
||||||
std::string{Outcome.GetError().GetMessage()}));
|
std::string{Outcome.GetError().GetMessage()}));
|
||||||
return false;
|
return false;
|
||||||
@@ -225,16 +224,11 @@ namespace OpenWifi {
|
|||||||
It->second.S3ContentManifest = Content;
|
It->second.S3ContentManifest = Content;
|
||||||
} else {
|
} else {
|
||||||
Bucket.emplace(Release, S3BucketEntry{
|
Bucket.emplace(Release, S3BucketEntry{
|
||||||
.Valid = false,
|
|
||||||
.S3Name = "",
|
|
||||||
.S3ContentManifest = Content,
|
.S3ContentManifest = Content,
|
||||||
.S3TimeStamp = 0 ,
|
|
||||||
.S3Size = 0 ,
|
|
||||||
.Revision = Revision,
|
.Revision = Revision,
|
||||||
.Image = Image,
|
.Image = Image,
|
||||||
.Compatible = Compatible,
|
.Compatible = Compatible,
|
||||||
.Timestamp = TimeStamp,
|
.Timestamp = TimeStamp});
|
||||||
.URI = ""});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -251,17 +245,10 @@ namespace OpenWifi {
|
|||||||
It->second.S3Name = ReleaseName;
|
It->second.S3Name = ReleaseName;
|
||||||
It->second.URI = URI;
|
It->second.URI = URI;
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
Bucket.emplace(ReleaseName, S3BucketEntry{
|
Bucket.emplace(ReleaseName, S3BucketEntry{
|
||||||
.Valid = false,
|
.S3Name = ReleaseName,
|
||||||
.S3Name = "",
|
|
||||||
.S3ContentManifest = "",
|
|
||||||
.S3TimeStamp = S3TimeStamp,
|
.S3TimeStamp = S3TimeStamp,
|
||||||
.S3Size = S3Size ,
|
.S3Size = S3Size,
|
||||||
.Revision = "",
|
|
||||||
.Image = "",
|
|
||||||
.Compatible = "",
|
|
||||||
.Timestamp = 0 ,
|
|
||||||
.URI = URI});
|
.URI = URI});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -281,7 +268,7 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
// std::cout << "Count:" << Count << " Runs:" << Runs << std::endl;
|
// std::cout << "Count:" << Count << " Runs:" << Runs << std::endl;
|
||||||
if(!Outcome.IsSuccess()) {
|
if(!Outcome.IsSuccess()) {
|
||||||
Logger().error(fmt::format("Error while doing ListObjectsV2: {}, {}",
|
Logger().error(Poco::format("Error while doing ListObjectsV2: %s, %s",
|
||||||
std::string{Outcome.GetError().GetExceptionName()},
|
std::string{Outcome.GetError().GetExceptionName()},
|
||||||
std::string{Outcome.GetError().GetMessage()}));
|
std::string{Outcome.GetError().GetMessage()}));
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ namespace OpenWifi {
|
|||||||
|
|
||||||
void NewCommandHandler::run() {
|
void NewCommandHandler::run() {
|
||||||
Running_ = true ;
|
Running_ = true ;
|
||||||
Utils::SetThreadName("cmd-handler");
|
|
||||||
while(Running_) {
|
while(Running_) {
|
||||||
Poco::Thread::trySleep(2000);
|
Poco::Thread::trySleep(2000);
|
||||||
|
|
||||||
@@ -46,9 +45,9 @@ namespace OpenWifi {
|
|||||||
if(Command=="delete_device") {
|
if(Command=="delete_device") {
|
||||||
auto pSerialNumber = PayloadSection["payload"]["serialNumber"];
|
auto pSerialNumber = PayloadSection["payload"]["serialNumber"];
|
||||||
if(pSerialNumber==SerialNumber) {
|
if(pSerialNumber==SerialNumber) {
|
||||||
Logger().debug(fmt::format("Removing device '{}' from upgrade history.",SerialNumber));
|
Logger().debug(Poco::format("Removing device '%s' from upgrade history.",SerialNumber));
|
||||||
StorageService()->HistoryDB().DeleteHistory(SerialNumber);
|
StorageService()->HistoryDB().DeleteHistory(SerialNumber);
|
||||||
Logger().debug(fmt::format("Removing device '{}' from device table.",SerialNumber));
|
Logger().debug(Poco::format("Removing device '%s' from device table.",SerialNumber));
|
||||||
StorageService()->DevicesDB().DeleteDevice(SerialNumber);
|
StorageService()->DevicesDB().DeleteDevice(SerialNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,11 +5,11 @@
|
|||||||
#include "NewConnectionHandler.h"
|
#include "NewConnectionHandler.h"
|
||||||
#include "framework/KafkaTopics.h"
|
#include "framework/KafkaTopics.h"
|
||||||
#include "framework/OpenWifiTypes.h"
|
#include "framework/OpenWifiTypes.h"
|
||||||
#include "framework/ow_constants.h"
|
|
||||||
#include "Poco/JSON/Object.h"
|
#include "Poco/JSON/Object.h"
|
||||||
#include "Poco/JSON/Parser.h"
|
#include "Poco/JSON/Parser.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "LatestFirmwareCache.h"
|
#include "LatestFirmwareCache.h"
|
||||||
|
#include "framework/uCentral_Protocol.h"
|
||||||
#include "DeviceCache.h"
|
#include "DeviceCache.h"
|
||||||
#include "AutoUpdater.h"
|
#include "AutoUpdater.h"
|
||||||
|
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
void NewConnectionHandler::run() {
|
void NewConnectionHandler::run() {
|
||||||
Utils::SetThreadName("conn-handler");
|
|
||||||
Running_ = true ;
|
Running_ = true ;
|
||||||
while(Running_) {
|
while(Running_) {
|
||||||
Poco::Thread::trySleep(2000);
|
Poco::Thread::trySleep(2000);
|
||||||
@@ -68,12 +67,12 @@ namespace OpenWifi {
|
|||||||
if(StorageService()->FirmwaresDB().ComputeFirmwareAge(DeviceType, Revision, FA)) {
|
if(StorageService()->FirmwaresDB().ComputeFirmwareAge(DeviceType, Revision, FA)) {
|
||||||
StorageService()->DevicesDB().SetDeviceRevision(SerialNumber, Revision, DeviceType, EndPoint);
|
StorageService()->DevicesDB().SetDeviceRevision(SerialNumber, Revision, DeviceType, EndPoint);
|
||||||
if(FA.age)
|
if(FA.age)
|
||||||
Logger().information(fmt::format("Device {} connection. Firmware is {} older than latest.",SerialNumber, Utils::SecondsToNiceText(FA.age)));
|
Logger().information(Poco::format("Device %s connection. Firmware is %s older than latest.",SerialNumber, Utils::SecondsToNiceText(FA.age)));
|
||||||
else
|
else
|
||||||
Logger().information(fmt::format("Device {} connection. Device firmware is up to date.",SerialNumber));
|
Logger().information(Poco::format("Device %s connection. Device firmware is up to date.",SerialNumber));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Logger().information(fmt::format("Device {} connection. Firmware age cannot be determined.",SerialNumber));
|
Logger().information(Poco::format("Device %s connection. Firmware age cannot be determined",SerialNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!LatestFirmwareCache()->IsLatest(DeviceType, Revision)) {
|
if(!LatestFirmwareCache()->IsLatest(DeviceType, Revision)) {
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ namespace OpenWifi {
|
|||||||
private:
|
private:
|
||||||
Poco::Thread Worker_;
|
Poco::Thread Worker_;
|
||||||
std::atomic_bool Running_ = false;
|
std::atomic_bool Running_ = false;
|
||||||
uint64_t ConnectionWatcherId_=0;
|
int ConnectionWatcherId_=0;
|
||||||
|
int HealthcheckWatcherId_=0;
|
||||||
Types::StringPairQueue NewConnections_;
|
Types::StringPairQueue NewConnections_;
|
||||||
|
|
||||||
NewConnectionHandler() noexcept:
|
NewConnectionHandler() noexcept:
|
||||||
|
|||||||
@@ -11,11 +11,10 @@
|
|||||||
#include "RESTAPI/RESTAPI_connectedDevicesHandler.h"
|
#include "RESTAPI/RESTAPI_connectedDevicesHandler.h"
|
||||||
#include "RESTAPI/RESTAPI_historyHandler.h"
|
#include "RESTAPI/RESTAPI_historyHandler.h"
|
||||||
#include "RESTAPI/RESTAPI_deviceReportHandler.h"
|
#include "RESTAPI/RESTAPI_deviceReportHandler.h"
|
||||||
#include "RESTAPI/RESTAPI_deviceInformation_handler.h"
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
Poco::Net::HTTPRequestHandler * RESTAPI_ExtRouter(const std::string &Path, RESTAPIHandler::BindingMap &Bindings,
|
Poco::Net::HTTPRequestHandler * RESTAPI_ExtRouter(const char *Path, RESTAPIHandler::BindingMap &Bindings,
|
||||||
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
||||||
return RESTAPI_Router<
|
return RESTAPI_Router<
|
||||||
RESTAPI_firmwaresHandler,
|
RESTAPI_firmwaresHandler,
|
||||||
@@ -25,23 +24,18 @@ namespace OpenWifi {
|
|||||||
RESTAPI_connectedDevicesHandler,
|
RESTAPI_connectedDevicesHandler,
|
||||||
RESTAPI_connectedDeviceHandler,
|
RESTAPI_connectedDeviceHandler,
|
||||||
RESTAPI_historyHandler,
|
RESTAPI_historyHandler,
|
||||||
RESTAPI_deviceReportHandler,
|
RESTAPI_deviceReportHandler
|
||||||
RESTAPI_deviceInformation_handler
|
|
||||||
>(Path,Bindings,L, S, TransactionId);
|
>(Path,Bindings,L, S, TransactionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
Poco::Net::HTTPRequestHandler * RESTAPI_IntRouter(const std::string &Path, RESTAPIHandler::BindingMap &Bindings,
|
Poco::Net::HTTPRequestHandler * RESTAPI_IntRouter(const char *Path, RESTAPIHandler::BindingMap &Bindings,
|
||||||
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
Poco::Logger & L, RESTAPI_GenericServer & S, uint64_t TransactionId) {
|
||||||
return RESTAPI_Router_I<
|
return RESTAPI_Router_I<
|
||||||
RESTAPI_firmwaresHandler,
|
RESTAPI_firmwaresHandler,
|
||||||
RESTAPI_firmwareHandler,
|
RESTAPI_firmwareHandler,
|
||||||
RESTAPI_system_command,
|
RESTAPI_system_command,
|
||||||
RESTAPI_firmwareAgeHandler,
|
|
||||||
RESTAPI_connectedDevicesHandler,
|
RESTAPI_connectedDevicesHandler,
|
||||||
RESTAPI_connectedDeviceHandler,
|
RESTAPI_connectedDeviceHandler
|
||||||
RESTAPI_historyHandler,
|
|
||||||
RESTAPI_deviceReportHandler,
|
|
||||||
RESTAPI_deviceInformation_handler
|
|
||||||
>(Path, Bindings, L, S, TransactionId);
|
>(Path, Bindings, L, S, TransactionId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,8 @@
|
|||||||
#include "RESTAPI_connectedDeviceHandler.h"
|
#include "RESTAPI_connectedDeviceHandler.h"
|
||||||
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
#include "framework/RESTAPI_errors.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/connectedDevice/{serialNumber}"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/connectedDevice/{serialNumber}"};}
|
||||||
|
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final {};
|
void DoDelete() final {};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
#include "RESTAPI_connectedDevicesHandler.h"
|
#include "RESTAPI_connectedDevicesHandler.h"
|
||||||
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void RESTAPI_connectedDevicesHandler::DoGet() {
|
void RESTAPI_connectedDevicesHandler::DoGet() {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/connectedDevices"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/connectedDevices"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final {};
|
void DoDelete() final {};
|
||||||
void DoPost() final {};
|
void DoPost() final {};
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-03-04.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "RESTAPI_deviceInformation_handler.h"
|
|
||||||
#include "StorageService.h"
|
|
||||||
#include "LatestFirmwareCache.h"
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
|
||||||
void RESTAPI_deviceInformation_handler::DoGet() {
|
|
||||||
auto SerialNumber = GetBinding("serialNumber","");
|
|
||||||
|
|
||||||
if(SerialNumber.empty() || !Utils::ValidSerialNumber(SerialNumber)) {
|
|
||||||
return BadRequest(RESTAPI::Errors::MissingOrInvalidParameters);
|
|
||||||
}
|
|
||||||
|
|
||||||
FMSObjects::DeviceInformation DI;
|
|
||||||
|
|
||||||
// Let's get the history
|
|
||||||
StorageService()->HistoryDB().GetHistory(SerialNumber,0,100,DI.history.history);
|
|
||||||
|
|
||||||
// Let's get the DeviceConnectionInformation
|
|
||||||
FMSObjects::DeviceConnectionInformation DCI;
|
|
||||||
StorageService()->DevicesDB().GetDevice(SerialNumber,DCI);
|
|
||||||
|
|
||||||
LatestFirmwareCacheEntry LFE;
|
|
||||||
LatestFirmwareCache()->FindLatestFirmware(DCI.deviceType,LFE);
|
|
||||||
|
|
||||||
FMSObjects::Firmware Latest;
|
|
||||||
StorageService()->FirmwaresDB().GetFirmware(LFE.Id,Latest);
|
|
||||||
|
|
||||||
DI.serialNumber = SerialNumber;
|
|
||||||
DI.currentFirmware = DCI.revision;
|
|
||||||
DI.latestFirmware = LFE.Revision;
|
|
||||||
DI.latestFirmwareDate = LFE.TimeStamp;
|
|
||||||
DI.latestFirmwareURI = Latest.uri;
|
|
||||||
FirmwaresDB::RecordName FI;
|
|
||||||
StorageService()->FirmwaresDB().GetFirmwareByRevision(DCI.revision,DCI.deviceType,FI);
|
|
||||||
DI.currentFirmwareDate = FI.imageDate;
|
|
||||||
|
|
||||||
DI.latestFirmwareAvailable = (LFE.Revision != DCI.revision);
|
|
||||||
|
|
||||||
Poco::JSON::Object Answer;
|
|
||||||
DI.to_json(Answer);
|
|
||||||
return ReturnObject(Answer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-03-04.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "framework/MicroService.h"
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
|
||||||
class RESTAPI_deviceInformation_handler : public RESTAPIHandler {
|
|
||||||
public:
|
|
||||||
RESTAPI_deviceInformation_handler(const RESTAPIHandler::BindingMap &bindings, Poco::Logger &L, RESTAPI_GenericServer & Server, uint64_t TransactionId, bool Internal)
|
|
||||||
: RESTAPIHandler(bindings, L,
|
|
||||||
std::vector<std::string>
|
|
||||||
{Poco::Net::HTTPRequest::HTTP_GET,
|
|
||||||
Poco::Net::HTTPRequest::HTTP_OPTIONS},
|
|
||||||
Server,
|
|
||||||
TransactionId,
|
|
||||||
Internal) {}
|
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/deviceInformation/{serialNumber}"};}
|
|
||||||
void DoGet() final;
|
|
||||||
void DoDelete() final {};
|
|
||||||
void DoPost() final {};
|
|
||||||
void DoPut() final {};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "RESTAPI_deviceReportHandler.h"
|
#include "RESTAPI_deviceReportHandler.h"
|
||||||
|
#include "StorageService.h"
|
||||||
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
#include "RESTObjects/RESTAPI_FMSObjects.h"
|
||||||
#include "Poco/JSON/Object.h"
|
#include "Poco/JSON/Object.h"
|
||||||
#include "Daemon.h"
|
#include "Daemon.h"
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
// Created by stephane bourque on 2021-07-19.
|
// Created by stephane bourque on 2021-07-19.
|
||||||
//
|
//
|
||||||
|
|
||||||
#pragma once
|
#ifndef UCENTRALFMS_RESTAPI_DEVICEREPORTHANDLER_H
|
||||||
|
#define UCENTRALFMS_RESTAPI_DEVICEREPORTHANDLER_H
|
||||||
|
|
||||||
#include "framework/MicroService.h"
|
#include "framework/MicroService.h"
|
||||||
|
|
||||||
@@ -17,10 +18,13 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/deviceReport"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/deviceReport"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final {};
|
void DoDelete() final {};
|
||||||
void DoPost() final {};
|
void DoPost() final {};
|
||||||
void DoPut() final {};
|
void DoPut() final {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //UCENTRALFMS_RESTAPI_DEVICEREPORTHANDLER_H
|
||||||
|
|||||||
@@ -7,7 +7,10 @@
|
|||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "Poco/JSON/Parser.h"
|
#include "Poco/JSON/Parser.h"
|
||||||
#include "DeviceCache.h"
|
#include "DeviceCache.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/uCentral_Protocol.h"
|
||||||
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
#include "framework/RESTAPI_errors.h"
|
||||||
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void RESTAPI_firmwareAgeHandler::DoGet() {
|
void RESTAPI_firmwareAgeHandler::DoGet() {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/firmwareAge"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/firmwareAge"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final {};
|
void DoDelete() final {};
|
||||||
void DoPost() final {};
|
void DoPost() final {};
|
||||||
|
|||||||
@@ -6,12 +6,14 @@
|
|||||||
|
|
||||||
#include "RESTAPI_firmwareHandler.h"
|
#include "RESTAPI_firmwareHandler.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/uCentral_Protocol.h"
|
||||||
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
#include "framework/RESTAPI_errors.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void
|
void
|
||||||
RESTAPI_firmwareHandler::DoPost() {
|
RESTAPI_firmwareHandler::DoPost() {
|
||||||
const auto &Obj = ParsedBody_;
|
auto Obj = ParseStream();
|
||||||
FMSObjects::Firmware F;
|
FMSObjects::Firmware F;
|
||||||
if (!F.from_json(Obj)) {
|
if (!F.from_json(Obj)) {
|
||||||
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
||||||
@@ -66,7 +68,7 @@ namespace OpenWifi {
|
|||||||
return NotFound();
|
return NotFound();
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto & Obj = ParsedBody_;
|
auto Obj = ParseStream();
|
||||||
FMSObjects::Firmware NewFirmware;
|
FMSObjects::Firmware NewFirmware;
|
||||||
if(!NewFirmware.from_json(Obj)) {
|
if(!NewFirmware.from_json(Obj)) {
|
||||||
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
return BadRequest(RESTAPI::Errors::InvalidJSONDocument);
|
||||||
@@ -78,7 +80,7 @@ namespace OpenWifi {
|
|||||||
SecurityObjects::NoteInfoVec NIV;
|
SecurityObjects::NoteInfoVec NIV;
|
||||||
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(Obj->get(RESTAPI::Protocol::NOTES).toString());
|
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(Obj->get(RESTAPI::Protocol::NOTES).toString());
|
||||||
for(auto const &i:NIV) {
|
for(auto const &i:NIV) {
|
||||||
SecurityObjects::NoteInfo ii{.created=(uint64_t)OpenWifi::Now(), .createdBy=UserInfo_.userinfo.email, .note=i.note};
|
SecurityObjects::NoteInfo ii{.created=(uint64_t)std::time(nullptr), .createdBy=UserInfo_.userinfo.email, .note=i.note};
|
||||||
F.notes.push_back(ii);
|
F.notes.push_back(ii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/firmware/{id}"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/firmware/{id}"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final;
|
void DoDelete() final;
|
||||||
void DoPost() final;
|
void DoPost() final;
|
||||||
|
|||||||
@@ -5,17 +5,18 @@
|
|||||||
#include "RESTAPI_firmwaresHandler.h"
|
#include "RESTAPI_firmwaresHandler.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "LatestFirmwareCache.h"
|
#include "LatestFirmwareCache.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void
|
void
|
||||||
RESTAPI_firmwaresHandler::DoGet() {
|
RESTAPI_firmwaresHandler::DoGet() {
|
||||||
std::string DeviceType = GetParameter(RESTAPI::Protocol::DEVICETYPE, "");
|
std::string DeviceType = GetParameter(RESTAPI::Protocol::DEVICETYPE, "");
|
||||||
bool IdOnly = GetBoolParameter(RESTAPI::Protocol::IDONLY);
|
bool IdOnly = GetBoolParameter(RESTAPI::Protocol::IDONLY, false);
|
||||||
bool LatestOnly = GetBoolParameter(RESTAPI::Protocol::LATESTONLY);
|
bool RevisionSet = GetBoolParameter(RESTAPI::Protocol::REVISIONSET, false);
|
||||||
bool rcOnly = GetBoolParameter("rcOnly");
|
bool LatestOnly = GetBoolParameter(RESTAPI::Protocol::LATESTONLY, false);
|
||||||
|
bool DeviceSet = GetBoolParameter(RESTAPI::Protocol::DEVICESET, false);
|
||||||
|
|
||||||
if(GetBoolParameter(RESTAPI::Protocol::DEVICESET)) {
|
if(DeviceSet) {
|
||||||
auto Revisions = LatestFirmwareCache()->GetDevices();
|
auto Revisions = LatestFirmwareCache()->GetDevices();
|
||||||
Poco::JSON::Array ObjectArray;
|
Poco::JSON::Array ObjectArray;
|
||||||
for (const auto &i:Revisions) {
|
for (const auto &i:Revisions) {
|
||||||
@@ -26,7 +27,7 @@ namespace OpenWifi {
|
|||||||
return ReturnObject(RetObj);
|
return ReturnObject(RetObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(GetBoolParameter(RESTAPI::Protocol::REVISIONSET)) {
|
if(RevisionSet) {
|
||||||
auto Revisions = LatestFirmwareCache()->GetRevisions();
|
auto Revisions = LatestFirmwareCache()->GetRevisions();
|
||||||
Poco::JSON::Array ObjectArray;
|
Poco::JSON::Array ObjectArray;
|
||||||
for (const auto &i:Revisions) {
|
for (const auto &i:Revisions) {
|
||||||
@@ -41,15 +42,9 @@ namespace OpenWifi {
|
|||||||
if(!DeviceType.empty()) {
|
if(!DeviceType.empty()) {
|
||||||
if(LatestOnly) {
|
if(LatestOnly) {
|
||||||
LatestFirmwareCacheEntry Entry;
|
LatestFirmwareCacheEntry Entry;
|
||||||
if(rcOnly) {
|
if(!LatestFirmwareCache()->FindLatestFirmware(DeviceType,Entry)) {
|
||||||
if (!LatestFirmwareCache()->FindLatestRCOnlyFirmware(DeviceType, Entry)) {
|
|
||||||
return NotFound();
|
return NotFound();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (!LatestFirmwareCache()->FindLatestFirmware(DeviceType, Entry)) {
|
|
||||||
return NotFound();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FMSObjects::Firmware F;
|
FMSObjects::Firmware F;
|
||||||
if(StorageService()->FirmwaresDB().GetFirmware(Entry.Id,F)) {
|
if(StorageService()->FirmwaresDB().GetFirmware(Entry.Id,F)) {
|
||||||
@@ -63,8 +58,6 @@ namespace OpenWifi {
|
|||||||
if (StorageService()->FirmwaresDB().GetFirmwares(QB_.Offset, QB_.Limit, DeviceType, List)) {
|
if (StorageService()->FirmwaresDB().GetFirmwares(QB_.Offset, QB_.Limit, DeviceType, List)) {
|
||||||
Poco::JSON::Array ObjectArray;
|
Poco::JSON::Array ObjectArray;
|
||||||
for (const auto &i:List) {
|
for (const auto &i:List) {
|
||||||
if(rcOnly && !LatestFirmwareCache::IsRC(i.revision))
|
|
||||||
continue;
|
|
||||||
if(IdOnly) {
|
if(IdOnly) {
|
||||||
ObjectArray.add(i.id);
|
ObjectArray.add(i.id);
|
||||||
} else {
|
} else {
|
||||||
@@ -87,8 +80,6 @@ namespace OpenWifi {
|
|||||||
Poco::JSON::Object Answer;
|
Poco::JSON::Object Answer;
|
||||||
if (StorageService()->FirmwaresDB().GetFirmwares(QB_.Offset, QB_.Limit, DeviceType, List)) {
|
if (StorageService()->FirmwaresDB().GetFirmwares(QB_.Offset, QB_.Limit, DeviceType, List)) {
|
||||||
for (const auto &i:List) {
|
for (const auto &i:List) {
|
||||||
if(rcOnly && !LatestFirmwareCache::IsRC(i.revision))
|
|
||||||
continue;
|
|
||||||
if(IdOnly) {
|
if(IdOnly) {
|
||||||
ObjectArray.add(i.id);
|
ObjectArray.add(i.id);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace OpenWifi {
|
|||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
|
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/firmwares"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/firmwares"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final {};
|
void DoDelete() final {};
|
||||||
void DoPost() final {};
|
void DoPost() final {};
|
||||||
|
|||||||
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
#include "RESTAPI_historyHandler.h"
|
#include "RESTAPI_historyHandler.h"
|
||||||
#include "StorageService.h"
|
#include "StorageService.h"
|
||||||
#include "framework/ow_constants.h"
|
#include "framework/RESTAPI_protocol.h"
|
||||||
|
#include "framework/RESTAPI_errors.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
void
|
void
|
||||||
@@ -15,26 +16,6 @@ namespace OpenWifi {
|
|||||||
return BadRequest(RESTAPI::Errors::MissingSerialNumber);
|
return BadRequest(RESTAPI::Errors::MissingSerialNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto unknownList = GetBoolParameter("unknownList");
|
|
||||||
if(SerialNumber=="000000000000" && unknownList) {
|
|
||||||
// so let's get all the devices, filter the latest record
|
|
||||||
FMSObjects::DeviceCurrentInfoList L;
|
|
||||||
StorageService()->HistoryDB().GetUnknownDeviceFirmwares(QB_.Offset,QB_.Limit,L.devices);
|
|
||||||
Poco::JSON::Object Answer;
|
|
||||||
L.to_json(Answer);
|
|
||||||
return ReturnObject(Answer);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto currentList = GetBoolParameter("currentList");
|
|
||||||
if(SerialNumber=="000000000000" && currentList) {
|
|
||||||
// so let's get all the devices, filter the latest record
|
|
||||||
FMSObjects::DeviceCurrentInfoList L;
|
|
||||||
StorageService()->HistoryDB().GetDeviceFirmwares(QB_.Offset,QB_.Limit,L.devices);
|
|
||||||
Poco::JSON::Object Answer;
|
|
||||||
L.to_json(Answer);
|
|
||||||
return ReturnObject(Answer);
|
|
||||||
}
|
|
||||||
|
|
||||||
FMSObjects::RevisionHistoryEntryVec H;
|
FMSObjects::RevisionHistoryEntryVec H;
|
||||||
if (StorageService()->HistoryDB().GetHistory(SerialNumber, QB_.Offset, QB_.Limit, H)) {
|
if (StorageService()->HistoryDB().GetHistory(SerialNumber, QB_.Offset, QB_.Limit, H)) {
|
||||||
Poco::JSON::Array A;
|
Poco::JSON::Array A;
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
// Created by stephane bourque on 2021-07-13.
|
// Created by stephane bourque on 2021-07-13.
|
||||||
//
|
//
|
||||||
|
|
||||||
#pragma once
|
#ifndef UCENTRALFMS_RESTAPI_HISTORYHANDLER_H
|
||||||
|
#define UCENTRALFMS_RESTAPI_HISTORYHANDLER_H
|
||||||
|
|
||||||
|
|
||||||
#include "framework/MicroService.h"
|
#include "framework/MicroService.h"
|
||||||
|
|
||||||
@@ -18,10 +20,13 @@ namespace OpenWifi {
|
|||||||
Server,
|
Server,
|
||||||
TransactionId,
|
TransactionId,
|
||||||
Internal) {}
|
Internal) {}
|
||||||
static auto PathName() { return std::list<std::string>{"/api/v1/revisionHistory/{serialNumber}"};}
|
static const std::list<const char *> PathName() { return std::list<const char *>{"/api/v1/revisionHistory/{serialNumber}"};}
|
||||||
void DoGet() final;
|
void DoGet() final;
|
||||||
void DoDelete() final;
|
void DoDelete() final;
|
||||||
void DoPost() final {};
|
void DoPost() final {};
|
||||||
void DoPut() final {};
|
void DoPut() final {};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //UCENTRALFMS_RESTAPI_HISTORYHANDLER_H
|
||||||
|
|||||||
@@ -1,624 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-01-10.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "RESTAPI_AnalyticsObjects.h"
|
|
||||||
#include "RESTAPI_ProvObjects.h"
|
|
||||||
#include "framework/MicroService.h"
|
|
||||||
|
|
||||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
|
||||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
|
||||||
|
|
||||||
namespace OpenWifi::AnalyticsObjects {
|
|
||||||
|
|
||||||
void Report::reset() {
|
|
||||||
}
|
|
||||||
|
|
||||||
void Report::to_json([[maybe_unused]] Poco::JSON::Object &Obj) const {
|
|
||||||
}
|
|
||||||
|
|
||||||
void VenueInfo::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,"retention",retention);
|
|
||||||
field_to_json(Obj,"interval",interval);
|
|
||||||
field_to_json(Obj,"monitorSubVenues",monitorSubVenues);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VenueInfo::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,"retention",retention);
|
|
||||||
field_from_json(Obj,"interval",interval);
|
|
||||||
field_from_json(Obj,"monitorSubVenues",monitorSubVenues);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void BoardInfo::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json(Obj,"venueList",venueList);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool BoardInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json(Obj,"venueList",venueList);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceInfo::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"boardId",boardId);
|
|
||||||
field_to_json(Obj,"type",type);
|
|
||||||
field_to_json(Obj,"serialNumber",serialNumber);
|
|
||||||
field_to_json(Obj,"deviceType",deviceType);
|
|
||||||
field_to_json(Obj,"lastContact",lastContact);
|
|
||||||
field_to_json(Obj,"lastPing",lastPing);
|
|
||||||
field_to_json(Obj,"lastState",lastState);
|
|
||||||
field_to_json(Obj,"lastFirmware",lastFirmware);
|
|
||||||
field_to_json(Obj,"lastFirmwareUpdate",lastFirmwareUpdate);
|
|
||||||
field_to_json(Obj,"lastConnection",lastConnection);
|
|
||||||
field_to_json(Obj,"lastDisconnection",lastDisconnection);
|
|
||||||
field_to_json(Obj,"pings",pings);
|
|
||||||
field_to_json(Obj,"states",states);
|
|
||||||
field_to_json(Obj,"connected",connected);
|
|
||||||
field_to_json(Obj,"connectionIp",connectionIp);
|
|
||||||
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,"health",health);
|
|
||||||
field_to_json(Obj,"lastHealth",lastHealth);
|
|
||||||
field_to_json(Obj,"locale",locale);
|
|
||||||
field_to_json(Obj,"uptime",uptime);
|
|
||||||
field_to_json(Obj,"memory",memory);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"boardId",boardId);
|
|
||||||
field_from_json(Obj,"type",type);
|
|
||||||
field_from_json(Obj,"serialNumber",serialNumber);
|
|
||||||
field_from_json(Obj,"deviceType",deviceType);
|
|
||||||
field_from_json(Obj,"lastContact",lastContact);
|
|
||||||
field_from_json(Obj,"lastPing",lastPing);
|
|
||||||
field_from_json(Obj,"lastState",lastState);
|
|
||||||
field_from_json(Obj,"lastFirmware",lastFirmware);
|
|
||||||
field_from_json(Obj,"lastFirmwareUpdate",lastFirmwareUpdate);
|
|
||||||
field_from_json(Obj,"lastConnection",lastConnection);
|
|
||||||
field_from_json(Obj,"lastDisconnection",lastDisconnection);
|
|
||||||
field_from_json(Obj,"pings",pings);
|
|
||||||
field_from_json(Obj,"states",states);
|
|
||||||
field_from_json(Obj,"connected",connected);
|
|
||||||
field_from_json(Obj,"connectionIp",connectionIp);
|
|
||||||
field_from_json(Obj,"associations_2g",associations_2g);
|
|
||||||
field_from_json(Obj,"associations_5g",associations_5g);
|
|
||||||
field_from_json(Obj,"associations_6g",associations_6g);
|
|
||||||
field_from_json(Obj,"health",health);
|
|
||||||
field_from_json(Obj,"lastHealth",lastHealth);
|
|
||||||
field_from_json(Obj,"locale",locale);
|
|
||||||
field_from_json(Obj,"uptime",uptime);
|
|
||||||
field_from_json(Obj,"memory",memory);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceInfoList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"devices",devices);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceInfoList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"devices",devices);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UE_rate::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"bitrate",bitrate);
|
|
||||||
field_to_json(Obj,"mcs",mcs);
|
|
||||||
field_to_json(Obj,"nss",nss);
|
|
||||||
field_to_json(Obj,"ht",ht);
|
|
||||||
field_to_json(Obj,"sgi",sgi);
|
|
||||||
field_to_json(Obj,"chwidth",chwidth);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UE_rate::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"bitrate",bitrate);
|
|
||||||
field_from_json(Obj,"mcs",mcs);
|
|
||||||
field_from_json(Obj,"nss",nss);
|
|
||||||
field_from_json(Obj,"ht",ht);
|
|
||||||
field_from_json(Obj,"sgi",sgi);
|
|
||||||
field_from_json(Obj,"chwidth",chwidth);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UETimePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"station",station);
|
|
||||||
field_to_json(Obj,"rssi",rssi);
|
|
||||||
field_to_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_to_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_to_json(Obj,"tx_duration",tx_duration);
|
|
||||||
field_to_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_to_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_to_json(Obj,"tx_retries",tx_retries);
|
|
||||||
field_to_json(Obj,"tx_failed",tx_failed);
|
|
||||||
field_to_json(Obj,"connected",connected);
|
|
||||||
field_to_json(Obj,"inactive",inactive);
|
|
||||||
field_to_json(Obj,"tx_rate",tx_rate);
|
|
||||||
field_to_json(Obj,"rx_rate",rx_rate);
|
|
||||||
// field_to_json(Obj, "tidstats", tidstats);
|
|
||||||
|
|
||||||
field_to_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_to_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_to_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_to_json(Obj,"tx_failed_pct",tx_failed_pct);
|
|
||||||
field_to_json(Obj,"tx_retries_pct",tx_retries_pct);
|
|
||||||
field_to_json(Obj,"tx_duration_pct",tx_duration_pct);
|
|
||||||
|
|
||||||
field_to_json(Obj,"tx_bytes_delta",tx_bytes_delta);
|
|
||||||
field_to_json(Obj,"rx_bytes_delta",rx_bytes_delta);
|
|
||||||
field_to_json(Obj,"tx_packets_delta",tx_packets_delta);
|
|
||||||
field_to_json(Obj,"rx_packets_delta",rx_packets_delta);
|
|
||||||
field_to_json(Obj,"tx_failed_delta",tx_failed_delta);
|
|
||||||
field_to_json(Obj,"tx_retries_delta",tx_retries_delta);
|
|
||||||
field_to_json(Obj,"tx_duration_delta",tx_duration_delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UETimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"station",station);
|
|
||||||
field_from_json(Obj,"rssi",rssi);
|
|
||||||
field_from_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_from_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_from_json(Obj,"tx_duration",tx_duration);
|
|
||||||
field_from_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_from_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_from_json(Obj,"tx_retries",tx_retries);
|
|
||||||
field_from_json(Obj,"tx_failed",tx_failed);
|
|
||||||
field_from_json(Obj,"connected",connected);
|
|
||||||
field_from_json(Obj,"inactive",inactive);
|
|
||||||
field_from_json(Obj,"tx_rate",tx_rate);
|
|
||||||
field_from_json(Obj,"rx_rate",rx_rate);
|
|
||||||
// field_from_json(Obj,"tidstats",tidstats);
|
|
||||||
field_from_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_from_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_from_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_from_json(Obj,"tx_failed_pct",tx_failed_pct);
|
|
||||||
field_from_json(Obj,"tx_retries_pct",tx_retries_pct);
|
|
||||||
field_from_json(Obj,"tx_duration_pct",tx_duration_pct);
|
|
||||||
field_from_json(Obj,"tx_bytes_delta",tx_bytes_delta);
|
|
||||||
field_from_json(Obj,"rx_bytes_delta",rx_bytes_delta);
|
|
||||||
field_from_json(Obj,"tx_packets_delta",tx_packets_delta);
|
|
||||||
field_from_json(Obj,"rx_packets_delta",rx_packets_delta);
|
|
||||||
field_from_json(Obj,"tx_failed_delta",tx_failed_delta);
|
|
||||||
field_from_json(Obj,"tx_retries_delta",tx_retries_delta);
|
|
||||||
field_from_json(Obj,"tx_duration_delta",tx_duration_delta);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void APTimePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"collisions",collisions);
|
|
||||||
field_to_json(Obj,"multicast",multicast);
|
|
||||||
field_to_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_to_json(Obj,"rx_dropped",rx_dropped);
|
|
||||||
field_to_json(Obj,"rx_errors",rx_errors);
|
|
||||||
field_to_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_to_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_to_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_to_json(Obj,"tx_dropped",tx_dropped);
|
|
||||||
field_to_json(Obj,"tx_errors",tx_errors);
|
|
||||||
field_to_json(Obj,"tx_packets",tx_packets);
|
|
||||||
|
|
||||||
field_to_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_dropped_pct",rx_dropped_pct);
|
|
||||||
field_to_json(Obj,"tx_dropped_pct",tx_dropped_pct);
|
|
||||||
field_to_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_to_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_to_json(Obj,"rx_errors_pct",rx_errors_pct);
|
|
||||||
field_to_json(Obj,"tx_errors_pct",tx_errors_pct);
|
|
||||||
|
|
||||||
field_to_json(Obj,"tx_bytes_delta",tx_bytes_delta);
|
|
||||||
field_to_json(Obj,"rx_bytes_delta",rx_bytes_delta);
|
|
||||||
field_to_json(Obj,"rx_dropped_delta",rx_dropped_delta);
|
|
||||||
field_to_json(Obj,"tx_dropped_delta",tx_dropped_delta);
|
|
||||||
field_to_json(Obj,"rx_packets_delta",rx_packets_delta);
|
|
||||||
field_to_json(Obj,"tx_packets_delta",tx_packets_delta);
|
|
||||||
field_to_json(Obj,"rx_errors_delta",rx_errors_delta);
|
|
||||||
field_to_json(Obj,"tx_errors_delta",tx_errors_delta);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool APTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"collisions",collisions);
|
|
||||||
field_from_json(Obj,"multicast",multicast);
|
|
||||||
field_from_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_from_json(Obj,"rx_dropped",rx_dropped);
|
|
||||||
field_from_json(Obj,"rx_errors",rx_errors);
|
|
||||||
field_from_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_from_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_from_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_from_json(Obj,"tx_dropped",tx_dropped);
|
|
||||||
field_from_json(Obj,"tx_errors",tx_errors);
|
|
||||||
field_from_json(Obj,"tx_packets",tx_packets);
|
|
||||||
|
|
||||||
field_from_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_dropped_pct",rx_dropped_pct);
|
|
||||||
field_from_json(Obj,"tx_dropped_pct",tx_dropped_pct);
|
|
||||||
field_from_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_from_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_from_json(Obj,"rx_errors_pct",rx_errors_pct);
|
|
||||||
field_from_json(Obj,"tx_errors_pct",tx_errors_pct);
|
|
||||||
|
|
||||||
field_from_json(Obj,"tx_bytes_delta",tx_bytes_delta);
|
|
||||||
field_from_json(Obj,"rx_bytes_delta",rx_bytes_delta);
|
|
||||||
field_from_json(Obj,"rx_dropped_delta",rx_dropped_delta);
|
|
||||||
field_from_json(Obj,"tx_dropped_delta",tx_dropped_delta);
|
|
||||||
field_from_json(Obj,"rx_packets_delta",rx_packets_delta);
|
|
||||||
field_from_json(Obj,"tx_packets_delta",tx_packets_delta);
|
|
||||||
field_from_json(Obj,"rx_errors_delta",rx_errors_delta);
|
|
||||||
field_from_json(Obj,"tx_errors_delta",tx_errors_delta);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void TIDstat_entry::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"rx_msdu",rx_msdu);
|
|
||||||
field_to_json(Obj,"tx_msdu",tx_msdu);
|
|
||||||
field_to_json(Obj,"tx_msdu_failed",tx_msdu_failed);
|
|
||||||
field_to_json(Obj,"tx_msdu_retries",tx_msdu_retries);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TIDstat_entry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"rx_msdu",rx_msdu);
|
|
||||||
field_from_json(Obj,"tx_msdu",tx_msdu);
|
|
||||||
field_from_json(Obj,"tx_msdu_failed",tx_msdu_failed);
|
|
||||||
field_from_json(Obj,"tx_msdu_retries",tx_msdu_retries);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RadioTimePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"band",band);
|
|
||||||
field_to_json(Obj,"channel_width",channel_width);
|
|
||||||
field_to_json(Obj,"active_ms",active_ms);
|
|
||||||
field_to_json(Obj,"busy_ms",busy_ms);
|
|
||||||
field_to_json(Obj,"receive_ms",receive_ms);
|
|
||||||
field_to_json(Obj,"transmit_ms",transmit_ms);
|
|
||||||
field_to_json(Obj,"tx_power",tx_power);
|
|
||||||
field_to_json(Obj,"channel",channel);
|
|
||||||
field_to_json(Obj,"temperature",temperature);
|
|
||||||
field_to_json(Obj,"noise",noise);
|
|
||||||
field_to_json(Obj,"active_pct",active_pct);
|
|
||||||
field_to_json(Obj,"busy_pct",busy_pct);
|
|
||||||
field_to_json(Obj,"receive_pct",receive_pct);
|
|
||||||
field_to_json(Obj,"transmit_pct",transmit_pct);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RadioTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"band",band);
|
|
||||||
field_from_json(Obj,"channel_width",channel_width);
|
|
||||||
field_from_json(Obj,"active_ms",active_ms);
|
|
||||||
field_from_json(Obj,"busy_ms",busy_ms);
|
|
||||||
field_from_json(Obj,"receive_ms",receive_ms);
|
|
||||||
field_from_json(Obj,"transmit_ms",transmit_ms);
|
|
||||||
field_from_json(Obj,"tx_power",tx_power);
|
|
||||||
field_from_json(Obj,"channel",channel);
|
|
||||||
field_from_json(Obj,"temperature",temperature);
|
|
||||||
field_from_json(Obj,"noise",noise);
|
|
||||||
field_from_json(Obj,"active_pct",active_pct);
|
|
||||||
field_from_json(Obj,"busy_pct",busy_pct);
|
|
||||||
field_from_json(Obj,"receive_pct",receive_pct);
|
|
||||||
field_from_json(Obj,"transmit_pct",transmit_pct);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AveragePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"min",min);
|
|
||||||
field_to_json(Obj,"max",max);
|
|
||||||
field_to_json(Obj,"avg",avg);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AveragePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"min",min);
|
|
||||||
field_from_json(Obj,"max",max);
|
|
||||||
field_from_json(Obj,"avg",avg);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SSIDTimePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"bssid",bssid);
|
|
||||||
field_to_json(Obj,"mode",mode);
|
|
||||||
field_to_json(Obj,"ssid",ssid);
|
|
||||||
field_to_json(Obj,"band",band);
|
|
||||||
field_to_json(Obj,"channel",channel);
|
|
||||||
field_to_json(Obj,"associations",associations);
|
|
||||||
field_to_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_to_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_to_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_to_json(Obj,"tx_failed_pct",tx_failed_pct);
|
|
||||||
field_to_json(Obj,"tx_retries_pct",tx_retries_pct);
|
|
||||||
field_to_json(Obj,"tx_duration_pct",tx_duration_pct);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SSIDTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"bssid",bssid);
|
|
||||||
field_from_json(Obj,"mode",mode);
|
|
||||||
field_from_json(Obj,"ssid",ssid);
|
|
||||||
field_from_json(Obj,"band",band);
|
|
||||||
field_from_json(Obj,"channel",channel);
|
|
||||||
field_from_json(Obj,"associations",associations);
|
|
||||||
field_from_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_from_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_from_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_from_json(Obj,"tx_failed_pct",tx_failed_pct);
|
|
||||||
field_from_json(Obj,"tx_retries_pct",tx_retries_pct);
|
|
||||||
field_from_json(Obj,"tx_duration_pct",tx_duration_pct);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceTimePoint::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"id",id);
|
|
||||||
field_to_json(Obj,"boardId",boardId);
|
|
||||||
field_to_json(Obj,"timestamp",timestamp);
|
|
||||||
field_to_json(Obj,"ap_data",ap_data);
|
|
||||||
field_to_json(Obj,"ssid_data",ssid_data);
|
|
||||||
field_to_json(Obj,"radio_data",radio_data);
|
|
||||||
field_to_json(Obj,"device_info",device_info);
|
|
||||||
field_to_json(Obj,"serialNumber",serialNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceTimePoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"id",id);
|
|
||||||
field_from_json(Obj,"boardId",boardId);
|
|
||||||
field_from_json(Obj,"timestamp",timestamp);
|
|
||||||
field_from_json(Obj,"ap_data",ap_data);
|
|
||||||
field_from_json(Obj,"ssid_data",ssid_data);
|
|
||||||
field_from_json(Obj,"radio_data",radio_data);
|
|
||||||
field_from_json(Obj,"device_info",device_info);
|
|
||||||
field_from_json(Obj,"serialNumber",serialNumber);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceTimePointAnalysis::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"noise",noise);
|
|
||||||
field_to_json(Obj,"temperature",temperature);
|
|
||||||
field_to_json(Obj,"active_pct",active_pct);
|
|
||||||
field_to_json(Obj,"busy_pct",busy_pct);
|
|
||||||
field_to_json(Obj,"receive_pct",receive_pct);
|
|
||||||
field_to_json(Obj,"transmit_pct",transmit_pct);
|
|
||||||
field_to_json(Obj,"tx_power",tx_power);
|
|
||||||
field_to_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_to_json(Obj,"rx_dropped_pct",rx_dropped_pct);
|
|
||||||
field_to_json(Obj,"tx_dropped_pct",tx_dropped_pct);
|
|
||||||
field_to_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_to_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_to_json(Obj,"rx_errors_pct",rx_errors_pct);
|
|
||||||
field_to_json(Obj,"tx_errors_pct",tx_errors_pct);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceTimePointAnalysis::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"noise",noise);
|
|
||||||
field_from_json(Obj,"temperature",temperature);
|
|
||||||
field_from_json(Obj,"active_pct",active_pct);
|
|
||||||
field_from_json(Obj,"busy_pct",busy_pct);
|
|
||||||
field_from_json(Obj,"receive_pct",receive_pct);
|
|
||||||
field_from_json(Obj,"transmit_pct",transmit_pct);
|
|
||||||
field_from_json(Obj,"tx_power",tx_power);
|
|
||||||
field_from_json(Obj,"tx_bytes_bw",tx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_bytes_bw",rx_bytes_bw);
|
|
||||||
field_from_json(Obj,"rx_dropped_pct",rx_dropped_pct);
|
|
||||||
field_from_json(Obj,"tx_dropped_pct",tx_dropped_pct);
|
|
||||||
field_from_json(Obj,"rx_packets_bw",rx_packets_bw);
|
|
||||||
field_from_json(Obj,"tx_packets_bw",tx_packets_bw);
|
|
||||||
field_from_json(Obj,"rx_errors_pct",rx_errors_pct);
|
|
||||||
field_from_json(Obj,"tx_errors_pct",tx_errors_pct);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceTimePointList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"points",points);
|
|
||||||
field_to_json(Obj,"stats",stats);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceTimePointList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"points",points);
|
|
||||||
field_from_json(Obj,"stats",stats);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceTimePointStats::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"firstPoint",firstPoint);
|
|
||||||
field_to_json(Obj,"lastPoint",lastPoint);
|
|
||||||
field_to_json(Obj,"count",count);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceTimePointStats::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"firstPoint",firstPoint);
|
|
||||||
field_from_json(Obj,"lastPoint",lastPoint);
|
|
||||||
field_from_json(Obj,"count",count);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WifiClientRate::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"bitrate",bitrate);
|
|
||||||
field_to_json(Obj,"chwidth",chwidth);
|
|
||||||
field_to_json(Obj,"mcs",mcs);
|
|
||||||
field_to_json(Obj,"nss",nss);
|
|
||||||
field_to_json(Obj,"vht",vht);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WifiClientRate::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"bitrate",bitrate);
|
|
||||||
field_from_json(Obj,"chwidth",chwidth);
|
|
||||||
field_from_json(Obj,"mcs",mcs);
|
|
||||||
field_from_json(Obj,"nss",nss);
|
|
||||||
field_from_json(Obj,"vht",vht);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WifiClientHistory::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"timestamp",timestamp);
|
|
||||||
field_to_json(Obj,"station_id",station_id);
|
|
||||||
field_to_json(Obj,"bssid",bssid);
|
|
||||||
field_to_json(Obj,"ssid",ssid);
|
|
||||||
field_to_json(Obj,"rssi",rssi);
|
|
||||||
field_to_json(Obj,"rx_bitrate",rx_bitrate);
|
|
||||||
field_to_json(Obj,"rx_chwidth",rx_chwidth);
|
|
||||||
field_to_json(Obj,"rx_mcs",rx_mcs);
|
|
||||||
field_to_json(Obj,"rx_nss",rx_nss);
|
|
||||||
field_to_json(Obj,"rx_vht",rx_vht);
|
|
||||||
field_to_json(Obj,"tx_bitrate",tx_bitrate);
|
|
||||||
field_to_json(Obj,"tx_chwidth",tx_chwidth);
|
|
||||||
field_to_json(Obj,"tx_mcs",tx_mcs);
|
|
||||||
field_to_json(Obj,"tx_nss",tx_nss);
|
|
||||||
field_to_json(Obj,"tx_vht",tx_vht);
|
|
||||||
field_to_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_to_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_to_json(Obj,"rx_duration",rx_duration);
|
|
||||||
field_to_json(Obj,"tx_duration",tx_duration);
|
|
||||||
field_to_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_to_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_to_json(Obj,"ipv4",ipv4);
|
|
||||||
field_to_json(Obj,"ipv6",ipv6);
|
|
||||||
field_to_json(Obj,"channel_width",channel_width);
|
|
||||||
field_to_json(Obj,"noise",noise);
|
|
||||||
field_to_json(Obj,"tx_power",tx_power);
|
|
||||||
field_to_json(Obj,"channel",channel);
|
|
||||||
field_to_json(Obj,"active_ms",active_ms);
|
|
||||||
field_to_json(Obj,"busy_ms",busy_ms);
|
|
||||||
field_to_json(Obj,"receive_ms",receive_ms);
|
|
||||||
field_to_json(Obj,"mode",mode);
|
|
||||||
field_to_json(Obj,"ack_signal",ack_signal);
|
|
||||||
field_to_json(Obj,"ack_signal_avg",ack_signal_avg);
|
|
||||||
field_to_json(Obj,"connected",connected);
|
|
||||||
field_to_json(Obj,"inactive",inactive);
|
|
||||||
field_to_json(Obj,"tx_retries",tx_retries);
|
|
||||||
field_to_json(Obj,"venue_id",venue_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WifiClientHistory::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"timestamp",timestamp);
|
|
||||||
field_from_json(Obj,"station_id",station_id);
|
|
||||||
field_from_json(Obj,"bssid",bssid);
|
|
||||||
field_from_json(Obj,"ssid",ssid);
|
|
||||||
field_from_json(Obj,"rssi",rssi);
|
|
||||||
field_from_json(Obj,"rx_bitrate",rx_bitrate);
|
|
||||||
field_from_json(Obj,"rx_chwidth",rx_chwidth);
|
|
||||||
field_from_json(Obj,"rx_mcs",rx_mcs);
|
|
||||||
field_from_json(Obj,"rx_nss",rx_nss);
|
|
||||||
field_from_json(Obj,"rx_vht",rx_vht);
|
|
||||||
field_from_json(Obj,"tx_bitrate",tx_bitrate);
|
|
||||||
field_from_json(Obj,"tx_chwidth",tx_chwidth);
|
|
||||||
field_from_json(Obj,"tx_mcs",tx_mcs);
|
|
||||||
field_from_json(Obj,"tx_nss",tx_nss);
|
|
||||||
field_from_json(Obj,"tx_vht",tx_vht);
|
|
||||||
field_from_json(Obj,"rx_bytes",rx_bytes);
|
|
||||||
field_from_json(Obj,"tx_bytes",tx_bytes);
|
|
||||||
field_from_json(Obj,"rx_duration",rx_duration);
|
|
||||||
field_from_json(Obj,"tx_duration",tx_duration);
|
|
||||||
field_from_json(Obj,"rx_packets",rx_packets);
|
|
||||||
field_from_json(Obj,"tx_packets",tx_packets);
|
|
||||||
field_from_json(Obj,"ipv4",ipv4);
|
|
||||||
field_from_json(Obj,"ipv6",ipv6);
|
|
||||||
field_from_json(Obj,"channel_width",channel_width);
|
|
||||||
field_from_json(Obj,"noise",noise);
|
|
||||||
field_from_json(Obj,"tx_power",tx_power);
|
|
||||||
field_from_json(Obj,"channel",channel);
|
|
||||||
field_from_json(Obj,"active_ms",active_ms);
|
|
||||||
field_from_json(Obj,"busy_ms",busy_ms);
|
|
||||||
field_from_json(Obj,"receive_ms",receive_ms);
|
|
||||||
field_from_json(Obj,"mode",mode);
|
|
||||||
field_from_json(Obj,"ack_signal",ack_signal);
|
|
||||||
field_from_json(Obj,"ack_signal_avg",ack_signal_avg);
|
|
||||||
field_from_json(Obj,"connected",connected);
|
|
||||||
field_from_json(Obj,"inactive",inactive);
|
|
||||||
field_from_json(Obj,"tx_retries",tx_retries);
|
|
||||||
field_from_json(Obj,"venue_id",venue_id);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,422 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-01-10.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "RESTAPI_ProvObjects.h"
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
|
||||||
|
|
||||||
namespace AnalyticsObjects {
|
|
||||||
|
|
||||||
struct Report {
|
|
||||||
uint64_t snapShot = 0;
|
|
||||||
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct VenueInfo {
|
|
||||||
OpenWifi::Types::UUID_t id;
|
|
||||||
std::string name;
|
|
||||||
std::string description;
|
|
||||||
uint64_t retention = 0;
|
|
||||||
uint64_t interval = 0;
|
|
||||||
bool monitorSubVenues = false;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BoardInfo {
|
|
||||||
ProvObjects::ObjectInfo info;
|
|
||||||
std::vector<VenueInfo> venueList;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
|
|
||||||
inline bool operator<(const BoardInfo &bb) const {
|
|
||||||
return info.id < bb.info.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator==(const BoardInfo &bb) const {
|
|
||||||
return info.id == bb.info.id;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceInfo {
|
|
||||||
std::string boardId;
|
|
||||||
std::string type;
|
|
||||||
std::string serialNumber;
|
|
||||||
std::string deviceType;
|
|
||||||
uint64_t lastContact = 0 ;
|
|
||||||
uint64_t lastPing = 0;
|
|
||||||
uint64_t lastState = 0;
|
|
||||||
std::string lastFirmware;
|
|
||||||
uint64_t lastFirmwareUpdate = 0;
|
|
||||||
uint64_t lastConnection = 0;
|
|
||||||
uint64_t lastDisconnection = 0;
|
|
||||||
uint64_t pings = 0;
|
|
||||||
uint64_t states = 0;
|
|
||||||
bool connected = false;
|
|
||||||
std::string connectionIp;
|
|
||||||
uint64_t associations_2g = 0;
|
|
||||||
uint64_t associations_5g = 0;
|
|
||||||
uint64_t associations_6g = 0;
|
|
||||||
uint64_t health = 0;
|
|
||||||
uint64_t lastHealth = 0;
|
|
||||||
std::string locale;
|
|
||||||
uint64_t uptime = 0;
|
|
||||||
double memory = 0.0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceInfoList {
|
|
||||||
std::vector<DeviceInfo> devices;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
enum wifi_band {
|
|
||||||
band_2g = 0, band_5g = 1, band_6g = 2
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TIDstat_entry {
|
|
||||||
uint64_t rx_msdu = 0,
|
|
||||||
tx_msdu = 0,
|
|
||||||
tx_msdu_failed = 0,
|
|
||||||
tx_msdu_retries = 0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct UE_rate {
|
|
||||||
uint64_t bitrate=0;
|
|
||||||
uint64_t mcs=0;
|
|
||||||
uint64_t nss=0;
|
|
||||||
bool ht=false;
|
|
||||||
bool sgi=false;
|
|
||||||
uint64_t chwidth=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AveragePoint {
|
|
||||||
double min = 0.0,
|
|
||||||
max = 0.0,
|
|
||||||
avg = 0.0;
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct UETimePoint {
|
|
||||||
std::string station;
|
|
||||||
int64_t rssi = 0;
|
|
||||||
uint64_t tx_bytes = 0,
|
|
||||||
rx_bytes = 0,
|
|
||||||
tx_duration = 0,
|
|
||||||
rx_packets = 0,
|
|
||||||
tx_packets = 0,
|
|
||||||
tx_retries = 0,
|
|
||||||
tx_failed = 0,
|
|
||||||
connected = 0,
|
|
||||||
inactive = 0;
|
|
||||||
|
|
||||||
double tx_bytes_bw = 0.0 ,
|
|
||||||
rx_bytes_bw = 0.0 ,
|
|
||||||
tx_packets_bw = 0.0 ,
|
|
||||||
rx_packets_bw = 0.0 ,
|
|
||||||
tx_failed_pct = 0.0 ,
|
|
||||||
tx_retries_pct = 0.0 ,
|
|
||||||
tx_duration_pct = 0.0;
|
|
||||||
|
|
||||||
uint64_t tx_bytes_delta = 0,
|
|
||||||
rx_bytes_delta = 0,
|
|
||||||
tx_duration_delta = 0,
|
|
||||||
rx_packets_delta = 0,
|
|
||||||
tx_packets_delta = 0,
|
|
||||||
tx_retries_delta = 0,
|
|
||||||
tx_failed_delta = 0;
|
|
||||||
|
|
||||||
UE_rate tx_rate,
|
|
||||||
rx_rate;
|
|
||||||
std::vector<TIDstat_entry> tidstats;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
enum SSID_MODES {
|
|
||||||
unknown = 0,
|
|
||||||
ap,
|
|
||||||
mesh,
|
|
||||||
sta,
|
|
||||||
wds_ap,
|
|
||||||
wds_sta,
|
|
||||||
wds_repeater
|
|
||||||
};
|
|
||||||
|
|
||||||
inline SSID_MODES SSID_Mode(const std::string &m) {
|
|
||||||
if (m == "ap")
|
|
||||||
return ap;
|
|
||||||
if (m == "sta")
|
|
||||||
return sta;
|
|
||||||
if (m == "mesh")
|
|
||||||
return mesh;
|
|
||||||
if (m == "wds-ap")
|
|
||||||
return wds_ap;
|
|
||||||
if (m == "wds-sta")
|
|
||||||
return wds_sta;
|
|
||||||
if (m == "wds-repeater")
|
|
||||||
return wds_repeater;
|
|
||||||
return unknown;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct SSIDTimePoint {
|
|
||||||
std::string bssid,
|
|
||||||
mode,
|
|
||||||
ssid;
|
|
||||||
uint64_t band=0,
|
|
||||||
channel=0;
|
|
||||||
std::vector<UETimePoint> associations;
|
|
||||||
|
|
||||||
AveragePoint tx_bytes_bw,
|
|
||||||
rx_bytes_bw,
|
|
||||||
tx_packets_bw,
|
|
||||||
rx_packets_bw,
|
|
||||||
tx_failed_pct,
|
|
||||||
tx_retries_pct,
|
|
||||||
tx_duration_pct;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct APTimePoint {
|
|
||||||
uint64_t collisions = 0,
|
|
||||||
multicast = 0,
|
|
||||||
rx_bytes = 0,
|
|
||||||
rx_dropped = 0,
|
|
||||||
rx_errors = 0,
|
|
||||||
rx_packets = 0,
|
|
||||||
tx_bytes = 0,
|
|
||||||
tx_dropped = 0,
|
|
||||||
tx_errors = 0,
|
|
||||||
tx_packets = 0;
|
|
||||||
|
|
||||||
double tx_bytes_bw = 0.0 ,
|
|
||||||
rx_bytes_bw = 0.0 ,
|
|
||||||
rx_dropped_pct = 0.0,
|
|
||||||
tx_dropped_pct = 0.0,
|
|
||||||
rx_packets_bw = 0.0,
|
|
||||||
tx_packets_bw = 0.0,
|
|
||||||
rx_errors_pct = 0.0 ,
|
|
||||||
tx_errors_pct = 0.0;
|
|
||||||
|
|
||||||
uint64_t tx_bytes_delta = 0,
|
|
||||||
rx_bytes_delta = 0 ,
|
|
||||||
rx_dropped_delta = 0,
|
|
||||||
tx_dropped_delta = 0,
|
|
||||||
rx_packets_delta = 0,
|
|
||||||
tx_packets_delta = 0,
|
|
||||||
rx_errors_delta = 0,
|
|
||||||
tx_errors_delta = 0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadioTimePoint {
|
|
||||||
uint64_t band = 0,
|
|
||||||
channel_width = 0;
|
|
||||||
uint64_t active_ms = 0,
|
|
||||||
busy_ms = 0,
|
|
||||||
receive_ms = 0,
|
|
||||||
transmit_ms = 0,
|
|
||||||
tx_power = 0,
|
|
||||||
channel = 0;
|
|
||||||
int64_t temperature = 0,
|
|
||||||
noise = 0;
|
|
||||||
|
|
||||||
double active_pct = 0.0 ,
|
|
||||||
busy_pct = 0.0,
|
|
||||||
receive_pct = 0.0,
|
|
||||||
transmit_pct = 0.0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct DeviceTimePoint {
|
|
||||||
std::string id;
|
|
||||||
std::string boardId;
|
|
||||||
uint64_t timestamp = 0;
|
|
||||||
APTimePoint ap_data;
|
|
||||||
std::vector<SSIDTimePoint> ssid_data;
|
|
||||||
std::vector<RadioTimePoint> radio_data;
|
|
||||||
AnalyticsObjects::DeviceInfo device_info;
|
|
||||||
std::string serialNumber;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
|
|
||||||
inline bool operator<(const DeviceTimePoint &rhs) const {
|
|
||||||
if(timestamp < rhs.timestamp)
|
|
||||||
return true;
|
|
||||||
if(timestamp > rhs.timestamp)
|
|
||||||
return false;
|
|
||||||
if(device_info.serialNumber < rhs.device_info.serialNumber)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator==(const DeviceTimePoint &rhs) const {
|
|
||||||
return timestamp==rhs.timestamp && device_info.serialNumber==rhs.device_info.serialNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator>(const DeviceTimePoint &rhs) const {
|
|
||||||
if(timestamp > rhs.timestamp)
|
|
||||||
return true;
|
|
||||||
if(timestamp < rhs.timestamp)
|
|
||||||
return false;
|
|
||||||
if(device_info.serialNumber > rhs.device_info.serialNumber)
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceTimePointAnalysis {
|
|
||||||
uint64_t timestamp;
|
|
||||||
|
|
||||||
AveragePoint noise;
|
|
||||||
AveragePoint temperature;
|
|
||||||
AveragePoint active_pct;
|
|
||||||
AveragePoint busy_pct;
|
|
||||||
AveragePoint receive_pct;
|
|
||||||
AveragePoint transmit_pct;
|
|
||||||
AveragePoint tx_power;
|
|
||||||
|
|
||||||
AveragePoint tx_bytes_bw;
|
|
||||||
AveragePoint rx_bytes_bw;
|
|
||||||
AveragePoint rx_dropped_pct;
|
|
||||||
AveragePoint tx_dropped_pct;
|
|
||||||
AveragePoint rx_packets_bw;
|
|
||||||
AveragePoint tx_packets_bw;
|
|
||||||
AveragePoint rx_errors_pct;
|
|
||||||
AveragePoint tx_errors_pct;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceTimePointList {
|
|
||||||
std::vector<DeviceTimePoint> points;
|
|
||||||
std::vector<DeviceTimePointAnalysis> stats;
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BandwidthAnalysisEntry {
|
|
||||||
uint64_t timestamp = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct BandwidthAnalysis {
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AverageValueSigned {
|
|
||||||
int64_t peak=0, avg=0, low=0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct AverageValueUnsigned {
|
|
||||||
uint64_t peak=0, avg=0, low=0;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadioAnalysis {
|
|
||||||
uint64_t timestamp=0;
|
|
||||||
AverageValueSigned noise, temperature;
|
|
||||||
AverageValueUnsigned active_ms,
|
|
||||||
busy_ms,
|
|
||||||
transmit_ms,
|
|
||||||
receive_ms;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceTimePointStats {
|
|
||||||
uint64_t firstPoint=0;
|
|
||||||
uint64_t lastPoint=0;
|
|
||||||
uint64_t count=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct WifiClientRate {
|
|
||||||
uint32_t bitrate=0;
|
|
||||||
uint32_t chwidth=0;
|
|
||||||
uint16_t mcs=0;
|
|
||||||
uint16_t nss=0;
|
|
||||||
bool vht=false;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct WifiClientHistory {
|
|
||||||
uint64_t timestamp=OpenWifi::Now();
|
|
||||||
std::string station_id;
|
|
||||||
std::string bssid;
|
|
||||||
std::string ssid;
|
|
||||||
int64_t rssi=0;
|
|
||||||
uint32_t rx_bitrate=0;
|
|
||||||
uint32_t rx_chwidth=0;
|
|
||||||
uint16_t rx_mcs=0;
|
|
||||||
uint16_t rx_nss=0;
|
|
||||||
bool rx_vht=false;
|
|
||||||
uint32_t tx_bitrate=0;
|
|
||||||
uint32_t tx_chwidth=0;
|
|
||||||
uint16_t tx_mcs=0;
|
|
||||||
uint16_t tx_nss=0;
|
|
||||||
bool tx_vht=false;
|
|
||||||
uint64_t rx_bytes=0;
|
|
||||||
uint64_t tx_bytes=0;
|
|
||||||
uint64_t rx_duration=0;
|
|
||||||
uint64_t tx_duration=0;
|
|
||||||
uint64_t rx_packets=0;
|
|
||||||
uint64_t tx_packets=0;
|
|
||||||
std::string ipv4;
|
|
||||||
std::string ipv6;
|
|
||||||
uint64_t channel_width=0;
|
|
||||||
int64_t noise=0;
|
|
||||||
uint64_t tx_power=0;
|
|
||||||
uint64_t channel=0;
|
|
||||||
uint64_t active_ms=0;
|
|
||||||
uint64_t busy_ms=0;
|
|
||||||
uint64_t receive_ms=0;
|
|
||||||
std::string mode;
|
|
||||||
int64_t ack_signal=0;
|
|
||||||
int64_t ack_signal_avg=0;
|
|
||||||
uint64_t connected=0;
|
|
||||||
uint64_t inactive=0;
|
|
||||||
uint64_t tx_retries=0;
|
|
||||||
std::string venue_id;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -3,12 +3,12 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "RESTAPI_CertObjects.h"
|
#include "RESTAPI_CertObjects.h"
|
||||||
#include "framework/MicroService.h"
|
|
||||||
|
|
||||||
using OpenWifi::RESTAPI_utils::field_to_json;
|
using OpenWifi::RESTAPI_utils::field_to_json;
|
||||||
using OpenWifi::RESTAPI_utils::field_from_json;
|
using OpenWifi::RESTAPI_utils::field_from_json;
|
||||||
|
|
||||||
namespace OpenWifi::CertObjects {
|
namespace OpenWifi {
|
||||||
|
namespace CertObjects {
|
||||||
void CertificateEntry::to_json(Poco::JSON::Object &Obj) const {
|
void CertificateEntry::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj,"id", id);
|
field_to_json(Obj,"id", id);
|
||||||
field_to_json(Obj,"entity", entity);
|
field_to_json(Obj,"entity", entity);
|
||||||
@@ -29,7 +29,6 @@ namespace OpenWifi::CertObjects {
|
|||||||
field_to_json(Obj,"modified", modified);
|
field_to_json(Obj,"modified", modified);
|
||||||
field_to_json(Obj,"revoked", revoked);
|
field_to_json(Obj,"revoked", revoked);
|
||||||
field_to_json(Obj,"revokeCount", revokeCount);
|
field_to_json(Obj,"revokeCount", revokeCount);
|
||||||
field_to_json(Obj,"synched", synched);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CertificateEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool CertificateEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -53,7 +52,6 @@ namespace OpenWifi::CertObjects {
|
|||||||
field_from_json(Obj,"modified", modified);
|
field_from_json(Obj,"modified", modified);
|
||||||
field_from_json(Obj,"revoked", revoked);
|
field_from_json(Obj,"revoked", revoked);
|
||||||
field_from_json(Obj,"revokeCount", revokeCount);
|
field_from_json(Obj,"revokeCount", revokeCount);
|
||||||
field_from_json(Obj,"synched", synched);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
@@ -176,33 +174,5 @@ namespace OpenWifi::CertObjects {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DashBoardYearlyStats::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "year", year);
|
|
||||||
field_to_json(Obj, "activeCerts", activeCerts);
|
|
||||||
field_to_json(Obj, "revokedCerts", revokedCerts);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Dashboard::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"snapshot", snapshot);
|
|
||||||
field_to_json(Obj,"numberOfIssuedCerts", numberOfIssuedCerts);
|
|
||||||
field_to_json(Obj,"numberOfRevokedCerts", numberOfRevokedCerts);
|
|
||||||
field_to_json(Obj,"activeCertsPerOrganization", activeCertsPerOrganization);
|
|
||||||
field_to_json(Obj,"revokedCertsPerOrganization", revokedCertsPerOrganization);
|
|
||||||
field_to_json(Obj,"numberOfRedirectors", numberOfRedirectors);
|
|
||||||
field_to_json(Obj,"deviceTypes", deviceTypes);
|
|
||||||
field_to_json(Obj,"monthlyNumberOfCerts", monthlyNumberOfCerts);
|
|
||||||
field_to_json(Obj,"monthlyNumberOfCertsPerOrgPerYear", monthlyNumberOfCertsPerOrgPerYear);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Dashboard::reset() {
|
|
||||||
snapshot=0;
|
|
||||||
numberOfRevokedCerts = numberOfIssuedCerts = 0;
|
|
||||||
activeCertsPerOrganization.clear();
|
|
||||||
revokedCertsPerOrganization.clear();
|
|
||||||
numberOfRedirectors.clear();
|
|
||||||
deviceTypes.clear();
|
|
||||||
monthlyNumberOfCerts.clear();
|
|
||||||
monthlyNumberOfCertsPerOrgPerYear.clear();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "framework/MicroService.h"
|
||||||
#include "framework/OpenWifiTypes.h"
|
#include "framework/OpenWifiTypes.h"
|
||||||
#include "RESTObjects/RESTAPI_SecurityObjects.h"
|
#include "RESTObjects/RESTAPI_SecurityObjects.h"
|
||||||
|
|
||||||
namespace OpenWifi::CertObjects {
|
namespace OpenWifi {
|
||||||
|
|
||||||
|
namespace CertObjects {
|
||||||
|
|
||||||
struct CertificateEntry {
|
struct CertificateEntry {
|
||||||
OpenWifi::Types::UUID_t id;
|
OpenWifi::Types::UUID_t id;
|
||||||
@@ -30,7 +33,6 @@ namespace OpenWifi::CertObjects {
|
|||||||
uint64_t modified = 0;
|
uint64_t modified = 0;
|
||||||
uint64_t revoked = 0;
|
uint64_t revoked = 0;
|
||||||
uint64_t revokeCount = 0;
|
uint64_t revokeCount = 0;
|
||||||
uint64_t synched = 0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -95,28 +97,5 @@ namespace OpenWifi::CertObjects {
|
|||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
}
|
||||||
struct DashBoardYearlyStats {
|
|
||||||
uint64_t year=0;
|
|
||||||
OpenWifi::Types::Counted3DMapSII activeCerts;
|
|
||||||
OpenWifi::Types::Counted3DMapSII revokedCerts;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Dashboard {
|
|
||||||
uint64_t snapshot=0;
|
|
||||||
uint64_t numberOfIssuedCerts=0;
|
|
||||||
uint64_t numberOfRevokedCerts=0;
|
|
||||||
OpenWifi::Types::CountedMap activeCertsPerOrganization;
|
|
||||||
OpenWifi::Types::CountedMap revokedCertsPerOrganization;
|
|
||||||
OpenWifi::Types::CountedMap numberOfRedirectors;
|
|
||||||
OpenWifi::Types::CountedMap deviceTypes;
|
|
||||||
OpenWifi::Types::CountedMap monthlyNumberOfCerts;
|
|
||||||
std::vector<DashBoardYearlyStats> monthlyNumberOfCertsPerOrgPerYear;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
void reset();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -233,10 +233,10 @@ namespace OpenWifi::FMSObjects {
|
|||||||
UnknownFirmwares_.clear();
|
UnknownFirmwares_.clear();
|
||||||
totalSecondsOld_.clear();
|
totalSecondsOld_.clear();
|
||||||
numberOfDevices = 0 ;
|
numberOfDevices = 0 ;
|
||||||
snapshot = OpenWifi::Now();
|
snapshot = std::time(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeviceReport::from_json([[maybe_unused]] const Poco::JSON::Object::Ptr &Obj) {
|
bool DeviceReport::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@@ -245,65 +245,4 @@ namespace OpenWifi::FMSObjects {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeviceInformation::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "serialNumber",serialNumber);
|
|
||||||
field_to_json(Obj, "history", history);
|
|
||||||
field_to_json(Obj, "currentFirmware", currentFirmware);
|
|
||||||
field_to_json(Obj, "currentFirmwareDate", currentFirmwareDate);
|
|
||||||
field_to_json(Obj, "latestFirmware", latestFirmware);
|
|
||||||
field_to_json(Obj, "latestFirmwareDate", latestFirmwareDate);
|
|
||||||
field_to_json(Obj, "latestFirmwareAvailable",latestFirmwareAvailable);
|
|
||||||
field_to_json(Obj, "latestFirmwareURI",latestFirmwareURI);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceInformation::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj, "serialNumber",serialNumber);
|
|
||||||
field_from_json(Obj, "history", history);
|
|
||||||
field_from_json(Obj, "currentFirmware", currentFirmware);
|
|
||||||
field_from_json(Obj, "currentFirmwareDate", currentFirmwareDate);
|
|
||||||
field_from_json(Obj, "latestFirmware", latestFirmware);
|
|
||||||
field_from_json(Obj, "latestFirmwareDate", latestFirmwareDate);
|
|
||||||
field_from_json(Obj, "latestFirmwareAvailable",latestFirmwareAvailable);
|
|
||||||
field_from_json(Obj, "latestFirmwareURI",latestFirmwareURI);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceCurrentInfo::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "serialNumber",serialNumber);
|
|
||||||
field_to_json(Obj, "revision", revision);
|
|
||||||
field_to_json(Obj, "upgraded", upgraded);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceCurrentInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj, "serialNumber",serialNumber);
|
|
||||||
field_from_json(Obj, "revision", revision);
|
|
||||||
field_from_json(Obj, "upgraded", upgraded);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceCurrentInfoList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "devices",devices);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceCurrentInfoList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj, "devices",devices);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,9 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#pragma once
|
#ifndef UCENTRALFMS_RESTAPI_FMSOBJECTS_H
|
||||||
|
#define UCENTRALFMS_RESTAPI_FMSOBJECTS_H
|
||||||
|
|
||||||
|
|
||||||
#include "RESTAPI_SecurityObjects.h"
|
#include "RESTAPI_SecurityObjects.h"
|
||||||
#include "framework/OpenWifiTypes.h"
|
#include "framework/OpenWifiTypes.h"
|
||||||
@@ -27,7 +29,7 @@ namespace OpenWifi::FMSObjects {
|
|||||||
std::string location;
|
std::string location;
|
||||||
std::string uploader;
|
std::string uploader;
|
||||||
std::string digest;
|
std::string digest;
|
||||||
bool latest=false;
|
bool latest=0;
|
||||||
SecurityObjects::NoteInfoVec notes;
|
SecurityObjects::NoteInfoVec notes;
|
||||||
uint64_t created=0;
|
uint64_t created=0;
|
||||||
|
|
||||||
@@ -125,35 +127,7 @@ namespace OpenWifi::FMSObjects {
|
|||||||
void reset();
|
void reset();
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DeviceInformation {
|
|
||||||
std::string serialNumber;
|
|
||||||
RevisionHistoryEntryList history;
|
|
||||||
std::string currentFirmware;
|
|
||||||
uint64_t currentFirmwareDate=0;
|
|
||||||
std::string latestFirmware;
|
|
||||||
uint64_t latestFirmwareDate=0;
|
|
||||||
bool latestFirmwareAvailable;
|
|
||||||
std::string latestFirmwareURI;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceCurrentInfo {
|
|
||||||
std::string serialNumber;
|
|
||||||
std::string revision;
|
|
||||||
uint64_t upgraded=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct DeviceCurrentInfoList {
|
|
||||||
std::vector<DeviceCurrentInfo> devices;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif //UCENTRALFMS_RESTAPI_FMSOBJECTS_H
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
void Device::to_json(Poco::JSON::Object &Obj) const {
|
void Device::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj,"serialNumber", SerialNumber);
|
field_to_json(Obj,"serialNumber", SerialNumber);
|
||||||
#ifdef TIP_GATEWAY_SERVICE
|
#ifdef TIP_GATEWAY_SERVICE
|
||||||
field_to_json(Obj,"deviceType", CapabilitiesCache::instance()->GetPlatform(Compatible));
|
field_to_json(Obj,"deviceType", CapabilitiesCache::instance()->Get(Compatible));
|
||||||
#endif
|
#endif
|
||||||
field_to_json(Obj,"macAddress", MACAddress);
|
field_to_json(Obj,"macAddress", MACAddress);
|
||||||
field_to_json(Obj,"manufacturer", Manufacturer);
|
field_to_json(Obj,"manufacturer", Manufacturer);
|
||||||
@@ -45,10 +45,6 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_to_json(Obj,"compatible", Compatible);
|
field_to_json(Obj,"compatible", Compatible);
|
||||||
field_to_json(Obj,"fwUpdatePolicy", FWUpdatePolicy);
|
field_to_json(Obj,"fwUpdatePolicy", FWUpdatePolicy);
|
||||||
field_to_json(Obj,"devicePassword", DevicePassword);
|
field_to_json(Obj,"devicePassword", DevicePassword);
|
||||||
field_to_json(Obj,"subscriber", subscriber);
|
|
||||||
field_to_json(Obj,"entity", entity);
|
|
||||||
field_to_json(Obj,"modified", modified);
|
|
||||||
field_to_json(Obj,"locale", locale);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Device::to_json_with_status(Poco::JSON::Object &Obj) const {
|
void Device::to_json_with_status(Poco::JSON::Object &Obj) const {
|
||||||
@@ -73,7 +69,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Device::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Device::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"serialNumber",SerialNumber);
|
field_from_json(Obj,"serialNumber",SerialNumber);
|
||||||
field_from_json(Obj,"deviceType",DeviceType);
|
field_from_json(Obj,"deviceType",DeviceType);
|
||||||
@@ -85,9 +81,6 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_from_json(Obj,"location",Location);
|
field_from_json(Obj,"location",Location);
|
||||||
field_from_json(Obj,"venue",Venue);
|
field_from_json(Obj,"venue",Venue);
|
||||||
field_from_json(Obj,"compatible",Compatible);
|
field_from_json(Obj,"compatible",Compatible);
|
||||||
field_from_json(Obj,"subscriber", subscriber);
|
|
||||||
field_from_json(Obj,"entity", entity);
|
|
||||||
field_from_json(Obj,"locale", locale);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (const Poco::Exception &E) {
|
} catch (const Poco::Exception &E) {
|
||||||
}
|
}
|
||||||
@@ -156,7 +149,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_to_json(Obj,"executionTime", executionTime);
|
field_to_json(Obj,"executionTime", executionTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DefaultConfiguration::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool DefaultConfiguration::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"name",Name);
|
field_from_json(Obj,"name",Name);
|
||||||
field_from_json(Obj,"configuration",Configuration);
|
field_from_json(Obj,"configuration",Configuration);
|
||||||
@@ -175,7 +168,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_to_json(Obj,"created", created);
|
field_to_json(Obj,"created", created);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BlackListedDevice::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool BlackListedDevice::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"serialNumber",serialNumber);
|
field_from_json(Obj,"serialNumber",serialNumber);
|
||||||
field_from_json(Obj,"author",author);
|
field_from_json(Obj,"author",author);
|
||||||
@@ -202,7 +195,6 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_to_json(Obj,"websocketPackets", websocketPackets);
|
field_to_json(Obj,"websocketPackets", websocketPackets);
|
||||||
field_to_json(Obj,"kafkaClients", kafkaClients);
|
field_to_json(Obj,"kafkaClients", kafkaClients);
|
||||||
field_to_json(Obj,"kafkaPackets", kafkaPackets);
|
field_to_json(Obj,"kafkaPackets", kafkaPackets);
|
||||||
field_to_json(Obj,"locale", locale);
|
|
||||||
|
|
||||||
switch(VerifiedCertificate) {
|
switch(VerifiedCertificate) {
|
||||||
case NO_CERTIFICATE:
|
case NO_CERTIFICATE:
|
||||||
@@ -264,7 +256,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
lastContact.clear();
|
lastContact.clear();
|
||||||
associations.clear();
|
associations.clear();
|
||||||
numberOfDevices = 0 ;
|
numberOfDevices = 0 ;
|
||||||
snapshot = OpenWifi::Now();
|
snapshot = std::time(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CapabilitiesModel::to_json(Poco::JSON::Object &Obj) const{
|
void CapabilitiesModel::to_json(Poco::JSON::Object &Obj) const{
|
||||||
@@ -272,100 +264,5 @@ namespace OpenWifi::GWObjects {
|
|||||||
field_to_json(Obj,"capabilities", capabilities);
|
field_to_json(Obj,"capabilities", capabilities);
|
||||||
};
|
};
|
||||||
|
|
||||||
void ScriptRequest::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
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,"when",when);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ScriptRequest::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"serialNumber",serialNumber);
|
|
||||||
field_from_json(Obj,"timeout",timeout);
|
|
||||||
field_from_json(Obj,"type",type);
|
|
||||||
field_from_json(Obj,"script",script);
|
|
||||||
field_from_json(Obj,"scriptId",scriptId);
|
|
||||||
field_from_json(Obj,"when",when);
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void RadiusProxyPoolList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"pools",pools);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RadiusProxyPoolList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"pools",pools);
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RadiusProxyPool::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"name",name);
|
|
||||||
field_to_json(Obj,"description",description);
|
|
||||||
field_to_json(Obj,"authConfig",authConfig);
|
|
||||||
field_to_json(Obj,"acctConfig",acctConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RadiusProxyPool::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"name",name);
|
|
||||||
field_from_json(Obj,"description",description);
|
|
||||||
field_from_json(Obj,"authConfig",authConfig);
|
|
||||||
field_from_json(Obj,"acctConfig",acctConfig);
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RadiusProxyServerConfig::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"policy",strategy);
|
|
||||||
field_to_json(Obj,"monitor",monitor);
|
|
||||||
field_to_json(Obj,"monitorMethod",monitorMethod);
|
|
||||||
field_to_json(Obj,"methodParameters",methodParameters);
|
|
||||||
field_to_json(Obj,"servers",servers);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RadiusProxyServerConfig::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"policy",strategy);
|
|
||||||
field_from_json(Obj,"monitor",monitor);
|
|
||||||
field_from_json(Obj,"monitorMethod",monitorMethod);
|
|
||||||
field_from_json(Obj,"methodParameters",methodParameters);
|
|
||||||
field_from_json(Obj,"servers",servers);
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RadiusProxyServerEntry::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"name",name);
|
|
||||||
field_to_json(Obj,"ip",ip);
|
|
||||||
field_to_json(Obj,"port",port);
|
|
||||||
field_to_json(Obj,"weight",weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RadiusProxyServerEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"name",name);
|
|
||||||
field_from_json(Obj,"ip",ip);
|
|
||||||
field_from_json(Obj,"port",port);
|
|
||||||
field_from_json(Obj,"weight",weight);
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ namespace OpenWifi::GWObjects {
|
|||||||
uint64_t webSocketClients=0;
|
uint64_t webSocketClients=0;
|
||||||
uint64_t kafkaPackets=0;
|
uint64_t kafkaPackets=0;
|
||||||
uint64_t websocketPackets=0;
|
uint64_t websocketPackets=0;
|
||||||
std::string locale;
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -60,14 +59,9 @@ namespace OpenWifi::GWObjects {
|
|||||||
uint64_t LastFWUpdate = 0 ;
|
uint64_t LastFWUpdate = 0 ;
|
||||||
std::string Venue;
|
std::string Venue;
|
||||||
std::string DevicePassword;
|
std::string DevicePassword;
|
||||||
std::string subscriber;
|
|
||||||
std::string entity;
|
|
||||||
uint64_t modified=0;
|
|
||||||
std::string locale;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
void to_json_with_status(Poco::JSON::Object &Obj) const;
|
void to_json_with_status(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
void Print() const;
|
void Print() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -124,7 +118,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
uint64_t Created;
|
uint64_t Created;
|
||||||
uint64_t LastModified;
|
uint64_t LastModified;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct CommandDetails {
|
struct CommandDetails {
|
||||||
@@ -156,7 +150,7 @@ namespace OpenWifi::GWObjects {
|
|||||||
std::string author;
|
std::string author;
|
||||||
uint64_t created;
|
uint64_t created;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct RttySessionDetails {
|
struct RttySessionDetails {
|
||||||
@@ -199,53 +193,4 @@ namespace OpenWifi::GWObjects {
|
|||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ScriptRequest {
|
|
||||||
uint64_t timeout=30;
|
|
||||||
std::string serialNumber;
|
|
||||||
std::string type;
|
|
||||||
std::string script;
|
|
||||||
std::string scriptId;
|
|
||||||
uint64_t when=0;
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadiusProxyServerEntry {
|
|
||||||
std::string name;
|
|
||||||
std::string ip;
|
|
||||||
uint16_t port=0;
|
|
||||||
uint64_t weight=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadiusProxyServerConfig {
|
|
||||||
std::string strategy;
|
|
||||||
bool monitor=false;
|
|
||||||
std::string monitorMethod;
|
|
||||||
std::vector<std::string> methodParameters;
|
|
||||||
std::vector<RadiusProxyServerEntry> servers;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadiusProxyPool {
|
|
||||||
std::string name;
|
|
||||||
std::string description;
|
|
||||||
RadiusProxyServerConfig authConfig;
|
|
||||||
RadiusProxyServerConfig acctConfig;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RadiusProxyPoolList {
|
|
||||||
std::vector<RadiusProxyPool> pools;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -91,13 +91,8 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
field_to_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
|
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_to_json( Obj,"devices",devices);
|
field_to_json( Obj,"devices",devices);
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
field_to_json( Obj,"rrm",rrm);
|
||||||
field_to_json( Obj,"sourceIP",sourceIP);
|
field_to_json( Obj,"sourceIP",sourceIP);
|
||||||
field_to_json( Obj,"variables", variables);
|
|
||||||
field_to_json( Obj,"managementPolicies", managementPolicies);
|
|
||||||
field_to_json( Obj,"managementRoles", managementRoles);
|
|
||||||
field_to_json( Obj,"maps", maps);
|
|
||||||
field_to_json( Obj,"configurations", configurations);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Entity::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Entity::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -111,13 +106,8 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
field_from_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_from_json( Obj,"devices",devices);
|
field_from_json( Obj,"devices",devices);
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
field_from_json( Obj,"rrm",rrm);
|
||||||
field_from_json( Obj,"sourceIP",sourceIP);
|
field_from_json( Obj,"sourceIP",sourceIP);
|
||||||
field_from_json( Obj,"variables", variables);
|
|
||||||
field_from_json( Obj,"managementPolicies", managementPolicies);
|
|
||||||
field_from_json( Obj,"managementRoles", managementRoles);
|
|
||||||
field_from_json( Obj,"maps", maps);
|
|
||||||
field_from_json( Obj,"configurations", configurations);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
||||||
@@ -152,16 +142,10 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_to_json( Obj,"design",design);
|
field_to_json( Obj,"design",design);
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
field_to_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
|
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_to_json( Obj,"contacts",contacts);
|
field_to_json( Obj,"contact",contact);
|
||||||
field_to_json( Obj,"location",location);
|
field_to_json( Obj,"location",location);
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
field_to_json( Obj,"rrm",rrm);
|
||||||
field_to_json( Obj,"sourceIP",sourceIP);
|
field_to_json( Obj,"sourceIP",sourceIP);
|
||||||
field_to_json( Obj,"variables", variables);
|
|
||||||
field_to_json( Obj,"managementPolicies", managementPolicies);
|
|
||||||
field_to_json( Obj,"managementRoles", managementRoles);
|
|
||||||
field_to_json( Obj,"maps", maps);
|
|
||||||
field_to_json( Obj,"configurations", configurations);
|
|
||||||
field_to_json( Obj,"boards", boards);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Venue::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Venue::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -176,16 +160,10 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_from_json( Obj,"design",design);
|
field_from_json( Obj,"design",design);
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
field_from_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_from_json( Obj,"contacts",contacts);
|
field_from_json( Obj,"contact",contact);
|
||||||
field_from_json( Obj,"location",location);
|
field_from_json( Obj,"location",location);
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
field_from_json( Obj,"rrm",rrm);
|
||||||
field_from_json( Obj,"sourceIP",sourceIP);
|
field_from_json( Obj,"sourceIP",sourceIP);
|
||||||
field_from_json( Obj,"variables", variables);
|
|
||||||
field_from_json( Obj,"managementPolicies", managementPolicies);
|
|
||||||
field_from_json( Obj,"managementRoles", managementRoles);
|
|
||||||
field_from_json( Obj,"maps", maps);
|
|
||||||
field_from_json( Obj,"configurations", configurations);
|
|
||||||
field_from_json( Obj,"boards", boards);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
|
||||||
@@ -193,89 +171,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Operator::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
field_to_json( Obj,"managementRoles",managementRoles);
|
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
|
||||||
field_to_json( Obj,"variables",variables);
|
|
||||||
field_to_json( Obj,"defaultOperator",defaultOperator);
|
|
||||||
field_to_json( Obj,"sourceIP",sourceIP);
|
|
||||||
field_to_json( Obj,"registrationId",registrationId);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Operator::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
field_from_json( Obj,"managementRoles",managementRoles);
|
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
|
||||||
field_from_json( Obj,"variables",variables);
|
|
||||||
field_from_json( Obj,"defaultOperator",defaultOperator);
|
|
||||||
field_from_json( Obj,"sourceIP",sourceIP);
|
|
||||||
field_from_json( Obj,"registrationId",registrationId);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OperatorList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"operators",operators);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OperatorList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"operators",operators);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServiceClass::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"operatorId",operatorId);
|
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
field_to_json( Obj,"cost",cost);
|
|
||||||
field_to_json( Obj,"currency",currency);
|
|
||||||
field_to_json( Obj,"period",period);
|
|
||||||
field_to_json( Obj,"billingCode",billingCode);
|
|
||||||
field_to_json( Obj,"variables",variables);
|
|
||||||
field_to_json( Obj,"defaultService",defaultService);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ServiceClass::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"operatorId",operatorId);
|
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
field_from_json( Obj,"cost",cost);
|
|
||||||
field_from_json( Obj,"currency",currency);
|
|
||||||
field_from_json( Obj,"period",period);
|
|
||||||
field_from_json( Obj,"billingCode",billingCode);
|
|
||||||
field_from_json( Obj,"variables",variables);
|
|
||||||
field_from_json( Obj,"defaultService",defaultService);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServiceClassList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"serviceClasses",serviceClasses);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ServiceClassList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"serviceClasses",serviceClasses);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserInfoDigest::to_json(Poco::JSON::Object &Obj) const {
|
void UserInfoDigest::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json( Obj,"id",id);
|
field_to_json( Obj,"id",id);
|
||||||
field_to_json( Obj,"entity",loginId);
|
field_to_json( Obj,"entity",loginId);
|
||||||
@@ -298,7 +193,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
field_to_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_to_json( Obj,"users",users);
|
field_to_json( Obj,"users",users);
|
||||||
field_to_json( Obj,"entity",entity);
|
field_to_json( Obj,"entity",entity);
|
||||||
field_to_json( Obj,"venue",venue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ManagementRole::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool ManagementRole::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -307,7 +201,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
field_from_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_from_json( Obj,"users",users);
|
field_from_json( Obj,"users",users);
|
||||||
field_from_json( Obj,"entity",entity);
|
field_from_json( Obj,"entity",entity);
|
||||||
field_from_json( Obj,"venue",venue);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
}
|
}
|
||||||
@@ -356,92 +249,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OperatorLocation::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"type",type);
|
|
||||||
field_to_json( Obj,"buildingName",buildingName);
|
|
||||||
field_to_json( Obj,"addressLines",addressLines);
|
|
||||||
field_to_json( Obj,"city",city);
|
|
||||||
field_to_json( Obj,"state",state);
|
|
||||||
field_to_json( Obj,"postal",postal);
|
|
||||||
field_to_json( Obj,"country",country);
|
|
||||||
field_to_json( Obj,"phones",phones);
|
|
||||||
field_to_json( Obj,"mobiles",mobiles);
|
|
||||||
field_to_json( Obj,"geoCode",geoCode);
|
|
||||||
field_to_json( Obj,"operatorId",operatorId);
|
|
||||||
field_to_json( Obj,"subscriberDeviceId",subscriberDeviceId);
|
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OperatorLocation::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"type", type);
|
|
||||||
field_from_json( Obj,"buildingName",buildingName);
|
|
||||||
field_from_json( Obj,"addressLines",addressLines);
|
|
||||||
field_from_json( Obj,"city",city);
|
|
||||||
field_from_json( Obj,"state",state);
|
|
||||||
field_from_json( Obj,"postal",postal);
|
|
||||||
field_from_json( Obj,"country",country);
|
|
||||||
field_from_json( Obj,"phones",phones);
|
|
||||||
field_from_json( Obj,"mobiles",mobiles);
|
|
||||||
field_from_json( Obj,"geoCode",geoCode);
|
|
||||||
field_from_json( Obj,"operatorId",operatorId);
|
|
||||||
field_from_json( Obj,"subscriberDeviceId",subscriberDeviceId);
|
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubLocation::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"type",type);
|
|
||||||
field_to_json( Obj,"buildingName",buildingName);
|
|
||||||
field_to_json( Obj,"addressLines",addressLines);
|
|
||||||
field_to_json( Obj,"city",city);
|
|
||||||
field_to_json( Obj,"state",state);
|
|
||||||
field_to_json( Obj,"postal",postal);
|
|
||||||
field_to_json( Obj,"country",country);
|
|
||||||
field_to_json( Obj,"phones",phones);
|
|
||||||
field_to_json( Obj,"mobiles",mobiles);
|
|
||||||
field_to_json( Obj,"geoCode",geoCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubLocation::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"type", type);
|
|
||||||
field_from_json( Obj,"buildingName",buildingName);
|
|
||||||
field_from_json( Obj,"addressLines",addressLines);
|
|
||||||
field_from_json( Obj,"city",city);
|
|
||||||
field_from_json( Obj,"state",state);
|
|
||||||
field_from_json( Obj,"postal",postal);
|
|
||||||
field_from_json( Obj,"country",country);
|
|
||||||
field_from_json( Obj,"phones",phones);
|
|
||||||
field_from_json( Obj,"mobiles",mobiles);
|
|
||||||
field_from_json( Obj,"geoCode",geoCode);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OperatorLocationList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj, "locations", locations);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OperatorLocationList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj, "locations", locations);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Contact::to_json(Poco::JSON::Object &Obj) const {
|
void Contact::to_json(Poco::JSON::Object &Obj) const {
|
||||||
info.to_json(Obj);
|
info.to_json(Obj);
|
||||||
field_to_json( Obj,"type", to_string(type));
|
field_to_json( Obj,"type", to_string(type));
|
||||||
@@ -488,118 +295,21 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OperatorContact::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"type", type);
|
|
||||||
field_to_json( Obj,"title",title);
|
|
||||||
field_to_json( Obj,"salutation",salutation);
|
|
||||||
field_to_json( Obj,"firstname",firstname);
|
|
||||||
field_to_json( Obj,"lastname",lastname);
|
|
||||||
field_to_json( Obj,"initials",initials);
|
|
||||||
field_to_json( Obj,"visual",visual);
|
|
||||||
field_to_json( Obj,"mobiles",mobiles);
|
|
||||||
field_to_json( Obj,"phones",phones);
|
|
||||||
field_to_json( Obj,"primaryEmail",primaryEmail);
|
|
||||||
field_to_json( Obj,"secondaryEmail",secondaryEmail);
|
|
||||||
field_to_json( Obj,"accessPIN",accessPIN);
|
|
||||||
field_to_json( Obj,"operatorId",operatorId);
|
|
||||||
field_to_json( Obj,"subscriberDeviceId",subscriberDeviceId);
|
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OperatorContact::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"type", type);
|
|
||||||
field_from_json( Obj,"title",title);
|
|
||||||
field_from_json( Obj,"salutation",salutation);
|
|
||||||
field_from_json( Obj,"firstname",firstname);
|
|
||||||
field_from_json( Obj,"lastname",lastname);
|
|
||||||
field_from_json( Obj,"initials",initials);
|
|
||||||
field_from_json( Obj,"visual",visual);
|
|
||||||
field_from_json( Obj,"mobiles",mobiles);
|
|
||||||
field_from_json( Obj,"phones",phones);
|
|
||||||
field_from_json( Obj,"primaryEmail",primaryEmail);
|
|
||||||
field_from_json( Obj,"secondaryEmail",secondaryEmail);
|
|
||||||
field_from_json( Obj,"accessPIN",accessPIN);
|
|
||||||
field_from_json( Obj,"operatorId",operatorId);
|
|
||||||
field_from_json( Obj,"subscriberDeviceId",subscriberDeviceId);
|
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubContact::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"type", type);
|
|
||||||
field_to_json( Obj,"title",title);
|
|
||||||
field_to_json( Obj,"salutation",salutation);
|
|
||||||
field_to_json( Obj,"firstname",firstname);
|
|
||||||
field_to_json( Obj,"lastname",lastname);
|
|
||||||
field_to_json( Obj,"initials",initials);
|
|
||||||
field_to_json( Obj,"visual",visual);
|
|
||||||
field_to_json( Obj,"mobiles",mobiles);
|
|
||||||
field_to_json( Obj,"phones",phones);
|
|
||||||
field_to_json( Obj,"primaryEmail",primaryEmail);
|
|
||||||
field_to_json( Obj,"secondaryEmail",secondaryEmail);
|
|
||||||
field_to_json( Obj,"accessPIN",accessPIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubContact::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"type", type);
|
|
||||||
field_from_json( Obj,"title",title);
|
|
||||||
field_from_json( Obj,"salutation",salutation);
|
|
||||||
field_from_json( Obj,"firstname",firstname);
|
|
||||||
field_from_json( Obj,"lastname",lastname);
|
|
||||||
field_from_json( Obj,"initials",initials);
|
|
||||||
field_from_json( Obj,"visual",visual);
|
|
||||||
field_from_json( Obj,"mobiles",mobiles);
|
|
||||||
field_from_json( Obj,"phones",phones);
|
|
||||||
field_from_json( Obj,"primaryEmail",primaryEmail);
|
|
||||||
field_from_json( Obj,"secondaryEmail",secondaryEmail);
|
|
||||||
field_from_json( Obj,"accessPIN",accessPIN);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OperatorContactList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj, "contacts", contacts);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool OperatorContactList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj, "contacts", contacts);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void InventoryTag::to_json(Poco::JSON::Object &Obj) const {
|
void InventoryTag::to_json(Poco::JSON::Object &Obj) const {
|
||||||
info.to_json(Obj);
|
info.to_json(Obj);
|
||||||
field_to_json( Obj, "serialNumber", serialNumber);
|
field_to_json(Obj, "serialNumber", serialNumber);
|
||||||
field_to_json( Obj, "venue", venue);
|
field_to_json(Obj, "venue", venue);
|
||||||
field_to_json( Obj, "entity", entity);
|
field_to_json(Obj, "entity", entity);
|
||||||
field_to_json( Obj, "subscriber", subscriber);
|
field_to_json(Obj, "subscriber", subscriber);
|
||||||
field_to_json( Obj, "deviceType", deviceType);
|
field_to_json(Obj, "deviceType", deviceType);
|
||||||
field_to_json( Obj, "qrCode", qrCode);
|
field_to_json(Obj, "qrCode", qrCode);
|
||||||
field_to_json( Obj, "geoCode", geoCode);
|
field_to_json(Obj, "geoCode", geoCode);
|
||||||
field_to_json( Obj, "location", location);
|
field_to_json(Obj, "location", location);
|
||||||
field_to_json( Obj, "contact", contact);
|
field_to_json(Obj, "contact", contact);
|
||||||
field_to_json( Obj, "deviceConfiguration",deviceConfiguration);
|
field_to_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
field_to_json( Obj,"rrm",rrm);
|
||||||
field_to_json( Obj, "managementPolicy",managementPolicy);
|
field_to_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_to_json( Obj, "state",state);
|
field_to_json( Obj,"state",state);
|
||||||
field_to_json( Obj, "devClass",devClass);
|
|
||||||
field_to_json( Obj, "locale",locale);
|
|
||||||
field_to_json( Obj, "realMacAddress",realMacAddress);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InventoryTag::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool InventoryTag::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -610,17 +320,14 @@ namespace OpenWifi::ProvObjects {
|
|||||||
field_from_json( Obj,"entity",entity);
|
field_from_json( Obj,"entity",entity);
|
||||||
field_from_json( Obj,"subscriber",subscriber);
|
field_from_json( Obj,"subscriber",subscriber);
|
||||||
field_from_json( Obj,"deviceType",deviceType);
|
field_from_json( Obj,"deviceType",deviceType);
|
||||||
field_from_json( Obj,"qrCode", qrCode);
|
field_from_json(Obj, "qrCode", qrCode);
|
||||||
field_from_json( Obj,"geoCode",geoCode);
|
field_from_json( Obj,"geoCode",geoCode);
|
||||||
field_from_json( Obj,"location",location);
|
field_from_json( Obj,"location",location);
|
||||||
field_from_json( Obj,"contact",contact);
|
field_from_json( Obj,"contact",contact);
|
||||||
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
field_from_json( Obj,"deviceConfiguration",deviceConfiguration);
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
field_from_json( Obj,"rrm",rrm);
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
field_from_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_from_json( Obj,"state",state);
|
field_from_json( Obj,"state",state);
|
||||||
field_from_json( Obj,"devClass",devClass);
|
|
||||||
field_from_json( Obj,"locale",locale);
|
|
||||||
field_from_json( Obj,"realMacAddress",realMacAddress);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
||||||
@@ -628,26 +335,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InventoryConfigApplyResult::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj, "appliedConfiguration", appliedConfiguration);
|
|
||||||
field_to_json( Obj, "warnings", warnings);
|
|
||||||
field_to_json( Obj, "errors", errors);
|
|
||||||
field_to_json( Obj, "errorCode", errorCode);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool InventoryConfigApplyResult::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj, "appliedConfiguration", appliedConfiguration);
|
|
||||||
field_from_json( Obj, "warnings", warnings);
|
|
||||||
field_from_json( Obj, "errors", errors);
|
|
||||||
field_from_json( Obj, "errorCode", errorCode);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void InventoryTagList::to_json(Poco::JSON::Object &Obj) const {
|
void InventoryTagList::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json( Obj,"taglist",taglist);
|
field_to_json( Obj,"taglist",taglist);
|
||||||
}
|
}
|
||||||
@@ -655,7 +342,7 @@ namespace OpenWifi::ProvObjects {
|
|||||||
bool InventoryTagList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool InventoryTagList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json( Obj,"taglist",taglist);
|
field_from_json( Obj,"taglist",taglist);
|
||||||
return true;
|
return false;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -686,14 +373,12 @@ namespace OpenWifi::ProvObjects {
|
|||||||
info.to_json(Obj);
|
info.to_json(Obj);
|
||||||
field_to_json( Obj,"managementPolicy",managementPolicy);
|
field_to_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_to_json( Obj,"deviceTypes",deviceTypes);
|
field_to_json( Obj,"deviceTypes",deviceTypes);
|
||||||
field_to_json( Obj,"subscriberOnly",subscriberOnly);
|
|
||||||
field_to_json( Obj,"entity", entity);
|
|
||||||
field_to_json( Obj,"venue", venue);
|
|
||||||
field_to_json( Obj,"subscriber", subscriber);
|
|
||||||
field_to_json( Obj,"configuration",configuration);
|
field_to_json( Obj,"configuration",configuration);
|
||||||
field_to_json( Obj,"inUse",inUse);
|
field_to_json( Obj,"inUse",inUse);
|
||||||
field_to_json( Obj,"variables",variables);
|
field_to_json( Obj,"variables",variables);
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
field_to_json( Obj,"rrm",rrm);
|
||||||
|
field_to_json( Obj,"firmwareUpgrade",firmwareUpgrade);
|
||||||
|
field_to_json( Obj,"firmwareRCOnly",firmwareRCOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DeviceConfiguration::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool DeviceConfiguration::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -701,14 +386,12 @@ namespace OpenWifi::ProvObjects {
|
|||||||
info.from_json(Obj);
|
info.from_json(Obj);
|
||||||
field_from_json( Obj,"managementPolicy",managementPolicy);
|
field_from_json( Obj,"managementPolicy",managementPolicy);
|
||||||
field_from_json( Obj,"deviceTypes",deviceTypes);
|
field_from_json( Obj,"deviceTypes",deviceTypes);
|
||||||
|
field_from_json( Obj,"configuration",configuration);
|
||||||
field_from_json( Obj,"inUse",inUse);
|
field_from_json( Obj,"inUse",inUse);
|
||||||
field_from_json( Obj,"variables",variables);
|
field_from_json( Obj,"variables",variables);
|
||||||
field_from_json( Obj,"subscriberOnly",subscriberOnly);
|
field_from_json( Obj,"rrm",rrm);
|
||||||
field_from_json( Obj,"entity", entity);
|
field_from_json( Obj,"firmwareUpgrade",firmwareUpgrade);
|
||||||
field_from_json( Obj,"venue", venue);
|
field_from_json( Obj,"firmwareRCOnly",firmwareRCOnly);
|
||||||
field_from_json( Obj,"subscriber", subscriber);
|
|
||||||
field_from_json( Obj,"configuration",configuration);
|
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
||||||
@@ -787,16 +470,46 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void field_to_json(Poco::JSON::Object &Obj, const char * FieldName, ACLACCESS A) {
|
||||||
|
switch(A) {
|
||||||
|
case READ: Obj.set(FieldName,"read"); break;
|
||||||
|
case MODIFY: Obj.set(FieldName,"modify"); break;
|
||||||
|
case CREATE: Obj.set(FieldName,"create"); break;
|
||||||
|
case DELETE: Obj.set(FieldName,"delete"); break;
|
||||||
|
case NONE:
|
||||||
|
default:
|
||||||
|
Obj.set(FieldName,"none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void field_from_json(const Poco::JSON::Object::Ptr &Obj, const char * FieldName, ACLACCESS &A) {
|
||||||
|
if(Obj->has(FieldName)) {
|
||||||
|
auto V = Obj->getValue<std::string>(FieldName);
|
||||||
|
if(V=="read")
|
||||||
|
A = READ;
|
||||||
|
else if(V=="modify")
|
||||||
|
A = MODIFY;
|
||||||
|
else if(V=="create")
|
||||||
|
A = CREATE;
|
||||||
|
else if(V=="delete")
|
||||||
|
A = DELETE;
|
||||||
|
else if(V=="none")
|
||||||
|
A = NONE;
|
||||||
|
else
|
||||||
|
throw Poco::Exception("invalid JSON");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ObjectACL::to_json(Poco::JSON::Object &Obj) const {
|
void ObjectACL::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj, "users", users);
|
RESTAPI_utils::field_to_json(Obj, "users", users);
|
||||||
field_to_json(Obj, "roles", roles);
|
RESTAPI_utils::field_to_json(Obj, "roles", roles);
|
||||||
field_to_json(Obj, "access", access);
|
field_to_json(Obj, "access", access);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectACL::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool ObjectACL::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj, "users", users);
|
RESTAPI_utils::field_from_json(Obj, "users", users);
|
||||||
field_from_json(Obj, "roles", roles);
|
RESTAPI_utils::field_from_json(Obj, "roles", roles);
|
||||||
field_from_json(Obj, "access", access);
|
field_from_json(Obj, "access", access);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
@@ -806,12 +519,12 @@ namespace OpenWifi::ProvObjects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ObjectACLList::to_json(Poco::JSON::Object &Obj) const {
|
void ObjectACLList::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj, "list", list);
|
RESTAPI_utils::field_to_json(Obj, "list", list);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjectACLList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool ObjectACLList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj, "list", list);
|
RESTAPI_utils::field_from_json(Obj, "list", list);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
||||||
@@ -819,15 +532,44 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string to_string(VISIBILITY A) {
|
||||||
|
switch(A) {
|
||||||
|
case PUBLIC: return "public";
|
||||||
|
case SELECT: return "select";
|
||||||
|
case PRIVATE:
|
||||||
|
default:
|
||||||
|
return "private";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void field_to_json(Poco::JSON::Object &Obj, const char * FieldName, VISIBILITY A) {
|
||||||
|
Obj.set(FieldName,to_string(A));
|
||||||
|
}
|
||||||
|
|
||||||
|
VISIBILITY visibility_from_string(const std::string &V) {
|
||||||
|
if(V=="public")
|
||||||
|
return PUBLIC;
|
||||||
|
else if(V=="select")
|
||||||
|
return SELECT;
|
||||||
|
else if(V=="private")
|
||||||
|
return PRIVATE;
|
||||||
|
throw Poco::Exception("invalid json");
|
||||||
|
}
|
||||||
|
|
||||||
|
void field_from_json(const Poco::JSON::Object::Ptr &Obj, const char * FieldName, VISIBILITY &A) {
|
||||||
|
if(Obj->has(FieldName)) {
|
||||||
|
auto V = Obj->getValue<std::string>(FieldName);
|
||||||
|
A = visibility_from_string(V);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Map::to_json(Poco::JSON::Object &Obj) const {
|
void Map::to_json(Poco::JSON::Object &Obj) const {
|
||||||
info.to_json(Obj);
|
info.to_json(Obj);
|
||||||
field_to_json( Obj,"data",data);
|
RESTAPI_utils::field_to_json( Obj,"data",data);
|
||||||
field_to_json( Obj,"entity",entity);
|
RESTAPI_utils::field_to_json( Obj,"entity",entity);
|
||||||
field_to_json( Obj,"creator",creator);
|
RESTAPI_utils::field_to_json( Obj,"creator",creator);
|
||||||
field_to_json( Obj,"visibility",visibility);
|
field_to_json( Obj,"visibility",visibility);
|
||||||
field_to_json( Obj,"access",access);
|
RESTAPI_utils::field_to_json( Obj,"access",access);
|
||||||
field_to_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
field_to_json( Obj,"venue", venue);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Map::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Map::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -836,24 +578,8 @@ namespace OpenWifi::ProvObjects {
|
|||||||
RESTAPI_utils::field_from_json( Obj,"data",data);
|
RESTAPI_utils::field_from_json( Obj,"data",data);
|
||||||
RESTAPI_utils::field_from_json( Obj,"entity",entity);
|
RESTAPI_utils::field_from_json( Obj,"entity",entity);
|
||||||
RESTAPI_utils::field_from_json( Obj,"creator",creator);
|
RESTAPI_utils::field_from_json( Obj,"creator",creator);
|
||||||
RESTAPI_utils::field_from_json( Obj,"visibility",visibility);
|
field_from_json( Obj,"visibility",visibility);
|
||||||
RESTAPI_utils::field_from_json( Obj,"access",access);
|
RESTAPI_utils::field_from_json( Obj,"access",access);
|
||||||
RESTAPI_utils::field_from_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
RESTAPI_utils::field_from_json( Obj,"venue", venue);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerialNumberList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
RESTAPI_utils::field_to_json( Obj,"serialNumbers",serialNumbers);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SerialNumberList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
RESTAPI_utils::field_from_json( Obj,"serialNumbers",serialNumbers);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
|
|
||||||
@@ -875,223 +601,8 @@ namespace OpenWifi::ProvObjects {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SignupEntry::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"email", email);
|
|
||||||
field_to_json( Obj,"userId", userId);
|
|
||||||
field_to_json( Obj,"macAddress", macAddress);
|
|
||||||
field_to_json( Obj,"serialNumber", serialNumber);
|
|
||||||
field_to_json( Obj,"submitted", submitted);
|
|
||||||
field_to_json( Obj,"completed", completed);
|
|
||||||
field_to_json( Obj,"status", status);
|
|
||||||
field_to_json( Obj,"error", error);
|
|
||||||
field_to_json( Obj,"statusCode", statusCode);
|
|
||||||
field_to_json( Obj,"deviceID", deviceID);
|
|
||||||
field_to_json( Obj,"registrationId",registrationId);
|
|
||||||
field_to_json( Obj,"operatorId",operatorId);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SignupEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"email", email);
|
|
||||||
field_from_json( Obj,"userId", userId);
|
|
||||||
field_from_json( Obj,"macAddress", macAddress);
|
|
||||||
field_from_json( Obj,"serialNumber", serialNumber);
|
|
||||||
field_from_json( Obj,"submitted", submitted);
|
|
||||||
field_from_json( Obj,"completed", completed);
|
|
||||||
field_from_json( Obj,"status", status);
|
|
||||||
field_from_json( Obj,"error", error);
|
|
||||||
field_from_json( Obj,"statusCode", statusCode);
|
|
||||||
field_from_json( Obj,"deviceID", deviceID);
|
|
||||||
field_from_json( Obj,"registrationId",registrationId);
|
|
||||||
field_from_json( Obj,"operatorId",operatorId);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Variable::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"type", type);
|
|
||||||
field_to_json( Obj,"weight", weight);
|
|
||||||
field_to_json( Obj,"prefix", prefix);
|
|
||||||
field_to_json( Obj,"value", value);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Variable::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"type", type);
|
|
||||||
field_from_json( Obj,"weight", weight);
|
|
||||||
field_from_json( Obj,"prefix", prefix);
|
|
||||||
field_from_json( Obj,"value", value);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VariableList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"variables", variables);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VariableList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"variables", variables);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VariableBlock::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"variables", variables);
|
|
||||||
field_to_json( Obj,"entity", entity);
|
|
||||||
field_to_json( Obj,"venue", venue);
|
|
||||||
field_to_json( Obj,"subscriber", subscriber);
|
|
||||||
field_to_json( Obj,"inventory", inventory);
|
|
||||||
field_to_json( Obj,"configurations", configurations);
|
|
||||||
field_to_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VariableBlock::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"variables", variables);
|
|
||||||
field_from_json( Obj,"entity", entity);
|
|
||||||
field_from_json( Obj,"venue", venue);
|
|
||||||
field_from_json( Obj,"subscriber", subscriber);
|
|
||||||
field_from_json( Obj,"inventory", inventory);
|
|
||||||
field_from_json( Obj,"configurations", configurations);
|
|
||||||
field_from_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VariableBlockList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"variableBlocks", variableBlocks);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VariableBlockList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"variableBlocks", variableBlocks);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigurationDetails::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"configuration", configuration);
|
|
||||||
field_to_json( Obj,"rrm", rrm);
|
|
||||||
field_to_json( Obj,"firmwareRCOnly", firmwareRCOnly);
|
|
||||||
field_to_json( Obj,"firmwareUpgrade", firmwareUpgrade);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ConfigurationDetails::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"configuration", configuration);
|
|
||||||
field_from_json( Obj,"rrm", rrm);
|
|
||||||
field_from_json( Obj,"firmwareRCOnly", firmwareRCOnly);
|
|
||||||
field_from_json( Obj,"firmwareUpgrade", firmwareUpgrade);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubscriberDevice::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
info.to_json(Obj);
|
|
||||||
field_to_json( Obj,"serialNumber", serialNumber);
|
|
||||||
field_to_json( Obj,"deviceType", deviceType);
|
|
||||||
field_to_json( Obj,"operatorId", operatorId);
|
|
||||||
field_to_json( Obj,"subscriberId", subscriberId);
|
|
||||||
field_to_json( Obj,"location", location);
|
|
||||||
field_to_json( Obj,"contact", contact);
|
|
||||||
field_to_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
field_to_json( Obj,"serviceClass", serviceClass);
|
|
||||||
field_to_json( Obj,"qrCode", qrCode);
|
|
||||||
field_to_json( Obj,"geoCode", geoCode);
|
|
||||||
field_to_json( Obj,"deviceRules",deviceRules);
|
|
||||||
field_to_json( Obj,"state", state);
|
|
||||||
field_to_json( Obj,"locale", locale);
|
|
||||||
field_to_json( Obj,"billingCode", billingCode);
|
|
||||||
field_to_json( Obj,"configuration", configuration);
|
|
||||||
field_to_json( Obj,"suspended", suspended);
|
|
||||||
field_to_json( Obj,"realMacAddress", realMacAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubscriberDevice::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
info.from_json(Obj);
|
|
||||||
field_from_json( Obj,"serialNumber", serialNumber);
|
|
||||||
field_from_json( Obj,"deviceType", deviceType);
|
|
||||||
field_from_json( Obj,"operatorId", operatorId);
|
|
||||||
field_from_json( Obj,"subscriberId", subscriberId);
|
|
||||||
field_from_json( Obj,"location", location);
|
|
||||||
field_from_json( Obj,"contact", contact);
|
|
||||||
field_from_json( Obj,"managementPolicy", managementPolicy);
|
|
||||||
field_from_json( Obj,"serviceClass", serviceClass);
|
|
||||||
field_from_json( Obj,"qrCode", qrCode);
|
|
||||||
field_from_json( Obj,"geoCode", geoCode);
|
|
||||||
field_from_json( Obj,"deviceRules",deviceRules);
|
|
||||||
field_from_json( Obj,"state", state);
|
|
||||||
field_from_json( Obj,"locale", locale);
|
|
||||||
field_from_json( Obj,"billingCode", billingCode);
|
|
||||||
field_from_json( Obj,"configuration", configuration);
|
|
||||||
field_from_json( Obj,"suspended", suspended);
|
|
||||||
field_from_json( Obj,"realMacAddress", realMacAddress);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubscriberDeviceList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json( Obj,"subscriberDevices", subscriberDevices);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SubscriberDeviceList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json( Obj,"subscriberDevices", subscriberDevices);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void VenueDeviceList::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,"devices",devices);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool VenueDeviceList::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,"devices",devices);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
bool UpdateObjectInfo(const Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
||||||
uint64_t Now = OpenWifi::Now();
|
uint64_t Now = std::time(nullptr);
|
||||||
if(O->has("name"))
|
if(O->has("name"))
|
||||||
I.name = O->get("name").toString();
|
I.name = O->get("name").toString();
|
||||||
|
|
||||||
@@ -1112,7 +623,7 @@ namespace OpenWifi::ProvObjects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CreateObjectInfo(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) {
|
||||||
uint64_t Now = OpenWifi::Now();
|
uint64_t Now = std::time(nullptr);
|
||||||
if(O->has("name"))
|
if(O->has("name"))
|
||||||
I.name = O->get("name").toString();
|
I.name = O->get("name").toString();
|
||||||
|
|
||||||
@@ -1134,30 +645,5 @@ namespace OpenWifi::ProvObjects {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CreateObjectInfo([[maybe_unused]] const SecurityObjects::UserInfo &U, ObjectInfo &I) {
|
|
||||||
I.modified = I.created = OpenWifi::Now();
|
|
||||||
I.id = MicroService::CreateUUID();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DeviceRules::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"rcOnly",rcOnly);
|
|
||||||
field_to_json(Obj,"rrm",rrm);
|
|
||||||
field_to_json(Obj,"firmwareUpgrade",firmwareUpgrade);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DeviceRules::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"rcOnly",rcOnly);
|
|
||||||
field_from_json(Obj,"rrm",rrm);
|
|
||||||
field_from_json(Obj,"firmwareUpgrade",firmwareUpgrade);
|
|
||||||
return true;
|
|
||||||
} catch(...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,13 +33,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SerialNumberList {
|
|
||||||
Types::UUIDvec_t serialNumbers;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ManagementPolicyEntry {
|
struct ManagementPolicyEntry {
|
||||||
Types::UUIDvec_t users;
|
Types::UUIDvec_t users;
|
||||||
Types::UUIDvec_t resources;
|
Types::UUIDvec_t resources;
|
||||||
@@ -55,22 +48,12 @@ namespace OpenWifi::ProvObjects {
|
|||||||
std::vector<ManagementPolicyEntry> entries;
|
std::vector<ManagementPolicyEntry> entries;
|
||||||
Types::StringVec inUse;
|
Types::StringVec inUse;
|
||||||
Types::UUID_t entity;
|
Types::UUID_t entity;
|
||||||
Types::UUID_t venue;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<ManagementPolicy> ManagementPolicyVec;
|
typedef std::vector<ManagementPolicy> ManagementPolicyVec;
|
||||||
|
|
||||||
struct DeviceRules {
|
|
||||||
std::string rcOnly{"inherit"};
|
|
||||||
std::string rrm{"inherit"};
|
|
||||||
std::string firmwareUpgrade{"inherit"};
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Entity {
|
struct Entity {
|
||||||
ObjectInfo info;
|
ObjectInfo info;
|
||||||
Types::UUID_t parent;
|
Types::UUID_t parent;
|
||||||
@@ -81,13 +64,8 @@ namespace OpenWifi::ProvObjects {
|
|||||||
Types::UUID_t managementPolicy;
|
Types::UUID_t managementPolicy;
|
||||||
Types::UUIDvec_t deviceConfiguration;
|
Types::UUIDvec_t deviceConfiguration;
|
||||||
Types::UUIDvec_t devices;
|
Types::UUIDvec_t devices;
|
||||||
DeviceRules deviceRules;
|
std::string rrm;
|
||||||
Types::StringVec sourceIP;
|
Types::StringVec sourceIP;
|
||||||
Types::UUIDvec_t variables;
|
|
||||||
Types::UUIDvec_t managementPolicies;
|
|
||||||
Types::UUIDvec_t managementRoles;
|
|
||||||
Types::UUIDvec_t maps;
|
|
||||||
Types::UUIDvec_t configurations;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -114,16 +92,10 @@ namespace OpenWifi::ProvObjects {
|
|||||||
DiGraph topology;
|
DiGraph topology;
|
||||||
std::string design;
|
std::string design;
|
||||||
Types::UUIDvec_t deviceConfiguration;
|
Types::UUIDvec_t deviceConfiguration;
|
||||||
Types::UUIDvec_t contacts;
|
std::string contact;
|
||||||
std::string location;
|
std::string location;
|
||||||
DeviceRules deviceRules;
|
std::string rrm;
|
||||||
Types::StringVec sourceIP;
|
Types::StringVec sourceIP;
|
||||||
Types::UUIDvec_t variables;
|
|
||||||
Types::UUIDvec_t configurations;
|
|
||||||
Types::UUIDvec_t maps;
|
|
||||||
Types::UUIDvec_t managementPolicies;
|
|
||||||
Types::UUIDvec_t managementRoles;
|
|
||||||
Types::UUIDvec_t boards;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -145,7 +117,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
Types::UUIDvec_t users;
|
Types::UUIDvec_t users;
|
||||||
Types::StringVec inUse;
|
Types::StringVec inUse;
|
||||||
Types::UUID_t entity;
|
Types::UUID_t entity;
|
||||||
Types::UUID_t venue;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -209,51 +180,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
};
|
};
|
||||||
typedef std::vector<Location> LocationVec;
|
typedef std::vector<Location> LocationVec;
|
||||||
|
|
||||||
struct OperatorLocation {
|
|
||||||
ObjectInfo info;
|
|
||||||
std::string type;
|
|
||||||
std::string buildingName;
|
|
||||||
Types::StringVec addressLines;
|
|
||||||
std::string city;
|
|
||||||
std::string state;
|
|
||||||
std::string postal;
|
|
||||||
std::string country;
|
|
||||||
Types::StringVec phones;
|
|
||||||
Types::StringVec mobiles;
|
|
||||||
std::string geoCode;
|
|
||||||
Types::UUID_t operatorId;
|
|
||||||
Types::UUID_t subscriberDeviceId;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
typedef std::vector<Location> LocationVec;
|
|
||||||
|
|
||||||
struct SubLocation {
|
|
||||||
std::string type;
|
|
||||||
std::string buildingName;
|
|
||||||
Types::StringVec addressLines;
|
|
||||||
std::string city;
|
|
||||||
std::string state;
|
|
||||||
std::string postal;
|
|
||||||
std::string country;
|
|
||||||
Types::StringVec phones;
|
|
||||||
Types::StringVec mobiles;
|
|
||||||
std::string geoCode;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct OperatorLocationList {
|
|
||||||
std::vector<OperatorLocation> locations;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
enum ContactType {
|
enum ContactType {
|
||||||
CT_SUBSCRIBER, CT_USER, CT_INSTALLER, CT_CSR, CT_MANAGER,
|
CT_SUBSCRIBER, CT_USER, CT_INSTALLER, CT_CSR, CT_MANAGER,
|
||||||
CT_BUSINESSOWNER, CT_TECHNICIAN, CT_CORPORATE, CT_UNKNOWN
|
CT_BUSINESSOWNER, CT_TECHNICIAN, CT_CORPORATE, CT_UNKNOWN
|
||||||
@@ -317,55 +243,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
};
|
};
|
||||||
typedef std::vector<Contact> ContactVec;
|
typedef std::vector<Contact> ContactVec;
|
||||||
|
|
||||||
struct OperatorContact {
|
|
||||||
ObjectInfo info;
|
|
||||||
std::string type;
|
|
||||||
std::string title;
|
|
||||||
std::string salutation;
|
|
||||||
std::string firstname;
|
|
||||||
std::string lastname;
|
|
||||||
std::string initials;
|
|
||||||
std::string visual;
|
|
||||||
Types::StringVec mobiles;
|
|
||||||
Types::StringVec phones;
|
|
||||||
std::string primaryEmail;
|
|
||||||
std::string secondaryEmail;
|
|
||||||
std::string accessPIN;
|
|
||||||
Types::UUID_t operatorId;
|
|
||||||
Types::UUID_t subscriberDeviceId;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SubContact {
|
|
||||||
std::string type;
|
|
||||||
std::string title;
|
|
||||||
std::string salutation;
|
|
||||||
std::string firstname;
|
|
||||||
std::string lastname;
|
|
||||||
std::string initials;
|
|
||||||
std::string visual;
|
|
||||||
Types::StringVec mobiles;
|
|
||||||
Types::StringVec phones;
|
|
||||||
std::string primaryEmail;
|
|
||||||
std::string secondaryEmail;
|
|
||||||
std::string accessPIN;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct OperatorContactList {
|
|
||||||
std::vector<OperatorContact> contacts;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::vector<OperatorContact> OperatorContactVec;
|
|
||||||
|
|
||||||
struct DeviceConfigurationElement {
|
struct DeviceConfigurationElement {
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string description;
|
std::string description;
|
||||||
@@ -383,19 +260,16 @@ namespace OpenWifi::ProvObjects {
|
|||||||
Types::StringVec deviceTypes;
|
Types::StringVec deviceTypes;
|
||||||
DeviceConfigurationElementVec configuration;
|
DeviceConfigurationElementVec configuration;
|
||||||
Types::StringVec inUse;
|
Types::StringVec inUse;
|
||||||
Types::UUIDvec_t variables;
|
Types::StringPairVec variables;
|
||||||
DeviceRules deviceRules;
|
std::string rrm;
|
||||||
bool subscriberOnly=false;
|
std::string firmwareUpgrade;
|
||||||
std::string venue;
|
bool firmwareRCOnly=false;
|
||||||
std::string entity;
|
|
||||||
std::string subscriber;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<DeviceConfiguration> DeviceConfigurationVec;
|
typedef std::vector<DeviceConfiguration> DeviceConfigurationVec;
|
||||||
|
|
||||||
|
|
||||||
struct InventoryTag {
|
struct InventoryTag {
|
||||||
ObjectInfo info;
|
ObjectInfo info;
|
||||||
std::string serialNumber;
|
std::string serialNumber;
|
||||||
@@ -408,12 +282,9 @@ namespace OpenWifi::ProvObjects {
|
|||||||
std::string location;
|
std::string location;
|
||||||
std::string contact;
|
std::string contact;
|
||||||
std::string deviceConfiguration;
|
std::string deviceConfiguration;
|
||||||
DeviceRules deviceRules;
|
std::string rrm;
|
||||||
Types::UUID_t managementPolicy;
|
Types::UUID_t managementPolicy;
|
||||||
std::string state;
|
std::string state;
|
||||||
std::string devClass;
|
|
||||||
std::string locale;
|
|
||||||
std::string realMacAddress;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -428,15 +299,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct InventoryConfigApplyResult {
|
|
||||||
std::string appliedConfiguration;
|
|
||||||
Types::StringVec errors;
|
|
||||||
Types::StringVec warnings;
|
|
||||||
uint64_t errorCode;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Report {
|
struct Report {
|
||||||
uint64_t snapShot=0;
|
uint64_t snapShot=0;
|
||||||
@@ -471,20 +333,20 @@ namespace OpenWifi::ProvObjects {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct UuidList {
|
struct UuidList {
|
||||||
Types::UUIDvec_t list;
|
std::vector<std::string> list;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ACLACCESS {
|
enum ACLACCESS {
|
||||||
NONE = 0, READ=1, MODIFY=2, CREATE=3, DELETE=4
|
NONE, READ, MODIFY, CREATE, DELETE
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ObjectACL {
|
struct ObjectACL {
|
||||||
UuidList users;
|
UuidList users;
|
||||||
UuidList roles;
|
UuidList roles;
|
||||||
uint64_t access = (uint64_t) NONE;
|
ACLACCESS access = NONE;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -497,15 +359,20 @@ namespace OpenWifi::ProvObjects {
|
|||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum VISIBILITY {
|
||||||
|
PUBLIC, PRIVATE, SELECT
|
||||||
|
};
|
||||||
|
|
||||||
|
std::string to_string(VISIBILITY A);
|
||||||
|
VISIBILITY visibility_from_string(const std::string &V);
|
||||||
|
|
||||||
struct Map {
|
struct Map {
|
||||||
ObjectInfo info;
|
ObjectInfo info;
|
||||||
std::string data;
|
std::string data;
|
||||||
std::string entity;
|
std::string entity;
|
||||||
std::string creator;
|
std::string creator;
|
||||||
std::string visibility{"private"};
|
VISIBILITY visibility = PRIVATE;
|
||||||
ObjectACLList access;
|
ObjectACLList access;
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
std::string venue;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -518,168 +385,6 @@ namespace OpenWifi::ProvObjects {
|
|||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum SignupStatusCodes {
|
|
||||||
SignupCreated = 0 ,
|
|
||||||
SignupWaitingForEmail,
|
|
||||||
SignupWaitingForDevice,
|
|
||||||
SignupSuccess,
|
|
||||||
SignupFailure,
|
|
||||||
SignupCanceled,
|
|
||||||
SignupTimedOut
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SignupEntry {
|
|
||||||
ObjectInfo info;
|
|
||||||
std::string email;
|
|
||||||
std::string userId;
|
|
||||||
std::string macAddress;
|
|
||||||
std::string serialNumber;
|
|
||||||
uint64_t submitted = 0 ;
|
|
||||||
uint64_t completed = 0 ;
|
|
||||||
std::string status;
|
|
||||||
uint64_t error=0;
|
|
||||||
uint64_t statusCode=0;
|
|
||||||
std::string deviceID;
|
|
||||||
std::string registrationId;
|
|
||||||
std::string operatorId;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Variable {
|
|
||||||
std::string type;
|
|
||||||
uint64_t weight=0;
|
|
||||||
std::string prefix;
|
|
||||||
std::string value;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct VariableList {
|
|
||||||
std::vector<Variable> variables;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct VariableBlock {
|
|
||||||
ObjectInfo info;
|
|
||||||
std::vector<Variable> variables;
|
|
||||||
std::string entity;
|
|
||||||
std::string venue;
|
|
||||||
std::string subscriber;
|
|
||||||
std::string inventory;
|
|
||||||
Types::UUIDvec_t configurations;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct VariableBlockList {
|
|
||||||
std::vector<VariableBlock> variableBlocks;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Operator {
|
|
||||||
ObjectInfo info;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
Types::UUIDvec_t managementRoles;
|
|
||||||
DeviceRules deviceRules;
|
|
||||||
std::vector<Variable> variables;
|
|
||||||
bool defaultOperator=false;
|
|
||||||
Types::StringVec sourceIP;
|
|
||||||
std::string registrationId;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct OperatorList {
|
|
||||||
std::vector<Operator> operators;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct VenueDeviceList {
|
|
||||||
std::string id;
|
|
||||||
std::string name;
|
|
||||||
std::string description;
|
|
||||||
Types::UUIDvec_t devices;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ServiceClass {
|
|
||||||
ObjectInfo info;
|
|
||||||
Types::UUID_t operatorId;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
double cost=0.0;
|
|
||||||
std::string currency;
|
|
||||||
std::string period;
|
|
||||||
std::string billingCode;
|
|
||||||
std::vector<Variable> variables;
|
|
||||||
bool defaultService=false;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ServiceClassList {
|
|
||||||
std::vector<ServiceClass> serviceClasses;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ConfigurationDetails {
|
|
||||||
DeviceConfigurationElementVec configuration;
|
|
||||||
std::string rrm{"inherit"};
|
|
||||||
std::string firmwareUpgrade{"inherit"};
|
|
||||||
std::string firmwareRCOnly{"inherit"};
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SubscriberDevice {
|
|
||||||
ObjectInfo info;
|
|
||||||
std::string serialNumber;
|
|
||||||
std::string deviceType;
|
|
||||||
Types::UUID_t operatorId;
|
|
||||||
Types::UUID_t subscriberId;
|
|
||||||
SubLocation location;
|
|
||||||
SubContact contact;
|
|
||||||
Types::UUID_t managementPolicy;
|
|
||||||
Types::UUID_t serviceClass;
|
|
||||||
std::string qrCode;
|
|
||||||
std::string geoCode;
|
|
||||||
DeviceRules deviceRules;
|
|
||||||
std::string state;
|
|
||||||
std::string locale;
|
|
||||||
std::string billingCode;
|
|
||||||
DeviceConfigurationElementVec configuration;
|
|
||||||
bool suspended=false;
|
|
||||||
std::string realMacAddress;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SubscriberDeviceList {
|
|
||||||
std::vector<SubscriberDevice> subscriberDevices;
|
|
||||||
|
|
||||||
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 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 Poco::JSON::Object::Ptr &O, const SecurityObjects::UserInfo &U, ObjectInfo &I);
|
||||||
bool CreateObjectInfo(const SecurityObjects::UserInfo &U, ObjectInfo &I);
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "PortalLogin", PortalLogin_);
|
field_from_json(Obj, "PortalLogin", PortalLogin_);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: AclTemplate" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -113,8 +112,6 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"userMustChangePassword",userMustChangePassword);
|
field_to_json(Obj,"userMustChangePassword",userMustChangePassword);
|
||||||
field_to_json(Obj,"errorCode", errorCode);
|
field_to_json(Obj,"errorCode", errorCode);
|
||||||
Obj.set("aclTemplate",AclTemplateObj);
|
Obj.set("aclTemplate",AclTemplateObj);
|
||||||
field_to_json(Obj,"errorCode", errorCode);
|
|
||||||
field_to_json(Obj,"lastRefresh", lastRefresh_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WebToken::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool WebToken::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -131,10 +128,9 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "created", created_);
|
field_from_json(Obj, "created", created_);
|
||||||
field_from_json(Obj, "username", username_);
|
field_from_json(Obj, "username", username_);
|
||||||
field_from_json(Obj, "userMustChangePassword",userMustChangePassword);
|
field_from_json(Obj, "userMustChangePassword",userMustChangePassword);
|
||||||
field_from_json(Obj,"lastRefresh", lastRefresh_);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: WebToken" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -145,14 +141,14 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"primary", primary);
|
field_to_json(Obj,"primary", primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MobilePhoneNumber::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool MobilePhoneNumber::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"number",number);
|
field_from_json(Obj,"number",number);
|
||||||
field_from_json(Obj,"verified",verified);
|
field_from_json(Obj,"verified",verified);
|
||||||
field_from_json(Obj,"primary",primary);
|
field_from_json(Obj,"primary",primary);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: MobilePhoneNumber" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -162,13 +158,13 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"method", method);
|
field_to_json(Obj,"method", method);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MfaAuthInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool MfaAuthInfo::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"enabled",enabled);
|
field_from_json(Obj,"enabled",enabled);
|
||||||
field_from_json(Obj,"method",method);
|
field_from_json(Obj,"method",method);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: MfaAuthInfo" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -179,14 +175,14 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj, "authenticatorSecret", authenticatorSecret);
|
field_to_json(Obj, "authenticatorSecret", authenticatorSecret);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UserLoginLoginExtensions::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool UserLoginLoginExtensions::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj, "mobiles",mobiles);
|
field_from_json(Obj,"mobiles",mobiles);
|
||||||
field_from_json(Obj, "mfa",mfa);
|
field_from_json(Obj,"mfa",mfa);
|
||||||
field_from_json(Obj, "authenticatorSecret", authenticatorSecret);
|
field_from_json(Obj, "authenticatorSecret", authenticatorSecret);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: UserLoginLoginExtensions" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -198,7 +194,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj, "method", method);
|
field_to_json(Obj, "method", method);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MFAChallengeRequest::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool MFAChallengeRequest::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"uuid",uuid);
|
field_from_json(Obj,"uuid",uuid);
|
||||||
field_from_json(Obj,"question",question);
|
field_from_json(Obj,"question",question);
|
||||||
@@ -206,7 +202,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"method",method);
|
field_from_json(Obj,"method",method);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: MFAChallengeRequest" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -214,15 +210,16 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
void MFAChallengeResponse::to_json(Poco::JSON::Object &Obj) const {
|
void MFAChallengeResponse::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj, "uuid", uuid);
|
field_to_json(Obj, "uuid", uuid);
|
||||||
field_to_json(Obj, "answer", answer);
|
field_to_json(Obj, "answer", answer);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MFAChallengeResponse::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool MFAChallengeResponse::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"uuid",uuid);
|
field_from_json(Obj,"uuid",uuid);
|
||||||
field_from_json(Obj,"answer",answer);
|
field_from_json(Obj,"answer",answer);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: MFAChallengeResponse" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -260,7 +257,6 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"oauthType",oauthType);
|
field_to_json(Obj,"oauthType",oauthType);
|
||||||
field_to_json(Obj,"oauthUserInfo",oauthUserInfo);
|
field_to_json(Obj,"oauthUserInfo",oauthUserInfo);
|
||||||
field_to_json(Obj,"modified",modified);
|
field_to_json(Obj,"modified",modified);
|
||||||
field_to_json(Obj,"signingUp",signingUp);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
bool UserInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool UserInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -296,28 +292,13 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"oauthType",oauthType);
|
field_from_json(Obj,"oauthType",oauthType);
|
||||||
field_from_json(Obj,"oauthUserInfo",oauthUserInfo);
|
field_from_json(Obj,"oauthUserInfo",oauthUserInfo);
|
||||||
field_from_json(Obj,"modified",modified);
|
field_from_json(Obj,"modified",modified);
|
||||||
field_from_json(Obj,"signingUp",signingUp);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (const Poco::Exception &E) {
|
} catch (const Poco::Exception &E) {
|
||||||
std::cout << "Cannot parse: UserInfo" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
void UserInfoList::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj,"users",users);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UserInfoList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj,"users",users);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
std::cout << "Cannot parse: InternalServiceInfo" << std::endl;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void InternalServiceInfo::to_json(Poco::JSON::Object &Obj) const {
|
void InternalServiceInfo::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj,"privateURI",privateURI);
|
field_to_json(Obj,"privateURI",privateURI);
|
||||||
field_to_json(Obj,"publicURI",publicURI);
|
field_to_json(Obj,"publicURI",publicURI);
|
||||||
@@ -331,7 +312,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"token",token);
|
field_from_json(Obj,"token",token);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: InternalServiceInfo" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -349,7 +330,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "services", services);
|
field_from_json(Obj, "services", services);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: InternalSystemServices" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -371,7 +352,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "authenticationType", authenticationType);
|
field_from_json(Obj, "authenticationType", authenticationType);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: SystemEndpoint" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -385,7 +366,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "endpoints", endpoints);
|
field_from_json(Obj, "endpoints", endpoints);
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
std::cout << "Cannot parse: SystemEndpointList" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -404,7 +385,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj, "userInfo", userinfo);
|
field_from_json(Obj, "userInfo", userinfo);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: UserInfoAndPolicy" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -415,14 +396,14 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"note", note);
|
field_to_json(Obj,"note", note);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NoteInfo::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool NoteInfo::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"created",created);
|
field_from_json(Obj,"created",created);
|
||||||
field_from_json(Obj,"createdBy",createdBy);
|
field_from_json(Obj,"createdBy",createdBy);
|
||||||
field_from_json(Obj,"note", note);
|
field_from_json(Obj,"note",note);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: NoteInfo" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -433,20 +414,20 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
SecurityObjects::NoteInfoVec NIV;
|
SecurityObjects::NoteInfoVec NIV;
|
||||||
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(Obj->get("notes").toString());
|
NIV = RESTAPI_utils::to_object_array<SecurityObjects::NoteInfo>(Obj->get("notes").toString());
|
||||||
for(auto const &i:NIV) {
|
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)std::time(nullptr), .createdBy=UInfo.email, .note=i.note};
|
||||||
Notes.push_back(ii);
|
Notes.push_back(ii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: MergeNotes" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes) {
|
bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes) {
|
||||||
for(auto const &i:NewNotes) {
|
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)std::time(nullptr), .createdBy=UInfo.email, .note=i.note};
|
||||||
ExistingNotes.push_back(ii);
|
ExistingNotes.push_back(ii);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -457,13 +438,13 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json<ResourceAccessType>(Obj,"access", access, ResourceAccessTypeToString);
|
field_to_json<ResourceAccessType>(Obj,"access", access, ResourceAccessTypeToString);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ProfileAction::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool ProfileAction::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"resource",resource);
|
field_from_json(Obj,"resource",resource);
|
||||||
field_from_json<ResourceAccessType>(Obj,"access",access,ResourceAccessTypeFromString );
|
field_from_json<ResourceAccessType>(Obj,"access",access,ResourceAccessTypeFromString );
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: ProfileAction" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -477,7 +458,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"notes", notes);
|
field_to_json(Obj,"notes", notes);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SecurityProfile::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool SecurityProfile::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"id",id);
|
field_from_json(Obj,"id",id);
|
||||||
field_from_json(Obj,"name",name);
|
field_from_json(Obj,"name",name);
|
||||||
@@ -487,7 +468,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"notes",notes);
|
field_from_json(Obj,"notes",notes);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: SecurityProfile" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -496,12 +477,12 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj, "profiles", profiles);
|
field_to_json(Obj, "profiles", profiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SecurityProfileList::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool SecurityProfileList::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"profiles",profiles);
|
field_from_json(Obj,"profiles",profiles);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: SecurityProfileList" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -522,7 +503,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"userAction",userAction);
|
field_to_json(Obj,"userAction",userAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ActionLink::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool ActionLink::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"id",id);
|
field_from_json(Obj,"id",id);
|
||||||
field_from_json(Obj,"action",action);
|
field_from_json(Obj,"action",action);
|
||||||
@@ -539,7 +520,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"userAction",userAction);
|
field_from_json(Obj,"userAction",userAction);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: ActionLink" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -550,14 +531,14 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"data",data);
|
field_to_json(Obj,"data",data);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Preferences::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Preferences::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"id",id);
|
field_from_json(Obj,"id",id);
|
||||||
field_from_json(Obj,"modified",modified);
|
field_from_json(Obj,"modified",modified);
|
||||||
field_from_json(Obj,"data",data);
|
field_from_json(Obj,"data",data);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: Preferences" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -569,7 +550,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"email",email);
|
field_to_json(Obj,"email",email);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SubMfaConfig::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool SubMfaConfig::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"id",id);
|
field_from_json(Obj,"id",id);
|
||||||
field_from_json(Obj,"type",type);
|
field_from_json(Obj,"type",type);
|
||||||
@@ -577,7 +558,7 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"email",email);
|
field_from_json(Obj,"email",email);
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: SubMfaConfig" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -591,10 +572,9 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_to_json(Obj,"expires",expires);
|
field_to_json(Obj,"expires",expires);
|
||||||
field_to_json(Obj,"idleTimeout",idleTimeout);
|
field_to_json(Obj,"idleTimeout",idleTimeout);
|
||||||
field_to_json(Obj,"revocationDate",revocationDate);
|
field_to_json(Obj,"revocationDate",revocationDate);
|
||||||
field_to_json(Obj,"lastRefresh", lastRefresh);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Token::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Token::from_json(Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj,"token",token);
|
field_from_json(Obj,"token",token);
|
||||||
field_from_json(Obj,"refreshToken",refreshToken);
|
field_from_json(Obj,"refreshToken",refreshToken);
|
||||||
@@ -604,10 +584,9 @@ namespace OpenWifi::SecurityObjects {
|
|||||||
field_from_json(Obj,"expires",expires);
|
field_from_json(Obj,"expires",expires);
|
||||||
field_from_json(Obj,"idleTimeout",idleTimeout);
|
field_from_json(Obj,"idleTimeout",idleTimeout);
|
||||||
field_from_json(Obj,"revocationDate",revocationDate);
|
field_from_json(Obj,"revocationDate",revocationDate);
|
||||||
field_from_json(Obj,"lastRefresh", lastRefresh);
|
|
||||||
return true;
|
return true;
|
||||||
} catch(...) {
|
} catch(...) {
|
||||||
std::cout << "Cannot parse: Token" << std::endl;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,14 +9,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <type_traits>
|
|
||||||
#include "framework/OpenWifiTypes.h"
|
#include "framework/OpenWifiTypes.h"
|
||||||
#include "Poco/JSON/Object.h"
|
#include "Poco/JSON/Object.h"
|
||||||
#include "Poco/Data/LOB.h"
|
#include "Poco/Data/LOB.h"
|
||||||
#include "Poco/Data/LOBStream.h"
|
#include "Poco/Data/LOBStream.h"
|
||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
uint64_t Now();
|
|
||||||
namespace SecurityObjects {
|
namespace SecurityObjects {
|
||||||
|
|
||||||
typedef std::string USER_ID_TYPE;
|
typedef std::string USER_ID_TYPE;
|
||||||
@@ -28,13 +26,8 @@ namespace OpenWifi {
|
|||||||
bool Delete_ = true;
|
bool Delete_ = true;
|
||||||
bool PortalLogin_ = true;
|
bool PortalLogin_ = true;
|
||||||
|
|
||||||
AclTemplate() noexcept = default;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj); };
|
||||||
};
|
|
||||||
|
|
||||||
static_assert( std::is_nothrow_move_constructible_v<AclTemplate> );
|
|
||||||
|
|
||||||
struct WebToken {
|
struct WebToken {
|
||||||
std::string access_token_;
|
std::string access_token_;
|
||||||
@@ -48,7 +41,6 @@ namespace OpenWifi {
|
|||||||
uint64_t idle_timeout_=0;
|
uint64_t idle_timeout_=0;
|
||||||
AclTemplate acl_template_;
|
AclTemplate acl_template_;
|
||||||
uint64_t created_=0;
|
uint64_t created_=0;
|
||||||
uint64_t lastRefresh_=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -62,12 +54,11 @@ namespace OpenWifi {
|
|||||||
std::string UserTypeToString(USER_ROLE U);
|
std::string UserTypeToString(USER_ROLE U);
|
||||||
|
|
||||||
struct NoteInfo {
|
struct NoteInfo {
|
||||||
uint64_t created=0; // = OpenWifi::Now();
|
uint64_t created = std::time(nullptr);
|
||||||
std::string createdBy;
|
std::string createdBy;
|
||||||
std::string note;
|
std::string note;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<NoteInfo> NoteInfoVec;
|
typedef std::vector<NoteInfo> NoteInfoVec;
|
||||||
|
|
||||||
@@ -77,7 +68,7 @@ namespace OpenWifi {
|
|||||||
bool primary = false;
|
bool primary = false;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MfaAuthInfo {
|
struct MfaAuthInfo {
|
||||||
@@ -85,7 +76,7 @@ namespace OpenWifi {
|
|||||||
std::string method;
|
std::string method;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UserLoginLoginExtensions {
|
struct UserLoginLoginExtensions {
|
||||||
@@ -94,17 +85,17 @@ namespace OpenWifi {
|
|||||||
std::string authenticatorSecret;
|
std::string authenticatorSecret;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MFAChallengeRequest {
|
struct MFAChallengeRequest {
|
||||||
std::string uuid;
|
std::string uuid;
|
||||||
std::string question;
|
std::string question;
|
||||||
std::string method;
|
std::string method;
|
||||||
uint64_t created = OpenWifi::Now();
|
uint64_t created = std::time(nullptr);
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MFAChallengeResponse {
|
struct MFAChallengeResponse {
|
||||||
@@ -112,7 +103,7 @@ namespace OpenWifi {
|
|||||||
std::string answer;
|
std::string answer;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UserInfo {
|
struct UserInfo {
|
||||||
@@ -147,20 +138,12 @@ namespace OpenWifi {
|
|||||||
std::string oauthType;
|
std::string oauthType;
|
||||||
std::string oauthUserInfo;
|
std::string oauthUserInfo;
|
||||||
uint64_t modified;
|
uint64_t modified;
|
||||||
std::string signingUp;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<UserInfo> UserInfoVec;
|
typedef std::vector<UserInfo> UserInfoVec;
|
||||||
|
|
||||||
struct UserInfoList {
|
|
||||||
std::vector<UserInfo> users;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
// bool append_from_json(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes);
|
// bool append_from_json(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes);
|
||||||
bool MergeNotes(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes);
|
bool MergeNotes(Poco::JSON::Object::Ptr Obj, const UserInfo &UInfo, NoteInfoVec & Notes);
|
||||||
bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes);
|
bool MergeNotes(const NoteInfoVec & NewNotes, const UserInfo &UInfo, NoteInfoVec & ExistingNotes);
|
||||||
@@ -224,7 +207,7 @@ namespace OpenWifi {
|
|||||||
std::string resource;
|
std::string resource;
|
||||||
ResourceAccessType access;
|
ResourceAccessType access;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<ProfileAction> ProfileActionVec;
|
typedef std::vector<ProfileAction> ProfileActionVec;
|
||||||
|
|
||||||
@@ -236,22 +219,21 @@ namespace OpenWifi {
|
|||||||
std::string role;
|
std::string role;
|
||||||
NoteInfoVec notes;
|
NoteInfoVec notes;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
typedef std::vector<SecurityProfile> SecurityProfileVec;
|
typedef std::vector<SecurityProfile> SecurityProfileVec;
|
||||||
|
|
||||||
struct SecurityProfileList {
|
struct SecurityProfileList {
|
||||||
SecurityProfileVec profiles;
|
SecurityProfileVec profiles;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum LinkActions {
|
enum LinkActions {
|
||||||
FORGOT_PASSWORD=1,
|
FORGOT_PASSWORD=1,
|
||||||
VERIFY_EMAIL,
|
VERIFY_EMAIL,
|
||||||
SUB_FORGOT_PASSWORD,
|
SUB_FORGOT_PASSWORD,
|
||||||
SUB_VERIFY_EMAIL,
|
SUB_VERIFY_EMAIL
|
||||||
SUB_SIGNUP
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ActionLink {
|
struct ActionLink {
|
||||||
@@ -263,14 +245,14 @@ namespace OpenWifi {
|
|||||||
std::string locale;
|
std::string locale;
|
||||||
std::string message;
|
std::string message;
|
||||||
uint64_t sent=0;
|
uint64_t sent=0;
|
||||||
uint64_t created=OpenWifi::Now();
|
uint64_t created=std::time(nullptr);
|
||||||
uint64_t expires=0;
|
uint64_t expires=0;
|
||||||
uint64_t completed=0;
|
uint64_t completed=0;
|
||||||
uint64_t canceled=0;
|
uint64_t canceled=0;
|
||||||
bool userAction=true;
|
bool userAction=true;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Preferences {
|
struct Preferences {
|
||||||
@@ -278,7 +260,7 @@ namespace OpenWifi {
|
|||||||
uint64_t modified;
|
uint64_t modified;
|
||||||
Types::StringPairVec data;
|
Types::StringPairVec data;
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SubMfaConfig {
|
struct SubMfaConfig {
|
||||||
@@ -288,7 +270,7 @@ namespace OpenWifi {
|
|||||||
std::string email;
|
std::string email;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Token {
|
struct Token {
|
||||||
@@ -300,10 +282,9 @@ namespace OpenWifi {
|
|||||||
uint64_t expires=0;
|
uint64_t expires=0;
|
||||||
uint64_t idleTimeout=0;
|
uint64_t idleTimeout=0;
|
||||||
uint64_t revocationDate=0;
|
uint64_t revocationDate=0;
|
||||||
uint64_t lastRefresh=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Avatar {
|
struct Avatar {
|
||||||
@@ -311,7 +292,7 @@ namespace OpenWifi {
|
|||||||
std::string type;
|
std::string type;
|
||||||
uint64_t created=0;
|
uint64_t created=0;
|
||||||
std::string name;
|
std::string name;
|
||||||
Poco::Data::BLOB avatar;
|
Poco::Data::LOB<char> avatar;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct LoginRecordInfo {
|
struct LoginRecordInfo {
|
||||||
|
|||||||
@@ -280,7 +280,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_to_json(Obj, "ipv6", ipv6);
|
field_to_json(Obj, "ipv6", ipv6);
|
||||||
field_to_json(Obj, "tx", tx);
|
field_to_json(Obj, "tx", tx);
|
||||||
field_to_json(Obj, "rx", rx);
|
field_to_json(Obj, "rx", rx);
|
||||||
field_to_json(Obj, "manufacturer", manufacturer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Association::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Association::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -294,7 +293,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_from_json(Obj, "ipv6", ipv6);
|
field_from_json(Obj, "ipv6", ipv6);
|
||||||
field_from_json(Obj, "tx", tx);
|
field_from_json(Obj, "tx", tx);
|
||||||
field_from_json(Obj, "rx", rx);
|
field_from_json(Obj, "rx", rx);
|
||||||
field_from_json(Obj, "manufacturer", manufacturer);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
@@ -326,7 +324,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_to_json(Obj, "ipv6", ipv6);
|
field_to_json(Obj, "ipv6", ipv6);
|
||||||
field_to_json(Obj, "tx", tx);
|
field_to_json(Obj, "tx", tx);
|
||||||
field_to_json(Obj, "rx", rx);
|
field_to_json(Obj, "rx", rx);
|
||||||
field_to_json(Obj, "manufacturer", manufacturer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Client::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool Client::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -338,7 +335,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_from_json(Obj, "ipv6", ipv6);
|
field_from_json(Obj, "ipv6", ipv6);
|
||||||
field_from_json(Obj, "tx", tx);
|
field_from_json(Obj, "tx", tx);
|
||||||
field_from_json(Obj, "rx", rx);
|
field_from_json(Obj, "rx", rx);
|
||||||
field_from_json(Obj, "manufacturer", manufacturer);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
@@ -437,8 +433,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_to_json(Obj, "rates", rates);
|
field_to_json(Obj, "rates", rates);
|
||||||
field_to_json(Obj, "he", he);
|
field_to_json(Obj, "he", he);
|
||||||
field_to_json(Obj, "rawInfo", rawInfo);
|
field_to_json(Obj, "rawInfo", rawInfo);
|
||||||
field_to_json(Obj, "allowDFS", allowDFS);
|
|
||||||
field_to_json(Obj, "mimo", mimo);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RadioInformation::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool RadioInformation::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
@@ -458,8 +452,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_from_json(Obj, "rates", rates);
|
field_from_json(Obj, "rates", rates);
|
||||||
field_from_json(Obj, "he", he);
|
field_from_json(Obj, "he", he);
|
||||||
field_from_json(Obj, "rawInfo", rawInfo);
|
field_from_json(Obj, "rawInfo", rawInfo);
|
||||||
field_from_json(Obj, "allowDFS", allowDFS);
|
|
||||||
field_from_json(Obj, "mimo", mimo);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
@@ -469,7 +461,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
void AccessPoint::to_json(Poco::JSON::Object &Obj) const {
|
void AccessPoint::to_json(Poco::JSON::Object &Obj) const {
|
||||||
field_to_json(Obj, "id", id);
|
field_to_json(Obj, "id", id);
|
||||||
field_to_json(Obj, "macAddress", macAddress);
|
field_to_json(Obj, "macAddress", macAddress);
|
||||||
field_to_json(Obj, "serialNumber", serialNumber);
|
|
||||||
field_to_json(Obj, "name", name);
|
field_to_json(Obj, "name", name);
|
||||||
field_to_json(Obj, "deviceType", deviceType);
|
field_to_json(Obj, "deviceType", deviceType);
|
||||||
field_to_json(Obj, "subscriberDevices", subscriberDevices);
|
field_to_json(Obj, "subscriberDevices", subscriberDevices);
|
||||||
@@ -482,19 +473,12 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_to_json(Obj, "radios", radios);
|
field_to_json(Obj, "radios", radios);
|
||||||
field_to_json(Obj, "automaticUpgrade", automaticUpgrade);
|
field_to_json(Obj, "automaticUpgrade", automaticUpgrade);
|
||||||
field_to_json(Obj, "configurationUUID", configurationUUID);
|
field_to_json(Obj, "configurationUUID", configurationUUID);
|
||||||
field_to_json(Obj, "currentFirmware", currentFirmware);
|
|
||||||
field_to_json(Obj, "currentFirmwareDate", currentFirmwareDate);
|
|
||||||
field_to_json(Obj, "latestFirmware", latestFirmware);
|
|
||||||
field_to_json(Obj, "latestFirmwareDate", latestFirmwareDate);
|
|
||||||
field_to_json(Obj, "newFirmwareAvailable", newFirmwareAvailable);
|
|
||||||
field_to_json(Obj, "latestFirmwareURI", latestFirmwareURI);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AccessPoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
bool AccessPoint::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
||||||
try {
|
try {
|
||||||
field_from_json(Obj, "id", id);
|
field_from_json(Obj, "id", id);
|
||||||
field_from_json(Obj, "macAddress", macAddress);
|
field_from_json(Obj, "macAddress", macAddress);
|
||||||
field_from_json(Obj, "serialNumber", serialNumber);
|
|
||||||
field_from_json(Obj, "name", name);
|
field_from_json(Obj, "name", name);
|
||||||
field_from_json(Obj, "deviceType", deviceType);
|
field_from_json(Obj, "deviceType", deviceType);
|
||||||
field_from_json(Obj, "subscriberDevices", subscriberDevices);
|
field_from_json(Obj, "subscriberDevices", subscriberDevices);
|
||||||
@@ -507,12 +491,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
field_from_json(Obj, "radios", radios);
|
field_from_json(Obj, "radios", radios);
|
||||||
field_from_json(Obj, "automaticUpgrade", automaticUpgrade);
|
field_from_json(Obj, "automaticUpgrade", automaticUpgrade);
|
||||||
field_from_json(Obj, "configurationUUID", configurationUUID);
|
field_from_json(Obj, "configurationUUID", configurationUUID);
|
||||||
field_from_json(Obj, "currentFirmware", currentFirmware);
|
|
||||||
field_from_json(Obj, "currentFirmwareDate", currentFirmwareDate);
|
|
||||||
field_from_json(Obj, "latestFirmware", latestFirmware);
|
|
||||||
field_from_json(Obj, "latestFirmwareDate", latestFirmwareDate);
|
|
||||||
field_from_json(Obj, "newFirmwareAvailable", newFirmwareAvailable);
|
|
||||||
field_from_json(Obj, "latestFirmwareURI", latestFirmwareURI);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
@@ -566,38 +544,4 @@ namespace OpenWifi::SubObjects {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatsEntry::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "timestamp", timestamp);
|
|
||||||
field_to_json(Obj, "tx", tx);
|
|
||||||
field_to_json(Obj, "rx", rx);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool StatsEntry::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj, "timestamp", timestamp);
|
|
||||||
field_from_json(Obj, "tx", tx);
|
|
||||||
field_from_json(Obj, "rx", rx);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void StatsBlock::to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
field_to_json(Obj, "modified", modified);
|
|
||||||
field_to_json(Obj, "external", external);
|
|
||||||
field_to_json(Obj, "internal", internal);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool StatsBlock::from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
field_from_json(Obj, "modified", modified);
|
|
||||||
field_from_json(Obj, "external", external);
|
|
||||||
field_from_json(Obj, "internal", internal);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
int subnetMaskV6=0;
|
int subnetMaskV6=0;
|
||||||
std::string startIPV6;
|
std::string startIPV6;
|
||||||
std::string endIPV6;
|
std::string endIPV6;
|
||||||
std::string leaseTime;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -157,7 +156,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
std::string ipv6;
|
std::string ipv6;
|
||||||
uint64_t tx=0;
|
uint64_t tx=0;
|
||||||
uint64_t rx=0;
|
uint64_t rx=0;
|
||||||
std::string manufacturer;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -180,7 +178,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
std::string ipv6;
|
std::string ipv6;
|
||||||
uint64_t tx=0;
|
uint64_t tx=0;
|
||||||
uint64_t rx=0;
|
uint64_t rx=0;
|
||||||
std::string manufacturer;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -241,8 +238,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
uint64_t maximumClients = 64;
|
uint64_t maximumClients = 64;
|
||||||
RadioRates rates;
|
RadioRates rates;
|
||||||
RadioHE he;
|
RadioHE he;
|
||||||
bool allowDFS=false;
|
|
||||||
std::string mimo;
|
|
||||||
std::vector<std::string> rawInfo;
|
std::vector<std::string> rawInfo;
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
@@ -252,7 +247,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
struct AccessPoint {
|
struct AccessPoint {
|
||||||
std::string id;
|
std::string id;
|
||||||
std::string macAddress;
|
std::string macAddress;
|
||||||
std::string serialNumber;
|
|
||||||
std::string name;
|
std::string name;
|
||||||
std::string deviceType;
|
std::string deviceType;
|
||||||
SubscriberDeviceList subscriberDevices;
|
SubscriberDeviceList subscriberDevices;
|
||||||
@@ -265,12 +259,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
std::vector<RadioInformation> radios;
|
std::vector<RadioInformation> radios;
|
||||||
bool automaticUpgrade = true;
|
bool automaticUpgrade = true;
|
||||||
std::string configurationUUID;
|
std::string configurationUUID;
|
||||||
std::string currentFirmware;
|
|
||||||
uint64_t currentFirmwareDate;
|
|
||||||
std::string latestFirmware;
|
|
||||||
uint64_t latestFirmwareDate;
|
|
||||||
bool newFirmwareAvailable;
|
|
||||||
std::string latestFirmwareURI;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
@@ -300,23 +288,6 @@ namespace OpenWifi::SubObjects {
|
|||||||
void to_json(Poco::JSON::Object &Obj) const;
|
void to_json(Poco::JSON::Object &Obj) const;
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct StatsEntry {
|
|
||||||
uint64_t timestamp=0;
|
|
||||||
uint64_t tx=0;
|
|
||||||
uint64_t rx=0;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct StatsBlock {
|
|
||||||
uint64_t modified=0;
|
|
||||||
std::vector<StatsEntry> external, internal;
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //OWSUB_RESTAPI_SUBOBJECTS_H
|
#endif //OWSUB_RESTAPI_SUBOBJECTS_H
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
namespace OpenWifi::SDK::GW {
|
namespace OpenWifi::SDK::GW {
|
||||||
|
|
||||||
bool SendFirmwareUpgradeCommand( const std::string & serialNumber, const std::string & URI, [[maybe_unused]] uint64_t When ) {
|
bool SendFirmwareUpgradeCommand( const std::string & serialNumber, const std::string & URI, uint64_t When ) {
|
||||||
Types::StringPairVec QueryData;
|
Types::StringPairVec QueryData;
|
||||||
Poco::JSON::Object Body;
|
Poco::JSON::Object Body;
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,9 @@
|
|||||||
|
|
||||||
namespace OpenWifi {
|
namespace OpenWifi {
|
||||||
|
|
||||||
static const std::string GitUCentralJSONSchemaFile{
|
static const std::string GitUCentralJSONSchemaFile{"https://raw.githubusercontent.com/blogic/ucentral-schema/main/ucentral.schema.json"};
|
||||||
"https://raw.githubusercontent.com/blogic/ucentral-schema/main/ucentral.schema.json"};
|
|
||||||
|
|
||||||
static json DefaultUCentralSchema = R"(
|
|
||||||
|
|
||||||
|
static json DefaultUCentralSchema = R"(
|
||||||
{
|
{
|
||||||
"$id": "https://openwrt.org/ucentral.schema.json",
|
"$id": "https://openwrt.org/ucentral.schema.json",
|
||||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
@@ -77,10 +75,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"name": {
|
"name": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"hostname": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "hostname"
|
|
||||||
},
|
|
||||||
"location": {
|
"location": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -107,14 +101,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
"CS0",
|
|
||||||
"CS1",
|
"CS1",
|
||||||
"CS2",
|
"CS2",
|
||||||
"CS3",
|
"CS3",
|
||||||
"CS4",
|
"CS4",
|
||||||
"CS5",
|
"CS5",
|
||||||
"CS6",
|
"CS6",
|
||||||
"CS7",
|
|
||||||
"AF11",
|
"AF11",
|
||||||
"AF12",
|
"AF12",
|
||||||
"AF13",
|
"AF13",
|
||||||
@@ -128,15 +120,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"AF42",
|
"AF42",
|
||||||
"AF43",
|
"AF43",
|
||||||
"DF",
|
"DF",
|
||||||
"EF",
|
"EF"
|
||||||
"VA",
|
|
||||||
"LE"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globals.wireless-multimedia.table": {
|
"globals.wireless-multimedia": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
"properties": {
|
||||||
"UP0": {
|
"UP0": {
|
||||||
"$ref": "#/$defs/globals.wireless-multimedia.class-selector"
|
"$ref": "#/$defs/globals.wireless-multimedia.class-selector"
|
||||||
@@ -164,19 +153,11 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"globals.wireless-multimedia.profile": {
|
"globals.wireless-multimedia-profile": {
|
||||||
"type": "object",
|
|
||||||
"additionalProperties": false,
|
|
||||||
"properties": {
|
|
||||||
"profile": {
|
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
"enterprise",
|
"enterprise"
|
||||||
"rfc8325",
|
|
||||||
"3gpp"
|
|
||||||
]
|
]
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"globals": {
|
"globals": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@@ -196,11 +177,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"wireless-multimedia": {
|
"wireless-multimedia": {
|
||||||
"anyOf": [{
|
"oneOf": [
|
||||||
"$ref": "#/$defs/globals.wireless-multimedia.table"
|
{
|
||||||
|
"$ref": "#/$defs/globals.wireless-multimedia"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"$ref": "#/$defs/globals.wireless-multimedia.profile"
|
"$ref": "#/$defs/globals.wireless-multimedia-profile"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -390,9 +372,10 @@ static json DefaultUCentralSchema = R"(
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"channel": {
|
"channel": {
|
||||||
"oneOf": [{
|
"oneOf": [
|
||||||
|
{
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"maximum": 196,
|
"maximum": 171,
|
||||||
"minimum": 1
|
"minimum": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -401,14 +384,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"valid-channels": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"type": "integer",
|
|
||||||
"maximum": 196,
|
|
||||||
"minimum": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"country": {
|
"country": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"maxLength": 2,
|
"maxLength": 2,
|
||||||
@@ -417,10 +392,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"US"
|
"US"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"allow-dfs": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": true
|
|
||||||
},
|
|
||||||
"channel-mode": {
|
"channel-mode": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
@@ -519,17 +490,17 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"maximum": 4050
|
"maximum": 4050
|
||||||
},
|
},
|
||||||
"proto": {
|
"proto": {
|
||||||
"decription": "The L2 vlan tag that shall be added (1q,1ad ) ",
|
"decription": "The L2 vlan tag that shall be added (1q,1ad) ",
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"enum": [
|
"enum": [
|
||||||
"802.1ad",
|
"802.1ad",
|
||||||
"802.1q"
|
"802.1q"
|
||||||
],
|
],
|
||||||
"default": "802.1q"
|
"default": "802.1q"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface.bridge": {
|
"interface.bridge": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"mtu": {
|
"mtu": {
|
||||||
@@ -670,47 +641,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface.ipv4.port-forward": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"protocol": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"tcp",
|
|
||||||
"udp",
|
|
||||||
"any"
|
|
||||||
],
|
|
||||||
"default": "any"
|
|
||||||
},
|
|
||||||
"external-port": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
},
|
|
||||||
"internal-address": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "ipv4",
|
|
||||||
"example": "0.0.0.120"
|
|
||||||
},
|
|
||||||
"internal-port": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"external-port",
|
|
||||||
"internal-address"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"interface.ipv4": {
|
"interface.ipv4": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -764,12 +694,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"items": {
|
"items": {
|
||||||
"$ref": "#/$defs/interface.ipv4.dhcp-lease"
|
"$ref": "#/$defs/interface.ipv4.dhcp-lease"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
"port-forward": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/$defs/interface.ipv4.port-forward"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -799,96 +723,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface.ipv6.port-forward": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"protocol": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"tcp",
|
|
||||||
"udp",
|
|
||||||
"any"
|
|
||||||
],
|
|
||||||
"default": "any"
|
|
||||||
},
|
|
||||||
"external-port": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
},
|
|
||||||
"internal-address": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "ipv6",
|
|
||||||
"example": "::1234:abcd"
|
|
||||||
},
|
|
||||||
"internal-port": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"external-port",
|
|
||||||
"internal-address"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"interface.ipv6.traffic-allow": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"protocol": {
|
|
||||||
"type": "string",
|
|
||||||
"default": "any"
|
|
||||||
},
|
|
||||||
"source-address": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uc-cidr6",
|
|
||||||
"example": "2001:db8:1234:abcd::/64",
|
|
||||||
"default": "::/0"
|
|
||||||
},
|
|
||||||
"source-ports": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"destination-address": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "ipv6",
|
|
||||||
"example": "::1000"
|
|
||||||
},
|
|
||||||
"destination-ports": {
|
|
||||||
"type": "array",
|
|
||||||
"minItems": 1,
|
|
||||||
"items": {
|
|
||||||
"type": [
|
|
||||||
"integer",
|
|
||||||
"string"
|
|
||||||
],
|
|
||||||
"minimum": 0,
|
|
||||||
"maximum": 65535,
|
|
||||||
"format": "uc-portrange"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"required": [
|
|
||||||
"destination-address"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"interface.ipv6": {
|
"interface.ipv6": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -920,18 +754,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
},
|
},
|
||||||
"dhcpv6": {
|
"dhcpv6": {
|
||||||
"$ref": "#/$defs/interface.ipv6.dhcpv6"
|
"$ref": "#/$defs/interface.ipv6.dhcpv6"
|
||||||
},
|
|
||||||
"port-forward": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/$defs/interface.ipv6.port-forward"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"traffic-allow": {
|
|
||||||
"type": "array",
|
|
||||||
"items": {
|
|
||||||
"$ref": "#/$defs/interface.ipv6.traffic-allow"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -999,7 +821,8 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface.broad-band": {
|
"interface.broad-band": {
|
||||||
"oneOf": [{
|
"oneOf": [
|
||||||
|
{
|
||||||
"$ref": "#/$defs/interface.broad-band.wwan"
|
"$ref": "#/$defs/interface.broad-band.wwan"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1016,7 +839,7 @@ static json DefaultUCentralSchema = R"(
|
|||||||
},
|
},
|
||||||
"gateway-fqdn": {
|
"gateway-fqdn": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uc-fqdn",
|
"format": "fqdn",
|
||||||
"default": "ucentral.splash"
|
"default": "ucentral.splash"
|
||||||
},
|
},
|
||||||
"max-clients": {
|
"max-clients": {
|
||||||
@@ -1051,7 +874,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"psk",
|
"psk",
|
||||||
"psk2",
|
"psk2",
|
||||||
"psk-mixed",
|
"psk-mixed",
|
||||||
"psk2-radius",
|
|
||||||
"wpa",
|
"wpa",
|
||||||
"wpa2",
|
"wpa2",
|
||||||
"wpa-mixed",
|
"wpa-mixed",
|
||||||
@@ -1112,10 +934,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
"reduced-neighbor-reporting": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
},
|
|
||||||
"lci": {
|
"lci": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -1256,7 +1074,8 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"minimum": 1
|
"minimum": 1
|
||||||
},
|
},
|
||||||
"value": {
|
"value": {
|
||||||
"anyOf": [{
|
"anyOf": [
|
||||||
|
{
|
||||||
"type": "integer",
|
"type": "integer",
|
||||||
"maximum": 4294967295,
|
"maximum": 4294967295,
|
||||||
"minimum": 0
|
"minimum": 0
|
||||||
@@ -1267,7 +1086,8 @@ static json DefaultUCentralSchema = R"(
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"examples": [{
|
"examples": [
|
||||||
|
{
|
||||||
"id": 27,
|
"id": 27,
|
||||||
"value": 900
|
"value": 900
|
||||||
},
|
},
|
||||||
@@ -1304,49 +1124,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"local": {
|
"local": {
|
||||||
"$ref": "#/$defs/interface.ssid.radius.local"
|
"$ref": "#/$defs/interface.ssid.radius.local"
|
||||||
},
|
},
|
||||||
"dynamic-authorization": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"host": {
|
|
||||||
"type": "string",
|
|
||||||
"format": "uc-ip",
|
|
||||||
"examples": [
|
|
||||||
"192.168.1.10"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"port": {
|
|
||||||
"type": "integer",
|
|
||||||
"maximum": 65535,
|
|
||||||
"minimum": 1024,
|
|
||||||
"examples": [
|
|
||||||
1812
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"secret": {
|
|
||||||
"type": "string",
|
|
||||||
"examples": [
|
|
||||||
"secret"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"authentication": {
|
"authentication": {
|
||||||
"allOf": [{
|
|
||||||
"$ref": "#/$defs/interface.ssid.radius.server"
|
"$ref": "#/$defs/interface.ssid.radius.server"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"mac-filter": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"accounting": {
|
"accounting": {
|
||||||
"allOf": [{
|
"allOf": [
|
||||||
|
{
|
||||||
"$ref": "#/$defs/interface.ssid.radius.server"
|
"$ref": "#/$defs/interface.ssid.radius.server"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -1549,13 +1332,15 @@ static json DefaultUCentralSchema = R"(
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"examples": [{
|
"examples": [
|
||||||
|
{
|
||||||
"width": 32,
|
"width": 32,
|
||||||
"height": 32,
|
"height": 32,
|
||||||
"type": "image/png",
|
"type": "image/png",
|
||||||
"language": "eng",
|
"language": "eng",
|
||||||
"icon": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
|
"icon": "R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7"
|
||||||
}]
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wan-metrics": {
|
"wan-metrics": {
|
||||||
@@ -1682,11 +1467,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"decription": "This option allows embedding custom vendor specific IEs inside the beacons of a BSS in AP mode.",
|
"decription": "This option allows embedding custom vendor specific IEs inside the beacons of a BSS in AP mode.",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"fils-discovery-interval": {
|
|
||||||
"type": "integer",
|
|
||||||
"default": 20,
|
|
||||||
"maximum": 10000
|
|
||||||
},
|
|
||||||
"encryption": {
|
"encryption": {
|
||||||
"$ref": "#/$defs/interface.ssid.encryption"
|
"$ref": "#/$defs/interface.ssid.encryption"
|
||||||
},
|
},
|
||||||
@@ -1801,7 +1581,8 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"interface.tunnel": {
|
"interface.tunnel": {
|
||||||
"oneOf": [{
|
"oneOf": [
|
||||||
|
{
|
||||||
"$ref": "#/$defs/interface.tunnel.mesh"
|
"$ref": "#/$defs/interface.tunnel.mesh"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -2007,11 +1788,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"type": "integer",
|
"type": "integer",
|
||||||
"minimum": 32,
|
"minimum": 32,
|
||||||
"default": 1000
|
"default": 1000
|
||||||
},
|
|
||||||
"priority": {
|
|
||||||
"type": "integer",
|
|
||||||
"minimum": 0,
|
|
||||||
"default": 7
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2158,7 +1934,7 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"properties": {
|
"properties": {
|
||||||
"controller": {
|
"controller": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uc-ip",
|
"format": "ip",
|
||||||
"example": "192.168.10.1"
|
"example": "192.168.10.1"
|
||||||
},
|
},
|
||||||
"datapath-description": {
|
"datapath-description": {
|
||||||
@@ -2175,11 +1951,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
],
|
],
|
||||||
"default": "ssl"
|
"default": "ssl"
|
||||||
},
|
},
|
||||||
"port": {
|
|
||||||
"type": "integer",
|
|
||||||
"maximum": 65535,
|
|
||||||
"default": 6653
|
|
||||||
},
|
|
||||||
"ca-certificate": {
|
"ca-certificate": {
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
@@ -2247,42 +2018,9 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"auto-channel": {
|
"auto-channel": {
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
|
||||||
"ipv6": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"service.quality-of-service.class-selector": {
|
|
||||||
"type": "string",
|
|
||||||
"enum": [
|
|
||||||
"CS0",
|
|
||||||
"CS1",
|
|
||||||
"CS2",
|
|
||||||
"CS3",
|
|
||||||
"CS4",
|
|
||||||
"CS5",
|
|
||||||
"CS6",
|
|
||||||
"CS7",
|
|
||||||
"AF11",
|
|
||||||
"AF12",
|
|
||||||
"AF13",
|
|
||||||
"AF21",
|
|
||||||
"AF22",
|
|
||||||
"AF23",
|
|
||||||
"AF31",
|
|
||||||
"AF32",
|
|
||||||
"AF33",
|
|
||||||
"AF41",
|
|
||||||
"AF42",
|
|
||||||
"AF43",
|
|
||||||
"DF",
|
|
||||||
"EF",
|
|
||||||
"VA",
|
|
||||||
"LE"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"service.quality-of-service": {
|
"service.quality-of-service": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
@@ -2301,26 +2039,23 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"type": "integer",
|
"type": "integer",
|
||||||
"default": 0
|
"default": 0
|
||||||
},
|
},
|
||||||
"bulk-detection": {
|
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"dscp": {
|
|
||||||
"$ref": "#/$defs/service.quality-of-service.class-selector",
|
|
||||||
"default": "CS0"
|
|
||||||
},
|
|
||||||
"packets-per-second": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"classifier": {
|
"classifier": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"dscp": {
|
"dscp": {
|
||||||
"$ref": "#/$defs/service.quality-of-service.class-selector",
|
"type": "string",
|
||||||
|
"enum": [
|
||||||
|
"CS0",
|
||||||
|
"CS1",
|
||||||
|
"CS2",
|
||||||
|
"CS3",
|
||||||
|
"CS4",
|
||||||
|
"CS5",
|
||||||
|
"CS6",
|
||||||
|
"CS7"
|
||||||
|
],
|
||||||
"default": "CS1"
|
"default": "CS1"
|
||||||
},
|
},
|
||||||
"ports": {
|
"ports": {
|
||||||
@@ -2348,25 +2083,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"default": true
|
"default": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"dns": {
|
"dns": {
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": {
|
"items": {
|
||||||
"type": "object",
|
|
||||||
"properties": {
|
|
||||||
"fqdn": {
|
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uc-fqdn"
|
"format": "fqdn"
|
||||||
},
|
|
||||||
"suffix-matching": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": true
|
|
||||||
},
|
|
||||||
"reclassify": {
|
|
||||||
"type": "boolean",
|
|
||||||
"default": true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2389,36 +2111,21 @@ static json DefaultUCentralSchema = R"(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"service.airtime-fairness": {
|
"service.airtime-policies": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
"voice-weight": {
|
"dns-match": {
|
||||||
"type": "number",
|
"type": "array",
|
||||||
"default": 4
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"examples": [
|
||||||
|
"*.voice.example.com"
|
||||||
|
]
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"packet-threshold": {
|
"dns-weight": {
|
||||||
"type": "number",
|
"type": "integer",
|
||||||
"default": 100
|
|
||||||
},
|
|
||||||
"bulk-threshold": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 50
|
|
||||||
},
|
|
||||||
"priority-threshold": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 30
|
|
||||||
},
|
|
||||||
"weight-normal": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 256
|
"default": 256
|
||||||
},
|
|
||||||
"weight-priority": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 394
|
|
||||||
},
|
|
||||||
"weight-bulk": {
|
|
||||||
"type": "number",
|
|
||||||
"default": 128
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2473,8 +2180,8 @@ static json DefaultUCentralSchema = R"(
|
|||||||
"facebook-wifi": {
|
"facebook-wifi": {
|
||||||
"$ref": "#/$defs/service.facebook-wifi"
|
"$ref": "#/$defs/service.facebook-wifi"
|
||||||
},
|
},
|
||||||
"airtime-fairness": {
|
"airtime-policies": {
|
||||||
"$ref": "#/$defs/service.airtime-fairness"
|
"$ref": "#/$defs/service.airtime-policies"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2605,37 +2312,21 @@ static json DefaultUCentralSchema = R"(
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)"_json;
|
}
|
||||||
|
}
|
||||||
|
)"_json;
|
||||||
|
|
||||||
class custom_error_handler : public nlohmann::json_schema::basic_error_handler
|
class ConfigurationValidator *ConfigurationValidator::instance_ = nullptr;
|
||||||
{
|
|
||||||
void error(const nlohmann::json_pointer<nlohmann::basic_json<>> &pointer, const json &instance,
|
|
||||||
const std::string &message) override
|
|
||||||
{
|
|
||||||
nlohmann::json_schema::basic_error_handler::error(pointer, instance, message);
|
|
||||||
std::cout << "ERROR: '" << pointer << "' - '" << instance << "': " << message << "\n";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void ConfigurationValidator::Init() {
|
void ConfigurationValidator::Init() {
|
||||||
if(Initialized_)
|
if(Initialized_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
std::string GitSchema;
|
std::string GitSchema;
|
||||||
if(MicroService::instance().ConfigGetBool("ucentral.datamodel.internal",true)) {
|
|
||||||
RootSchema_ = DefaultUCentralSchema;
|
|
||||||
Logger().information("Using uCentral validation from built-in default.");
|
|
||||||
Initialized_ = Working_ = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
auto GitURI = MicroService::instance().ConfigGetString("ucentral.datamodel.uri",GitUCentralJSONSchemaFile);
|
if(Utils::wgets(GitUCentralJSONSchemaFile, GitSchema)) {
|
||||||
if(Utils::wgets(GitURI, GitSchema)) {
|
auto schema = json::parse(GitSchema);
|
||||||
RootSchema_ = json::parse(GitSchema);
|
Validator_->set_root_schema(schema);
|
||||||
Logger().information("Using uCentral validation schema from GIT.");
|
Logger().information("Using uCentral validation schema from GIT.");
|
||||||
} else {
|
} else {
|
||||||
std::string FileName{ MicroService::instance().DataDir() + "/ucentral.schema.json" };
|
std::string FileName{ MicroService::instance().DataDir() + "/ucentral.schema.json" };
|
||||||
@@ -2643,11 +2334,12 @@ static json DefaultUCentralSchema = R"(
|
|||||||
std::stringstream schema_file;
|
std::stringstream schema_file;
|
||||||
schema_file << input.rdbuf();
|
schema_file << input.rdbuf();
|
||||||
input.close();
|
input.close();
|
||||||
RootSchema_ = json::parse(schema_file.str());
|
auto schema = json::parse(schema_file.str());
|
||||||
|
Validator_->set_root_schema(schema);
|
||||||
Logger().information("Using uCentral validation schema from local file.");
|
Logger().information("Using uCentral validation schema from local file.");
|
||||||
}
|
}
|
||||||
} catch (const Poco::Exception &E) {
|
} catch (const Poco::Exception &E) {
|
||||||
RootSchema_ = DefaultUCentralSchema;
|
Validator_->set_root_schema(DefaultUCentralSchema);
|
||||||
Logger().information("Using uCentral validation from built-in default.");
|
Logger().information("Using uCentral validation from built-in default.");
|
||||||
}
|
}
|
||||||
Initialized_ = Working_ = true;
|
Initialized_ = Working_ = true;
|
||||||
@@ -2700,17 +2392,6 @@ static json DefaultUCentralSchema = R"(
|
|||||||
return IsCIDRv4(value) || IsCIDRv6(value);
|
return IsCIDRv4(value) || IsCIDRv6(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool IsPortRangeIsValid(const std::string &r) {
|
|
||||||
const auto ports = Poco::StringTokenizer("-",r,Poco::StringTokenizer::TOK_TRIM);
|
|
||||||
|
|
||||||
for(const auto &port:ports) {
|
|
||||||
uint32_t port_num = std::stoul(port);
|
|
||||||
if(port_num==0 || port_num>65535)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ConfigurationValidator::my_format_checker(const std::string &format, const std::string &value)
|
void ConfigurationValidator::my_format_checker(const std::string &format, const std::string &value)
|
||||||
{
|
{
|
||||||
static const std::regex host_regex{"^(?=.{1,254}$)((?=[a-z0-9-]{1,63}\\.)(xn--+)?[a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,63}$"};
|
static const std::regex host_regex{"^(?=.{1,254}$)((?=[a-z0-9-]{1,63}\\.)(xn--+)?[a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,63}$"};
|
||||||
@@ -2733,7 +2414,7 @@ static json DefaultUCentralSchema = R"(
|
|||||||
} else if(format == "uc-mac") {
|
} else if(format == "uc-mac") {
|
||||||
if(std::regex_match(value,mac_regex))
|
if(std::regex_match(value,mac_regex))
|
||||||
return;
|
return;
|
||||||
throw std::invalid_argument(value + " is not a valid MAC: should be something like 11:22:33:44:55:66");
|
throw std::invalid_argument(value + " is not a valid MAC: should be something like 2e60:3500::/64.");
|
||||||
} else if(format == "uc-timeout") {
|
} else if(format == "uc-timeout") {
|
||||||
if(std::regex_match(value,uc_timeout_regex))
|
if(std::regex_match(value,uc_timeout_regex))
|
||||||
return;
|
return;
|
||||||
@@ -2761,20 +2442,16 @@ static json DefaultUCentralSchema = R"(
|
|||||||
} catch (...) {
|
} catch (...) {
|
||||||
}
|
}
|
||||||
throw std::invalid_argument(value + " is not a valid URI: should be something like https://hello.world.com.");
|
throw std::invalid_argument(value + " is not a valid URI: should be something like https://hello.world.com.");
|
||||||
} else if(format == "uc-portrange") {
|
|
||||||
try {
|
|
||||||
if(IsPortRangeIsValid(value))
|
|
||||||
return;
|
|
||||||
throw std::invalid_argument(value + " is not a valid port range: should an integer between 1-65535 or a port range like post-port.");
|
|
||||||
} catch (...) {
|
|
||||||
}
|
|
||||||
throw std::invalid_argument(value + " is not a valid port range: should an integer between 1-65535 or a port range like post-port.");
|
|
||||||
} else if(format == "ip") {
|
} else if(format == "ip") {
|
||||||
if (IsIP(value))
|
if (IsIP(value))
|
||||||
return;
|
return;
|
||||||
throw std::invalid_argument(value + " is not a valid IP address.");
|
throw std::invalid_argument(value + " is not a valid IP address.");
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
nlohmann::json_schema::default_string_format_check(format,value);
|
nlohmann::json_schema::default_string_format_check(format,value);
|
||||||
|
} catch (const std::logic_error &E) {
|
||||||
|
std::string Error{"JSON Schema validation: "};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2782,31 +2459,18 @@ static json DefaultUCentralSchema = R"(
|
|||||||
if(Working_) {
|
if(Working_) {
|
||||||
try {
|
try {
|
||||||
auto Doc = json::parse(C);
|
auto Doc = json::parse(C);
|
||||||
custom_error_handler CE;
|
Validator_->validate(Doc);
|
||||||
json_validator Validator(nullptr, my_format_checker);
|
|
||||||
Validator.set_root_schema(RootSchema_);
|
|
||||||
Validator.validate(Doc,CE);
|
|
||||||
return true;
|
return true;
|
||||||
} catch (const std::invalid_argument &E) {
|
|
||||||
std::cout << "1 Validation failed, here is why: " << E.what() << "\n";
|
|
||||||
Error = E.what();
|
|
||||||
return false;
|
|
||||||
} catch (const std::logic_error &E) {
|
|
||||||
std::cout << "2 Validation failed, here is why: " << E.what() << "\n";
|
|
||||||
Error = E.what();
|
|
||||||
return false;
|
|
||||||
} catch(const std::exception &E) {
|
} catch(const std::exception &E) {
|
||||||
Error = E.what();
|
Error = E.what();
|
||||||
std::cout << "3 Validation failed, here is why: " << E.what() << "\n";
|
std::cout << "Validation failed, here is why: " << E.what() << "\n";
|
||||||
return false;
|
return false;
|
||||||
} catch(...) {
|
|
||||||
std::cout << "4 Some kind of bullshit exception..." << std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigurationValidator::reinitialize([[maybe_unused]] Poco::Util::Application &self) {
|
void ConfigurationValidator::reinitialize(Poco::Util::Application &self) {
|
||||||
Logger().information("Reinitializing.");
|
Logger().information("Reinitializing.");
|
||||||
Working_ = Initialized_ = false;
|
Working_ = Initialized_ = false;
|
||||||
Init();
|
Init();
|
||||||
|
|||||||
@@ -14,8 +14,9 @@ namespace OpenWifi {
|
|||||||
class ConfigurationValidator : public SubSystemServer {
|
class ConfigurationValidator : public SubSystemServer {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
static auto instance() {
|
static ConfigurationValidator *instance() {
|
||||||
static auto instance_ = new ConfigurationValidator;
|
if(instance_== nullptr)
|
||||||
|
instance_ = new ConfigurationValidator;
|
||||||
return instance_;
|
return instance_;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -26,17 +27,18 @@ namespace OpenWifi {
|
|||||||
void reinitialize(Poco::Util::Application &self) override;
|
void reinitialize(Poco::Util::Application &self) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static ConfigurationValidator * instance_;
|
||||||
bool Initialized_=false;
|
bool Initialized_=false;
|
||||||
bool Working_=false;
|
bool Working_=false;
|
||||||
void Init();
|
void Init();
|
||||||
nlohmann::json RootSchema_;
|
std::unique_ptr<json_validator> Validator_=std::make_unique<json_validator>(nullptr, my_format_checker);
|
||||||
|
|
||||||
ConfigurationValidator():
|
ConfigurationValidator():
|
||||||
SubSystemServer("configvalidator", "CFG-VALIDATOR", "config.validator") {
|
SubSystemServer("configvalidator", "CFG-VALIDATOR", "config.validator") {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
inline auto ConfigurationValidator() { return ConfigurationValidator::instance(); }
|
inline ConfigurationValidator * ConfigurationValidator() { return ConfigurationValidator::instance(); }
|
||||||
inline bool ValidateUCentralConfiguration(const std::string &C, std::string &Error) { return ConfigurationValidator::instance()->Validate(C, Error); }
|
inline bool ValidateUCentralConfiguration(const std::string &C, std::string &Error) { return ConfigurationValidator::instance()->Validate(C, Error); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ namespace OpenWifi::KafkaTopics {
|
|||||||
static const std::string SERVICE_EVENTS{"service_events"};
|
static const std::string SERVICE_EVENTS{"service_events"};
|
||||||
static const std::string DEVICE_EVENT_QUEUE{"device_event_queue"};
|
static const std::string DEVICE_EVENT_QUEUE{"device_event_queue"};
|
||||||
static const std::string DEVICE_TELEMETRY{"device_telemetry"};
|
static const std::string DEVICE_TELEMETRY{"device_telemetry"};
|
||||||
static const std::string PROVISIONING_CHANGE{"provisioning_change"};
|
|
||||||
|
|
||||||
namespace ServiceEvents {
|
namespace ServiceEvents {
|
||||||
static const std::string EVENT_JOIN{"join"};
|
static const std::string EVENT_JOIN{"join"};
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
68
src/framework/RESTAPI_errors.h
Normal file
68
src/framework/RESTAPI_errors.h
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
//
|
||||||
|
// Created by stephane bourque on 2021-09-12.
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace OpenWifi::RESTAPI::Errors {
|
||||||
|
static const std::string MissingUUID{"Missing UUID."};
|
||||||
|
static const std::string MissingSerialNumber{"Missing Serial Number."};
|
||||||
|
static const std::string InternalError{"Internal error. Please try later."};
|
||||||
|
static const std::string InvalidJSONDocument{"Invalid JSON document."};
|
||||||
|
static const std::string UnsupportedHTTPMethod{"Unsupported HTTP Method"};
|
||||||
|
static const std::string StillInUse{"Element still in use."};
|
||||||
|
static const std::string CouldNotBeDeleted{"Element could not be deleted."};
|
||||||
|
static const std::string NameMustBeSet{"The name property must be set."};
|
||||||
|
static const std::string ConfigBlockInvalid{"Configuration block type invalid."};
|
||||||
|
static const std::string UnknownId{"Unknown UUID."};
|
||||||
|
static const std::string InvalidDeviceTypes{"Unknown or invalid device type(s)."};
|
||||||
|
static const std::string RecordNotCreated{"Record could not be created."};
|
||||||
|
static const std::string RecordNotUpdated{"Record could not be updated."};
|
||||||
|
static const std::string UnknownManagementPolicyUUID{"Unknown management policy UUID."};
|
||||||
|
static const std::string CannotDeleteRoot{"Root Entity cannot be removed, only modified."};
|
||||||
|
static const std::string MustCreateRootFirst{"Root entity must be created first."};
|
||||||
|
static const std::string ParentUUIDMustExist{"Parent UUID must exist."};
|
||||||
|
static const std::string ConfigurationMustExist{"Configuration must exist."};
|
||||||
|
static const std::string MissingOrInvalidParameters{"Invalid or missing parameters."};
|
||||||
|
static const std::string UnknownSerialNumber{"Unknown Serial Number."};
|
||||||
|
static const std::string InvalidSerialNumber{"Invalid Serial Number."};
|
||||||
|
static const std::string SerialNumberExists{"Serial Number already exists."};
|
||||||
|
static const std::string ValidNonRootUUID{"Must be a non-root, and valid UUID."};
|
||||||
|
static const std::string VenueMustExist{"Venue does not exist."};
|
||||||
|
static const std::string NotBoth{"You cannot specify both Entity and Venue"};
|
||||||
|
static const std::string EntityMustExist{"Entity must exist."};
|
||||||
|
static const std::string ParentOrEntityMustBeSet{"Parent or Entity must be set."};
|
||||||
|
static const std::string ContactMustExist{"Contact must exist."};
|
||||||
|
static const std::string LocationMustExist{"Location must exist."};
|
||||||
|
static const std::string OnlyWSSupported{"This endpoint only supports WebSocket."};
|
||||||
|
static const std::string SerialNumberMismatch{"Serial Number mismatch."};
|
||||||
|
static const std::string InvalidCommand{"Invalid command."};
|
||||||
|
static const std::string NoRecordsDeleted{"No records deleted."};
|
||||||
|
static const std::string DeviceNotConnected{"Device is not currently connected."};
|
||||||
|
static const std::string CannotCreateWS{"Telemetry system could not create WS endpoint. Please try again."};
|
||||||
|
static const std::string BothDeviceTypeRevision{"Both deviceType and revision must be set."};
|
||||||
|
static const std::string IdOrSerialEmpty{"SerialNumber and Id must not be empty."};
|
||||||
|
static const std::string MissingUserID{"Missing user ID."};
|
||||||
|
static const std::string IdMustBe0{"To create a user, you must set the ID to 0"};
|
||||||
|
static const std::string InvalidUserRole{"Invalid userRole."};
|
||||||
|
static const std::string InvalidEmailAddress{"Invalid email address."};
|
||||||
|
static const std::string PasswordRejected{"Password was rejected. This maybe an old password."};
|
||||||
|
static const std::string InvalidIPRanges{"Invalid IP range specifications."};
|
||||||
|
static const std::string InvalidLOrderBy{"Invalid orderBy specification."};
|
||||||
|
static const std::string NeedMobileNumber{"You must provide at least one validated phone number."};
|
||||||
|
static const std::string BadMFAMethod{"MFA only supports sms or email."};
|
||||||
|
static const std::string InvalidCredentials{"Invalid credentials (username/password)."};
|
||||||
|
static const std::string InvalidPassword{"Password does not conform to basic password rules."};
|
||||||
|
static const std::string UserPendingVerification{"User access denied pending email verification."};
|
||||||
|
static const std::string PasswordMustBeChanged{"Password must be changed."};
|
||||||
|
static const std::string UnrecognizedRequest{"Ill-formed request. Please consult documentation."};
|
||||||
|
static const std::string MissingAuthenticationInformation{"Missing authentication information."};
|
||||||
|
static const std::string InsufficientAccessRights{"Insufficient access rights to complete the operation."};
|
||||||
|
static const std::string ExpiredToken{"Token has expired, user must login."};
|
||||||
|
static const std::string SubscriberMustExist{"Subscriber must exist."};
|
||||||
|
static const std::string AuthenticatorVerificationIncomplete{"Authenticator validation is not complete."};
|
||||||
|
static const std::string SMSCouldNotBeSentRetry{"SMS could not be sent to validate device, try later or change the phone number."};
|
||||||
|
static const std::string SMSCouldNotValidate{"Code and number could not be validated"};
|
||||||
|
static const std::string InvalidDeviceClass{"Invalid device class. Must be: any, venue, entity, or subscriber"};
|
||||||
|
}
|
||||||
|
|
||||||
139
src/framework/RESTAPI_protocol.h
Normal file
139
src/framework/RESTAPI_protocol.h
Normal file
@@ -0,0 +1,139 @@
|
|||||||
|
//
|
||||||
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace OpenWifi::RESTAPI::Protocol {
|
||||||
|
static const char * CAPABILITIES = "capabilities";
|
||||||
|
static const char * LOGS = "logs";
|
||||||
|
static const char * HEALTHCHECKS = "healthchecks";
|
||||||
|
static const char * STATISTICS = "statistics";
|
||||||
|
static const char * STATUS = "status";
|
||||||
|
static const char * SERIALNUMBER = "serialNumber";
|
||||||
|
static const char * PERFORM = "perform";
|
||||||
|
static const char * CONFIGURE = "configure";
|
||||||
|
static const char * UPGRADE = "upgrade";
|
||||||
|
static const char * REBOOT = "reboot";
|
||||||
|
static const char * FACTORY = "factory";
|
||||||
|
static const char * LEDS = "leds";
|
||||||
|
static const char * TRACE = "trace";
|
||||||
|
static const char * REQUEST = "request";
|
||||||
|
static const char * WIFISCAN = "wifiscan";
|
||||||
|
static const char * EVENTQUEUE = "eventqueue";
|
||||||
|
static const char * RTTY = "rtty";
|
||||||
|
static const char * COMMAND = "command";
|
||||||
|
static const char * STARTDATE = "startDate";
|
||||||
|
static const char * ENDDATE = "endDate";
|
||||||
|
static const char * OFFSET = "offset";
|
||||||
|
static const char * LIMIT = "limit";
|
||||||
|
static const char * LIFETIME = "lifetime";
|
||||||
|
static const char * UUID = "UUID";
|
||||||
|
static const char * DATA = "data";
|
||||||
|
static const char * CONFIGURATION = "configuration";
|
||||||
|
static const char * WHEN = "when";
|
||||||
|
static const char * URI = "uri";
|
||||||
|
static const char * LOGTYPE = "logType";
|
||||||
|
static const char * VALUES = "values";
|
||||||
|
static const char * TYPES = "types";
|
||||||
|
static const char * PAYLOAD = "payload";
|
||||||
|
static const char * KEEPREDIRECTOR = "keepRedirector";
|
||||||
|
static const char * NETWORK = "network";
|
||||||
|
static const char * INTERFACE = "interface";
|
||||||
|
static const char * BANDS = "bands";
|
||||||
|
static const char * CHANNELS = "channels";
|
||||||
|
static const char * VERBOSE = "verbose";
|
||||||
|
static const char * MESSAGE = "message";
|
||||||
|
static const char * STATE = "state";
|
||||||
|
static const char * HEALTHCHECK = "healthcheck";
|
||||||
|
static const char * PCAP_FILE_TYPE = "pcap";
|
||||||
|
static const char * DURATION = "duration";
|
||||||
|
static const char * NUMBEROFPACKETS = "numberOfPackets";
|
||||||
|
static const char * FILTER = "filter";
|
||||||
|
static const char * SELECT = "select";
|
||||||
|
static const char * SERIALONLY = "serialOnly";
|
||||||
|
static const char * COUNTONLY = "countOnly";
|
||||||
|
static const char * DEVICEWITHSTATUS = "deviceWithStatus";
|
||||||
|
static const char * DEVICESWITHSTATUS = "devicesWithStatus";
|
||||||
|
static const char * DEVICES = "devices";
|
||||||
|
static const char * COUNT = "count";
|
||||||
|
static const char * SERIALNUMBERS = "serialNumbers";
|
||||||
|
static const char * CONFIGURATIONS = "configurations";
|
||||||
|
static const char * NAME = "name";
|
||||||
|
static const char * COMMANDS = "commands";
|
||||||
|
static const char * COMMANDUUID = "commandUUID";
|
||||||
|
static const char * FIRMWARES = "firmwares";
|
||||||
|
static const char * TOPIC = "topic";
|
||||||
|
static const char * HOST = "host";
|
||||||
|
static const char * OS = "os";
|
||||||
|
static const char * HOSTNAME = "hostname";
|
||||||
|
static const char * PROCESSORS = "processors";
|
||||||
|
static const char * REASON = "reason";
|
||||||
|
static const char * RELOAD = "reload";
|
||||||
|
static const char * SUBSYSTEMS = "subsystems";
|
||||||
|
static const char * FILEUUID = "uuid";
|
||||||
|
static const char * USERID = "userId";
|
||||||
|
static const char * PASSWORD = "password";
|
||||||
|
static const char * TOKEN = "token";
|
||||||
|
static const char * SETLOGLEVEL = "setloglevel";
|
||||||
|
static const char * GETLOGLEVELS = "getloglevels";
|
||||||
|
static const char * GETSUBSYSTEMNAMES = "getsubsystemnames";
|
||||||
|
static const char * GETLOGLEVELNAMES = "getloglevelnames";
|
||||||
|
static const char * STATS = "stats";
|
||||||
|
static const char * PING = "ping";
|
||||||
|
static const char * PARAMETERS = "parameters";
|
||||||
|
static const char * VALUE = "value";
|
||||||
|
static const char * LASTONLY = "lastOnly";
|
||||||
|
static const char * NEWEST = "newest";
|
||||||
|
static const char * ACTIVESCAN = "activeScan";
|
||||||
|
static const char * OVERRIDEDFS = "override_dfs";
|
||||||
|
static const char * LIST = "list";
|
||||||
|
static const char * TAG = "tag";
|
||||||
|
static const char * TAGLIST = "tagList";
|
||||||
|
static const char * DESCRIPTION = "description";
|
||||||
|
static const char * NOTES = "notes";
|
||||||
|
static const char * DEVICETYPE = "deviceType";
|
||||||
|
static const char * REVISION = "revision";
|
||||||
|
static const char * AGES = "ages";
|
||||||
|
static const char * REVISIONS = "revisions";
|
||||||
|
static const char * DEVICETYPES = "deviceTypes";
|
||||||
|
static const char * LATESTONLY = "latestOnly";
|
||||||
|
static const char * IDONLY = "idOnly";
|
||||||
|
static const char * REVISIONSET = "revisionSet";
|
||||||
|
static const char * DEVICESET = "deviceSet";
|
||||||
|
static const char * HISTORY = "history";
|
||||||
|
static const char * ID = "id";
|
||||||
|
static const char * VERSION = "version";
|
||||||
|
static const char * TIMES = "times";
|
||||||
|
static const char * UPTIME = "uptime";
|
||||||
|
static const char * START = "start";
|
||||||
|
|
||||||
|
static const char * NEWPASSWORD = "newPassword";
|
||||||
|
static const char * USERS = "users";
|
||||||
|
static const char * WITHEXTENDEDINFO = "withExtendedInfo";
|
||||||
|
|
||||||
|
static const char * ERRORTEXT = "errorText";
|
||||||
|
static const char * ERRORCODE = "errorCode";
|
||||||
|
static const char * AVATARID = "avatarId";
|
||||||
|
static const char * UNNAMED = "(unnamed)";
|
||||||
|
static const char * UNSPECIFIED = "(unspecified)";
|
||||||
|
static const char * CONTENTDISPOSITION = "Content-Disposition";
|
||||||
|
static const char * CONTENTTYPE = "Content-Type";
|
||||||
|
|
||||||
|
static const char * REQUIREMENTS = "requirements";
|
||||||
|
static const char * PASSWORDPATTERN = "passwordPattern";
|
||||||
|
static const char * ACCESSPOLICY = "accessPolicy";
|
||||||
|
static const char * PASSWORDPOLICY = "passwordPolicy";
|
||||||
|
static const char * FORGOTPASSWORD = "forgotPassword";
|
||||||
|
static const char * RESENDMFACODE = "resendMFACode";
|
||||||
|
static const char * COMPLETEMFACHALLENGE = "completeMFAChallenge";
|
||||||
|
static const char * ME = "me";
|
||||||
|
static const char * TELEMETRY = "telemetry";
|
||||||
|
static const char * INTERVAL = "interval";
|
||||||
|
static const char * UI = "UI";
|
||||||
|
|
||||||
|
}
|
||||||
@@ -51,14 +51,13 @@ namespace OpenWifi {
|
|||||||
Pool_->shutdown();
|
Pool_->shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
DBType Type() const { return dbType_; };
|
|
||||||
private:
|
private:
|
||||||
inline int Setup_SQLite();
|
inline int Setup_SQLite();
|
||||||
inline int Setup_MySQL();
|
inline int Setup_MySQL();
|
||||||
inline int Setup_PostgreSQL();
|
inline int Setup_PostgreSQL();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::unique_ptr<Poco::Data::SessionPool> Pool_;
|
Poco::SharedPtr<Poco::Data::SessionPool> Pool_;
|
||||||
Poco::Data::SQLite::Connector SQLiteConn_;
|
Poco::Data::SQLite::Connector SQLiteConn_;
|
||||||
Poco::Data::PostgreSQL::Connector PostgresConn_;
|
Poco::Data::PostgreSQL::Connector PostgresConn_;
|
||||||
Poco::Data::MySQL::Connector MySQLConn_;
|
Poco::Data::MySQL::Connector MySQLConn_;
|
||||||
@@ -74,22 +73,18 @@ namespace OpenWifi {
|
|||||||
Logger().notice("SQLite StorageClass enabled.");
|
Logger().notice("SQLite StorageClass enabled.");
|
||||||
dbType_ = sqlite;
|
dbType_ = sqlite;
|
||||||
auto DBName = MicroService::instance().DataDir() + "/" + MicroService::instance().ConfigGetString("storage.type.sqlite.db");
|
auto DBName = MicroService::instance().DataDir() + "/" + MicroService::instance().ConfigGetString("storage.type.sqlite.db");
|
||||||
int NumSessions = (int) MicroService::instance().ConfigGetInt("storage.type.sqlite.maxsessions", 64);
|
auto NumSessions = MicroService::instance().ConfigGetInt("storage.type.sqlite.maxsessions", 64);
|
||||||
int IdleTime = (int) MicroService::instance().ConfigGetInt("storage.type.sqlite.idletime", 60);
|
auto IdleTime = MicroService::instance().ConfigGetInt("storage.type.sqlite.idletime", 60);
|
||||||
|
SQLiteConn_.registerConnector();
|
||||||
Poco::Data::SQLite::Connector::registerConnector();
|
Pool_ = Poco::SharedPtr<Poco::Data::SessionPool>(new Poco::Data::SessionPool(SQLiteConn_.name(), DBName, 4, NumSessions, IdleTime));
|
||||||
// Pool_ = std::make_unique<Poco::Data::SessionPool>(new Poco::Data::SessionPool(SQLiteConn_.name(), DBName, 8,
|
|
||||||
// (int)NumSessions, (int)IdleTime));
|
|
||||||
Pool_ = std::make_unique<Poco::Data::SessionPool>(SQLiteConn_.name(), DBName, 8,
|
|
||||||
(int)NumSessions, (int)IdleTime);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int StorageClass::Setup_MySQL() {
|
inline int StorageClass::Setup_MySQL() {
|
||||||
Logger().notice("MySQL StorageClass enabled.");
|
Logger().notice("MySQL StorageClass enabled.");
|
||||||
dbType_ = mysql;
|
dbType_ = mysql;
|
||||||
int NumSessions = (int) MicroService::instance().ConfigGetInt("storage.type.mysql.maxsessions", 64);
|
auto NumSessions = MicroService::instance().ConfigGetInt("storage.type.mysql.maxsessions", 64);
|
||||||
int IdleTime = (int) MicroService::instance().ConfigGetInt("storage.type.mysql.idletime", 60);
|
auto IdleTime = MicroService::instance().ConfigGetInt("storage.type.mysql.idletime", 60);
|
||||||
auto Host = MicroService::instance().ConfigGetString("storage.type.mysql.host");
|
auto Host = MicroService::instance().ConfigGetString("storage.type.mysql.host");
|
||||||
auto Username = MicroService::instance().ConfigGetString("storage.type.mysql.username");
|
auto Username = MicroService::instance().ConfigGetString("storage.type.mysql.username");
|
||||||
auto Password = MicroService::instance().ConfigGetString("storage.type.mysql.password");
|
auto Password = MicroService::instance().ConfigGetString("storage.type.mysql.password");
|
||||||
@@ -104,8 +99,8 @@ namespace OpenWifi {
|
|||||||
";port=" + Port +
|
";port=" + Port +
|
||||||
";compress=true;auto-reconnect=true";
|
";compress=true;auto-reconnect=true";
|
||||||
|
|
||||||
Poco::Data::MySQL::Connector::registerConnector();
|
MySQLConn_.registerConnector();
|
||||||
Pool_ = std::make_unique<Poco::Data::SessionPool>(MySQLConn_.name(), ConnectionStr, 8, NumSessions, IdleTime);
|
Pool_ = Poco::SharedPtr<Poco::Data::SessionPool>(new Poco::Data::SessionPool(MySQLConn_.name(), ConnectionStr, 4, NumSessions, IdleTime));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -113,8 +108,8 @@ namespace OpenWifi {
|
|||||||
inline int StorageClass::Setup_PostgreSQL() {
|
inline int StorageClass::Setup_PostgreSQL() {
|
||||||
Logger().notice("PostgreSQL StorageClass enabled.");
|
Logger().notice("PostgreSQL StorageClass enabled.");
|
||||||
dbType_ = pgsql;
|
dbType_ = pgsql;
|
||||||
int NumSessions = (int) MicroService::instance().ConfigGetInt("storage.type.postgresql.maxsessions", 64);
|
auto NumSessions = MicroService::instance().ConfigGetInt("storage.type.postgresql.maxsessions", 64);
|
||||||
int IdleTime = (int) MicroService::instance().ConfigGetInt("storage.type.postgresql.idletime", 60);
|
auto IdleTime = MicroService::instance().ConfigGetInt("storage.type.postgresql.idletime", 60);
|
||||||
auto Host = MicroService::instance().ConfigGetString("storage.type.postgresql.host");
|
auto Host = MicroService::instance().ConfigGetString("storage.type.postgresql.host");
|
||||||
auto Username = MicroService::instance().ConfigGetString("storage.type.postgresql.username");
|
auto Username = MicroService::instance().ConfigGetString("storage.type.postgresql.username");
|
||||||
auto Password = MicroService::instance().ConfigGetString("storage.type.postgresql.password");
|
auto Password = MicroService::instance().ConfigGetString("storage.type.postgresql.password");
|
||||||
@@ -130,8 +125,8 @@ namespace OpenWifi {
|
|||||||
" port=" + Port +
|
" port=" + Port +
|
||||||
" connect_timeout=" + ConnectionTimeout;
|
" connect_timeout=" + ConnectionTimeout;
|
||||||
|
|
||||||
Poco::Data::PostgreSQL::Connector::registerConnector();
|
PostgresConn_.registerConnector();
|
||||||
Pool_ = std::make_unique<Poco::Data::SessionPool>(PostgresConn_.name(), ConnectionStr, 8, NumSessions, IdleTime);
|
Pool_ = Poco::SharedPtr<Poco::Data::SessionPool>(new Poco::Data::SessionPool(PostgresConn_.name(), ConnectionStr, 4, NumSessions, IdleTime));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,193 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-05-05.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "framework/MicroService.h"
|
|
||||||
|
|
||||||
namespace OpenWifi {
|
|
||||||
|
|
||||||
struct WebNotificationSingleDevice {
|
|
||||||
std::string serialNumber;
|
|
||||||
inline void to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"serialNumber", serialNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"serialNumber", serialNumber);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct WebNotificationSingleDeviceConfigurationChange {
|
|
||||||
std::string serialNumber;
|
|
||||||
uint64_t oldUUID;
|
|
||||||
uint64_t newUUID;
|
|
||||||
|
|
||||||
inline void to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"serialNumber", serialNumber);
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"oldUUID", oldUUID);
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"newUUID", newUUID);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"serialNumber", serialNumber);
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"oldUUID", oldUUID);
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"newUUID", newUUID);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct WebNotificationSingleDeviceFirmwareChange {
|
|
||||||
std::string serialNumber;
|
|
||||||
std::string newFirmware;
|
|
||||||
inline void to_json(Poco::JSON::Object &Obj) const {
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"serialNumber", serialNumber);
|
|
||||||
RESTAPI_utils::field_to_json(Obj,"newFirmware", newFirmware);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool from_json(const Poco::JSON::Object::Ptr &Obj) {
|
|
||||||
try {
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"serialNumber", serialNumber);
|
|
||||||
RESTAPI_utils::field_from_json(Obj,"newFirmware", newFirmware);
|
|
||||||
return true;
|
|
||||||
} catch (...) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationDeviceConfigurationChange(const std::string &SerialNumber, uint64_t oldUUID, uint64_t newUUID) {
|
|
||||||
WebSocketNotification<WebNotificationSingleDeviceConfigurationChange> N;
|
|
||||||
N.content.serialNumber = SerialNumber;
|
|
||||||
N.content.oldUUID = oldUUID;
|
|
||||||
N.content.newUUID = newUUID;
|
|
||||||
N.type = "device_configuration_upgrade";
|
|
||||||
WebSocketClientServer()->SendNotification(N);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationDeviceFirmwareUpdated(const std::string &SerialNumber, const std::string &Firmware) {
|
|
||||||
WebSocketNotification<WebNotificationSingleDeviceFirmwareChange> N;
|
|
||||||
N.content.serialNumber = SerialNumber;
|
|
||||||
N.content.newFirmware = Firmware;
|
|
||||||
N.type = "device_firmware_upgrade";
|
|
||||||
WebSocketClientServer()->SendNotification(N);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationDeviceConnected(const std::string &SerialNumber) {
|
|
||||||
WebSocketNotification<WebNotificationSingleDevice> N;
|
|
||||||
N.content.serialNumber = SerialNumber;
|
|
||||||
N.type = "device_connection";
|
|
||||||
WebSocketClientServer()->SendNotification(N);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationDeviceDisconnected(const std::string & SerialNumber) {
|
|
||||||
WebSocketNotification<WebNotificationSingleDevice> N;
|
|
||||||
N.content.serialNumber = SerialNumber;
|
|
||||||
N.type = "device_disconnection";
|
|
||||||
WebSocketClientServer()->SendNotification(N);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct WebSocketNotificationJobContent {
|
|
||||||
std::string title,
|
|
||||||
details,
|
|
||||||
jobId;
|
|
||||||
std::vector<std::string> success,
|
|
||||||
error,
|
|
||||||
warning;
|
|
||||||
uint64_t timeStamp=OpenWifi::Now();
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
inline void WebSocketNotificationJobContent::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);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool WebSocketNotificationJobContent::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;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef WebSocketNotification<WebSocketNotificationJobContent> WebSocketClientNotificationVenueUpdateJob_t;
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationVenueUpdateJobCompletionToUser( const std::string & User, WebSocketClientNotificationVenueUpdateJob_t &N) {
|
|
||||||
N.type = "venue_configuration_update";
|
|
||||||
WebSocketClientServer()->SendUserNotification(User,N);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct WebSocketNotificationRebootList {
|
|
||||||
std::string title,
|
|
||||||
details,
|
|
||||||
jobId;
|
|
||||||
std::vector<std::string> success,
|
|
||||||
warning;
|
|
||||||
uint64_t timeStamp=OpenWifi::Now();
|
|
||||||
|
|
||||||
void to_json(Poco::JSON::Object &Obj) const;
|
|
||||||
bool from_json(const Poco::JSON::Object::Ptr &Obj);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef WebSocketNotification<WebSocketNotificationRebootList> WebSocketClientNotificationVenueRebootList_t;
|
|
||||||
|
|
||||||
inline void WebSocketNotificationRebootList::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);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool WebSocketNotificationRebootList::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;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void WebSocketClientNotificationVenueRebootCompletionToUser( const std::string & User, WebSocketClientNotificationVenueRebootList_t &N) {
|
|
||||||
N.type = "venue_rebooter";
|
|
||||||
WebSocketClientServer()->SendUserNotification(User,N);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace OpenWifi
|
|
||||||
|
|
||||||
@@ -33,8 +33,7 @@ namespace ORM {
|
|||||||
FT_TEXT,
|
FT_TEXT,
|
||||||
FT_VARCHAR,
|
FT_VARCHAR,
|
||||||
FT_BLOB,
|
FT_BLOB,
|
||||||
FT_BOOLEAN,
|
FT_BOOLEAN
|
||||||
FT_REAL
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum Indextype {
|
enum Indextype {
|
||||||
@@ -109,13 +108,11 @@ namespace ORM {
|
|||||||
return "LONGBLOB";
|
return "LONGBLOB";
|
||||||
else if(Type==OpenWifi::DBType::pgsql)
|
else if(Type==OpenWifi::DBType::pgsql)
|
||||||
return "BYTEA";
|
return "BYTEA";
|
||||||
else
|
else if(Type==OpenWifi::DBType::sqlite)
|
||||||
return "BLOB";
|
return "BLOB";
|
||||||
case FT_REAL:
|
|
||||||
return "REAL";
|
|
||||||
default:
|
default:
|
||||||
assert(false);
|
assert(false);
|
||||||
|
return "";
|
||||||
}
|
}
|
||||||
assert(false);
|
assert(false);
|
||||||
return "";
|
return "";
|
||||||
@@ -124,12 +121,11 @@ namespace ORM {
|
|||||||
inline std::string Escape(const std::string &S) {
|
inline std::string Escape(const std::string &S) {
|
||||||
std::string R;
|
std::string R;
|
||||||
|
|
||||||
for(const auto &i:S) {
|
for(const auto &i:S)
|
||||||
if (i == '\'')
|
if(i=='\'')
|
||||||
R += "''";
|
R += "''";
|
||||||
else
|
else
|
||||||
R += i;
|
R += i;
|
||||||
}
|
|
||||||
return R;
|
return R;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,21 +151,13 @@ namespace ORM {
|
|||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string to_string(const Poco::Data::BLOB &blob) {
|
|
||||||
std::string result;
|
|
||||||
result.assign(blob.begin(),blob.end());
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline std::string to_string(const char * S) {
|
inline std::string to_string(const char * S) {
|
||||||
return S;
|
return S;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename RecordType> class DBCache {
|
template <typename RecordType> class DBCache {
|
||||||
public:
|
public:
|
||||||
DBCache(unsigned Size, unsigned Timeout) :
|
DBCache(unsigned Size, unsigned Timeout)
|
||||||
Size_(Size),
|
|
||||||
Timeout_(Timeout)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -178,8 +166,7 @@ namespace ORM {
|
|||||||
virtual void UpdateCache(const RecordType &R)=0;
|
virtual void UpdateCache(const RecordType &R)=0;
|
||||||
virtual void Delete(const std::string &FieldName, const std::string &Value)=0;
|
virtual void Delete(const std::string &FieldName, const std::string &Value)=0;
|
||||||
private:
|
private:
|
||||||
size_t Size_=0;
|
|
||||||
uint64_t Timeout_=0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename RecordTuple, typename RecordType> class DB {
|
template <typename RecordTuple, typename RecordType> class DB {
|
||||||
@@ -195,8 +182,8 @@ namespace ORM {
|
|||||||
Poco::Logger &L,
|
Poco::Logger &L,
|
||||||
const char *Prefix,
|
const char *Prefix,
|
||||||
DBCache<RecordType> * Cache=nullptr):
|
DBCache<RecordType> * Cache=nullptr):
|
||||||
TableName_(TableName),
|
|
||||||
Type_(dbtype),
|
Type_(dbtype),
|
||||||
|
TableName_(TableName),
|
||||||
Pool_(Pool),
|
Pool_(Pool),
|
||||||
Logger_(L),
|
Logger_(L),
|
||||||
Prefix_(Prefix),
|
Prefix_(Prefix),
|
||||||
@@ -208,8 +195,7 @@ namespace ORM {
|
|||||||
int Place=0;
|
int Place=0;
|
||||||
|
|
||||||
for(const auto &i:Fields) {
|
for(const auto &i:Fields) {
|
||||||
std::string FieldName = Poco::toLower(i.Name);
|
FieldNames_[i.Name] = Place;
|
||||||
FieldNames_[FieldName] = Place;
|
|
||||||
if(!first) {
|
if(!first) {
|
||||||
CreateFields_ += ", ";
|
CreateFields_ += ", ";
|
||||||
SelectFields_ += ", ";
|
SelectFields_ += ", ";
|
||||||
@@ -219,9 +205,9 @@ namespace ORM {
|
|||||||
SelectList_ += "(";
|
SelectList_ += "(";
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateFields_ += FieldName + " " + FieldTypeToChar(Type_, i.Type,i.Size) + (i.Index ? " unique primary key" : "");
|
CreateFields_ += i.Name + " " + FieldTypeToChar(Type_, i.Type,i.Size) + (i.Index ? " unique primary key" : "");
|
||||||
SelectFields_ += FieldName ;
|
SelectFields_ += i.Name ;
|
||||||
UpdateFields_ += FieldName + "=?";
|
UpdateFields_ += i.Name + "=?";
|
||||||
SelectList_ += "?";
|
SelectList_ += "?";
|
||||||
first = false;
|
first = false;
|
||||||
Place++;
|
Place++;
|
||||||
@@ -236,13 +222,12 @@ namespace ORM {
|
|||||||
IndexLine = std::string("CREATE INDEX IF NOT EXISTS ") + j.Name + std::string(" ON ") + TableName_+ " (";
|
IndexLine = std::string("CREATE INDEX IF NOT EXISTS ") + j.Name + std::string(" ON ") + TableName_+ " (";
|
||||||
bool first_entry=true;
|
bool first_entry=true;
|
||||||
for(const auto &k:j.Entries) {
|
for(const auto &k:j.Entries) {
|
||||||
auto IndexFieldName = Poco::toLower(k.FieldName);
|
assert(FieldNames_.find(k.FieldName) != FieldNames_.end());
|
||||||
assert(ValidFieldName(IndexFieldName));
|
|
||||||
if(!first_entry) {
|
if(!first_entry) {
|
||||||
IndexLine += " , ";
|
IndexLine += " , ";
|
||||||
}
|
}
|
||||||
first_entry = false;
|
first_entry = false;
|
||||||
IndexLine += IndexFieldName + std::string(" ") + std::string(k.Type == Indextype::ASC ? "ASC" : "DESC") ;
|
IndexLine += k.FieldName + std::string(" ") + std::string(k.Type == Indextype::ASC ? "ASC" : "DESC") ;
|
||||||
}
|
}
|
||||||
IndexLine += " )";
|
IndexLine += " )";
|
||||||
IndexCreation_.template emplace_back(IndexLine);
|
IndexCreation_.template emplace_back(IndexLine);
|
||||||
@@ -257,13 +242,12 @@ namespace ORM {
|
|||||||
IndexLine += " INDEX " + j.Name + " ( " ;
|
IndexLine += " INDEX " + j.Name + " ( " ;
|
||||||
bool first_entry=true;
|
bool first_entry=true;
|
||||||
for(const auto &k:j.Entries) {
|
for(const auto &k:j.Entries) {
|
||||||
auto IndexFieldName = Poco::toLower(k.FieldName);
|
assert(FieldNames_.find(k.FieldName) != FieldNames_.end());
|
||||||
assert(FieldNames_.find(IndexFieldName) != FieldNames_.end());
|
|
||||||
if(!first_entry) {
|
if(!first_entry) {
|
||||||
IndexLine += " ,";
|
IndexLine += " ,";
|
||||||
}
|
}
|
||||||
first_entry = false;
|
first_entry = false;
|
||||||
IndexLine += IndexFieldName + std::string(k.Type == Indextype::ASC ? " ASC" : " DESC");
|
IndexLine += k.FieldName + std::string(k.Type == Indextype::ASC ? " ASC" : " DESC");
|
||||||
}
|
}
|
||||||
IndexLine += " ) ";
|
IndexLine += " ) ";
|
||||||
}
|
}
|
||||||
@@ -278,27 +262,27 @@ namespace ORM {
|
|||||||
[[nodiscard]] const std::string & UpdateFields() const { return UpdateFields_; };
|
[[nodiscard]] const std::string & UpdateFields() const { return UpdateFields_; };
|
||||||
|
|
||||||
inline std::string OP(field_name_t F, SqlComparison O , bool V) {
|
inline std::string OP(field_name_t F, SqlComparison O , bool V) {
|
||||||
assert(ValidFieldName(F));
|
assert( FieldNames_.find(F) != FieldNames_.end() );
|
||||||
return std::string{"("} + F + SQLCOMPS[O] + (V ? "true" : "false") + ")" ;
|
return std::string{"("} + F + SQLCOMPS[O] + (V ? "true" : "false") + ")" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string OP(field_name_t F, SqlComparison O , int V) {
|
inline std::string OP(field_name_t F, SqlComparison O , int V) {
|
||||||
assert(ValidFieldName(F));
|
assert( FieldNames_.find(F) != FieldNames_.end() );
|
||||||
return std::string{"("} + F + SQLCOMPS[O] + std::to_string(V) + ")" ;
|
return std::string{"("} + F + SQLCOMPS[O] + std::to_string(V) + ")" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::string OP(field_name_t F, SqlComparison O , uint64_t V) {
|
inline std::string OP(field_name_t F, SqlComparison O , uint64_t V) {
|
||||||
assert(ValidFieldName(F));
|
assert( FieldNames_.find(F) != FieldNames_.end() );
|
||||||
return std::string{"("} + F + SQLCOMPS[O] + std::to_string(V) + ")" ;
|
return std::string{"("} + F + SQLCOMPS[O] + std::to_string(V) + ")" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string OP(field_name_t F, SqlComparison O , const std::string & V) {
|
std::string OP(field_name_t F, SqlComparison O , const std::string & V) {
|
||||||
assert(ValidFieldName(F));
|
assert( FieldNames_.find(F) != FieldNames_.end() );
|
||||||
return std::string{"("} + F + SQLCOMPS[O] + "'" + Escape(V) + "')" ;
|
return std::string{"("} + F + SQLCOMPS[O] + "'" + Escape(V) + "')" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string OP(field_name_t F, SqlComparison O , const char * V) {
|
std::string OP(field_name_t F, SqlComparison O , const char * V) {
|
||||||
assert(ValidFieldName(F));
|
assert( FieldNames_.find(F) != FieldNames_.end() );
|
||||||
return std::string{"("} + F + SQLCOMPS[O] + "'" + Escape(V) + "')" ;
|
return std::string{"("} + F + SQLCOMPS[O] + "'" + Escape(V) + "')" ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +290,7 @@ namespace ORM {
|
|||||||
return std::string("(")+P1 + BOPS[BOP] + P2 +")";
|
return std::string("(")+P1 + BOPS[BOP] + P2 +")";
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string OP( [[maybe_unused]] bool Paran, const std::string &P1, SqlBinaryOp BOP , const std::string &P2) {
|
std::string OP( bool Paran, const std::string &P1, SqlBinaryOp BOP , const std::string &P2) {
|
||||||
return P1 + BOPS[BOP] + P2 +")";
|
return P1 + BOPS[BOP] + P2 +")";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +404,7 @@ namespace ORM {
|
|||||||
|
|
||||||
template<typename T> bool GetRecord(field_name_t FieldName, const T & Value, RecordType & R) {
|
template<typename T> bool GetRecord(field_name_t FieldName, const T & Value, RecordType & R) {
|
||||||
try {
|
try {
|
||||||
assert(ValidFieldName(FieldName));
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
if(Cache_) {
|
if(Cache_) {
|
||||||
if(Cache_->GetFromCache(FieldName, Value, R))
|
if(Cache_->GetFromCache(FieldName, Value, R))
|
||||||
@@ -431,7 +415,7 @@ namespace ORM {
|
|||||||
Poco::Data::Statement Select(Session);
|
Poco::Data::Statement Select(Session);
|
||||||
RecordTuple RT;
|
RecordTuple RT;
|
||||||
|
|
||||||
std::string St = "select " + SelectFields_ + " from " + TableName_ + " where " + FieldName + "=?" + " limit 1";
|
std::string St = "select " + SelectFields_ + " from " + TableName_ + " where " + FieldName + "=?" ;
|
||||||
|
|
||||||
auto tValue{Value};
|
auto tValue{Value};
|
||||||
|
|
||||||
@@ -440,12 +424,13 @@ namespace ORM {
|
|||||||
Poco::Data::Keywords::use(tValue);
|
Poco::Data::Keywords::use(tValue);
|
||||||
Select.execute();
|
Select.execute();
|
||||||
|
|
||||||
if(Select.execute()==1) {
|
if(Select.rowsExtracted()==1) {
|
||||||
Convert(RT,R);
|
Convert(RT,R);
|
||||||
if(Cache_)
|
if(Cache_)
|
||||||
Cache_->UpdateCache(R);
|
Cache_->UpdateCache(R);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
} catch (const Poco::Exception &E) {
|
} catch (const Poco::Exception &E) {
|
||||||
Logger_.log(E);
|
Logger_.log(E);
|
||||||
}
|
}
|
||||||
@@ -458,7 +443,7 @@ namespace ORM {
|
|||||||
typename T0, typename T1> bool GR(field_name_t FieldName, T & R,T0 &V0, T1 &V1) {
|
typename T0, typename T1> bool GR(field_name_t FieldName, T & R,T0 &V0, T1 &V1) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
Poco::Data::Session Session = Pool_.get();
|
Poco::Data::Session Session = Pool_.get();
|
||||||
Poco::Data::Statement Select(Session);
|
Poco::Data::Statement Select(Session);
|
||||||
@@ -483,10 +468,8 @@ namespace ORM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
typedef std::vector<RecordTuple> RecordList;
|
typedef std::vector<RecordTuple> RecordList;
|
||||||
typedef std::vector<RecordType> RecordVec;
|
|
||||||
typedef RecordType RecordName;
|
|
||||||
|
|
||||||
bool GetRecords( uint64_t Offset, uint64_t HowMany, RecordVec & Records, const std::string & Where = "", const std::string & OrderBy = "") {
|
bool GetRecords( uint64_t Offset, uint64_t HowMany, std::vector<RecordType> & Records, const std::string & Where = "", const std::string & OrderBy = "") {
|
||||||
try {
|
try {
|
||||||
Poco::Data::Session Session = Pool_.get();
|
Poco::Data::Session Session = Pool_.get();
|
||||||
Poco::Data::Statement Select(Session);
|
Poco::Data::Statement Select(Session);
|
||||||
@@ -516,7 +499,7 @@ namespace ORM {
|
|||||||
|
|
||||||
template <typename T> bool UpdateRecord(field_name_t FieldName, const T & Value, const RecordType & R) {
|
template <typename T> bool UpdateRecord(field_name_t FieldName, const T & Value, const RecordType & R) {
|
||||||
try {
|
try {
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
Poco::Data::Session Session = Pool_.get();
|
Poco::Data::Session Session = Pool_.get();
|
||||||
Poco::Data::Statement Update(Session);
|
Poco::Data::Statement Update(Session);
|
||||||
@@ -541,21 +524,6 @@ namespace ORM {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool RunStatement(const std::string &St) {
|
|
||||||
try {
|
|
||||||
Poco::Data::Session Session = Pool_.get();
|
|
||||||
Poco::Data::Statement Command(Session);
|
|
||||||
|
|
||||||
Command << St ;
|
|
||||||
Command.execute();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
Logger_.log(E);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T> bool ReplaceRecord(field_name_t FieldName, const T & Value, RecordType & R) {
|
template <typename T> bool ReplaceRecord(field_name_t FieldName, const T & Value, RecordType & R) {
|
||||||
try {
|
try {
|
||||||
if(Exists(FieldName, Value)) {
|
if(Exists(FieldName, Value)) {
|
||||||
@@ -570,7 +538,7 @@ namespace ORM {
|
|||||||
|
|
||||||
template <typename T> bool GetNameAndDescription(field_name_t FieldName, const T & Value, std::string & Name, std::string & Description ) {
|
template <typename T> bool GetNameAndDescription(field_name_t FieldName, const T & Value, std::string & Name, std::string & Description ) {
|
||||||
try {
|
try {
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
Poco::Data::Session Session = Pool_.get();
|
Poco::Data::Session Session = Pool_.get();
|
||||||
Poco::Data::Statement Select(Session);
|
Poco::Data::Statement Select(Session);
|
||||||
RecordTuple RT;
|
RecordTuple RT;
|
||||||
@@ -597,7 +565,7 @@ namespace ORM {
|
|||||||
|
|
||||||
template <typename T> bool DeleteRecord(field_name_t FieldName, const T & Value) {
|
template <typename T> bool DeleteRecord(field_name_t FieldName, const T & Value) {
|
||||||
try {
|
try {
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
Poco::Data::Session Session = Pool_.get();
|
Poco::Data::Session Session = Pool_.get();
|
||||||
Poco::Data::Statement Delete(Session);
|
Poco::Data::Statement Delete(Session);
|
||||||
@@ -635,7 +603,7 @@ namespace ORM {
|
|||||||
|
|
||||||
bool Exists(field_name_t FieldName, const std::string & Value) {
|
bool Exists(field_name_t FieldName, const std::string & Value) {
|
||||||
try {
|
try {
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
RecordType R;
|
RecordType R;
|
||||||
if(GetRecord(FieldName,Value,R))
|
if(GetRecord(FieldName,Value,R))
|
||||||
@@ -688,7 +656,7 @@ namespace ORM {
|
|||||||
}
|
}
|
||||||
if(!ItemList.empty())
|
if(!ItemList.empty())
|
||||||
ItemList += " , ";
|
ItemList += " , ";
|
||||||
auto hint = FieldNames_.find(Poco::toLower(T[0]));
|
auto hint = FieldNames_.find(T[0]);
|
||||||
if(hint==FieldNames_.end()) {
|
if(hint==FieldNames_.end()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -698,6 +666,9 @@ namespace ORM {
|
|||||||
if(!ItemList.empty()) {
|
if(!ItemList.empty()) {
|
||||||
OrderByString = " ORDER BY " + ItemList;
|
OrderByString = " ORDER BY " + ItemList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << OrderByString << std::endl;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -724,7 +695,7 @@ namespace ORM {
|
|||||||
|
|
||||||
template <typename X> bool ManipulateVectorMember( X T, field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID, bool Add) {
|
template <typename X> bool ManipulateVectorMember( X T, field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID, bool Add) {
|
||||||
try {
|
try {
|
||||||
assert( ValidFieldName(FieldName) );
|
assert( FieldNames_.find(FieldName) != FieldNames_.end() );
|
||||||
|
|
||||||
RecordType R;
|
RecordType R;
|
||||||
if(GetRecord(FieldName, ParentUUID, R)) {
|
if(GetRecord(FieldName, ParentUUID, R)) {
|
||||||
@@ -758,12 +729,12 @@ namespace ORM {
|
|||||||
try {
|
try {
|
||||||
Command << i, Poco::Data::Keywords::now;
|
Command << i, Poco::Data::Keywords::now;
|
||||||
} catch (const Poco::Exception &E) {
|
} catch (const Poco::Exception &E) {
|
||||||
// Logger_.log(E);
|
Logger_.log(E);
|
||||||
// Logger_.error(Poco::format("The following statement '%s' generated an exception during a table upgrade. This may or may not be a problem.", i));
|
Logger_.error(Poco::format("The following statement '%s' generated an exception during a table upgrade. This maya or may not be a problem.", i));
|
||||||
|
}
|
||||||
if(!IgnoreExceptions) {
|
if(!IgnoreExceptions) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Command.reset(Session);
|
Command.reset(Session);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -838,32 +809,32 @@ namespace ORM {
|
|||||||
return ManipulateVectorMember(&RecordType::users, FieldName, ParentUUID, ChildUUID, false);
|
return ManipulateVectorMember(&RecordType::users, FieldName, ParentUUID, ChildUUID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool AddConfiguration(field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID) {
|
inline bool AddInUse(field_name_t FieldName, std::string & ParentUUID, const std::string & Prefix, const std::string & ChildUUID) {
|
||||||
return ManipulateVectorMember(&RecordType::deviceConfiguration, FieldName, ParentUUID, ChildUUID, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool DelConfiguration(field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID) {
|
|
||||||
return ManipulateVectorMember(&RecordType::deviceConfiguration, FieldName, ParentUUID, ChildUUID, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool AddVariable(field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID) {
|
|
||||||
return ManipulateVectorMember(&RecordType::variables, FieldName, ParentUUID, ChildUUID, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool DelVariable(field_name_t FieldName, const std::string & ParentUUID, const std::string & ChildUUID) {
|
|
||||||
return ManipulateVectorMember(&RecordType::variables, FieldName, ParentUUID, ChildUUID, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool AddInUse(field_name_t FieldName, const std::string & ParentUUID, const std::string & Prefix, const std::string & ChildUUID) {
|
|
||||||
std::string FakeUUID{ Prefix + ":" + ChildUUID};
|
std::string FakeUUID{ Prefix + ":" + ChildUUID};
|
||||||
return ManipulateVectorMember(&RecordType::inUse,FieldName, ParentUUID, FakeUUID, true);
|
return ManipulateVectorMember(&RecordType::inUse,FieldName, ParentUUID, FakeUUID, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool DeleteInUse(field_name_t FieldName, const std::string & ParentUUID, const std::string & Prefix, const std::string & ChildUUID) {
|
inline bool DeleteInUse(field_name_t FieldName, std::string & ParentUUID, const std::string & Prefix, const std::string & ChildUUID) {
|
||||||
std::string FakeUUID{ Prefix + ":" + ChildUUID};
|
std::string FakeUUID{ Prefix + ":" + ChildUUID};
|
||||||
return ManipulateVectorMember(&RecordType::inUse,FieldName, ParentUUID, FakeUUID, false);
|
return ManipulateVectorMember(&RecordType::inUse,FieldName, ParentUUID, FakeUUID, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool DeleteContact(field_name_t FieldName, std::string & ParentUUID, const std::string & ChildUUID) {
|
||||||
|
return ManipulateVectorMember(&RecordType::contacts,FieldName, ParentUUID, ChildUUID, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool AddContact(field_name_t FieldName, std::string & ParentUUID, const std::string & ChildUUID) {
|
||||||
|
return ManipulateVectorMember(&RecordType::contacts,FieldName, ParentUUID, ChildUUID, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool DeleteLocation(field_name_t FieldName, std::string & ParentUUID, const std::string & ChildUUID) {
|
||||||
|
return ManipulateVectorMember(&RecordType::locations,FieldName, ParentUUID, ChildUUID, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline bool AddLocation(field_name_t FieldName, std::string & ParentUUID, const std::string & ChildUUID) {
|
||||||
|
return ManipulateVectorMember(&RecordType::locations,FieldName, ParentUUID, ChildUUID, true);
|
||||||
|
}
|
||||||
|
|
||||||
inline bool GetInUse(field_name_t FieldName, const std::string & UUID, std::vector<std::string> & UUIDs ) {
|
inline bool GetInUse(field_name_t FieldName, const std::string & UUID, std::vector<std::string> & UUIDs ) {
|
||||||
RecordType R;
|
RecordType R;
|
||||||
if(GetRecord(FieldName,UUID,R)) {
|
if(GetRecord(FieldName,UUID,R)) {
|
||||||
@@ -873,15 +844,6 @@ namespace ORM {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool ValidFieldName(const std::string &FieldName) {
|
|
||||||
return FieldNames_.find(Poco::toLower(FieldName)) != FieldNames_.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool ValidFieldName(const char *FieldName) {
|
|
||||||
std::string Field{FieldName};
|
|
||||||
return ValidFieldName(Field);
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] inline std::string ComputeRange(uint64_t From, uint64_t HowMany) {
|
[[nodiscard]] inline std::string ComputeRange(uint64_t From, uint64_t HowMany) {
|
||||||
if(From<1) From=0;
|
if(From<1) From=0;
|
||||||
switch(Type_) {
|
switch(Type_) {
|
||||||
@@ -898,31 +860,26 @@ namespace ORM {
|
|||||||
|
|
||||||
Poco::Logger & Logger() { return Logger_; }
|
Poco::Logger & Logger() { return Logger_; }
|
||||||
|
|
||||||
inline bool DeleteRecordsFromCache(const char *FieldName, const std::string &Value ) {
|
bool DeleteRecordsFromCache(const char *FieldName, const std::string &Value ) {
|
||||||
if(Cache_)
|
if(Cache_)
|
||||||
Cache_->Delete(FieldName, Value);
|
Cache_->Delete(FieldName, Value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void GetFieldNames( OpenWifi::Types::StringVec & F) {
|
|
||||||
for(const auto &[field,_]:FieldNames_)
|
|
||||||
F.push_back(field);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::string TableName_;
|
|
||||||
OpenWifi::DBType Type_;
|
|
||||||
Poco::Data::SessionPool &Pool_;
|
Poco::Data::SessionPool &Pool_;
|
||||||
Poco::Logger &Logger_;
|
Poco::Logger &Logger_;
|
||||||
std::string Prefix_;
|
std::string TableName_;
|
||||||
DBCache<RecordType> *Cache_= nullptr;
|
DBCache<RecordType> *Cache_= nullptr;
|
||||||
private:
|
private:
|
||||||
|
OpenWifi::DBType Type_;
|
||||||
std::string CreateFields_;
|
std::string CreateFields_;
|
||||||
std::string SelectFields_;
|
std::string SelectFields_;
|
||||||
std::string SelectList_;
|
std::string SelectList_;
|
||||||
std::string UpdateFields_;
|
std::string UpdateFields_;
|
||||||
std::vector<std::string> IndexCreation_;
|
std::vector<std::string> IndexCreation_;
|
||||||
std::map<std::string,int> FieldNames_;
|
std::map<std::string,int> FieldNames_;
|
||||||
|
std::string Prefix_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,509 +0,0 @@
|
|||||||
//
|
|
||||||
// Created by stephane bourque on 2022-02-21.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <cstring>
|
|
||||||
#include "Poco/String.h"
|
|
||||||
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__clang__)
|
|
||||||
#pragma clang diagnostic push
|
|
||||||
#pragma clang diagnostic ignored "-Wunused-variable"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace OpenWifi::RESTAPI::Errors {
|
|
||||||
struct msg { uint64_t err_num; std::string err_txt; };
|
|
||||||
static const struct msg Error404{404,"Resource does not exist."};
|
|
||||||
|
|
||||||
static const struct msg SUCCESS{0,"No error."};
|
|
||||||
static const struct msg PASSWORD_CHANGE_REQUIRED{1,"Password change required"};
|
|
||||||
static const struct msg INVALID_CREDENTIALS{2,"Invalid credentials."};
|
|
||||||
static const struct msg PASSWORD_ALREADY_USED{3,"Password already used."};
|
|
||||||
static const struct msg USERNAME_PENDING_VERIFICATION{4,"Username pending verification."};
|
|
||||||
static const struct msg PASSWORD_INVALID{5,"Password is invalid"};
|
|
||||||
static const struct msg INTERNAL_ERROR{6,"Internal error."};
|
|
||||||
static const struct msg ACCESS_DENIED{7,"Access denied."};
|
|
||||||
static const struct msg INVALID_TOKEN{8,"Invalid token."};
|
|
||||||
static const struct msg EXPIRED_TOKEN{9,"Expired token."};
|
|
||||||
static const struct msg RATE_LIMIT_EXCEEDED{10,"Rate limit exceeded."};
|
|
||||||
static const struct msg BAD_MFA_TRANSACTION{11,"Bad MFA transaction."};
|
|
||||||
static const struct msg MFA_FAILURE{12,"MFA failure."};
|
|
||||||
static const struct msg SECURITY_SERVICE_UNREACHABLE{13,"Security service is unreachable, try again later."};
|
|
||||||
static const struct msg CANNOT_REFRESH_TOKEN{14,"Cannot refresh token."};
|
|
||||||
|
|
||||||
static const struct msg MissingUUID{1000,"Missing UUID."};
|
|
||||||
static const struct msg MissingSerialNumber{1001,"Missing Serial Number."};
|
|
||||||
static const struct msg InternalError{1002,"Internal error. Please try later."};
|
|
||||||
static const struct msg InvalidJSONDocument{1003,"Invalid JSON document."};
|
|
||||||
static const struct msg UnsupportedHTTPMethod{1004,"Unsupported HTTP Method"};
|
|
||||||
static const struct msg StillInUse{1005,"Element still in use."};
|
|
||||||
static const struct msg CouldNotBeDeleted{1006,"Element could not be deleted."};
|
|
||||||
static const struct msg NameMustBeSet{1007,"The name property must be set."};
|
|
||||||
static const struct msg ConfigBlockInvalid{1008,"Configuration block type invalid."};
|
|
||||||
static const struct msg UnknownId{1009,"Unknown UUID."};
|
|
||||||
static const struct msg InvalidDeviceTypes{1010,"Unknown or invalid device type(s)."};
|
|
||||||
static const struct msg RecordNotCreated{1011,"Record could not be created."};
|
|
||||||
static const struct msg RecordNotUpdated{1012,"Record could not be updated."};
|
|
||||||
static const struct msg UnknownManagementPolicyUUID{1013,"Unknown management policy UUID."};
|
|
||||||
static const struct msg CannotDeleteRoot{1014,"Root Entity cannot be removed, only modified."};
|
|
||||||
static const struct msg MustCreateRootFirst{1015,"Root entity must be created first."};
|
|
||||||
static const struct msg ParentUUIDMustExist{1016,"Parent UUID must exist."};
|
|
||||||
static const struct msg ConfigurationMustExist{1017,"Configuration must exist."};
|
|
||||||
static const struct msg MissingOrInvalidParameters{1018,"Invalid or missing parameters."};
|
|
||||||
static const struct msg UnknownSerialNumber{1019,"Unknown Serial Number."};
|
|
||||||
static const struct msg InvalidSerialNumber{1020,"Invalid Serial Number."};
|
|
||||||
static const struct msg SerialNumberExists{1021,"Serial Number already exists."};
|
|
||||||
static const struct msg ValidNonRootUUID{1022,"Must be a non-root, and valid UUID."};
|
|
||||||
static const struct msg VenueMustExist{1023,"Venue does not exist."};
|
|
||||||
static const struct msg NotBoth{1024,"You cannot specify both Entity and Venue"};
|
|
||||||
static const struct msg EntityMustExist{1025,"Entity must exist."};
|
|
||||||
static const struct msg ParentOrEntityMustBeSet{1026,"Parent or Entity must be set."};
|
|
||||||
static const struct msg ContactMustExist{1027,"Contact must exist."};
|
|
||||||
static const struct msg LocationMustExist{1028,"Location must exist."};
|
|
||||||
static const struct msg OnlyWSSupported{1029,"This endpoint only supports WebSocket."};
|
|
||||||
static const struct msg SerialNumberMismatch{1030,"Serial Number mismatch."};
|
|
||||||
static const struct msg InvalidCommand{1031,"Invalid command."};
|
|
||||||
static const struct msg NoRecordsDeleted{1032,"No records deleted."};
|
|
||||||
static const struct msg DeviceNotConnected{1033,"Device is not currently connected."};
|
|
||||||
static const struct msg CannotCreateWS{1034,"Telemetry system could not create WS endpoint. Please try again."};
|
|
||||||
static const struct msg BothDeviceTypeRevision{1035,"Both deviceType and revision must be set."};
|
|
||||||
static const struct msg IdOrSerialEmpty{1036,"SerialNumber and Id must not be empty."};
|
|
||||||
static const struct msg MissingUserID{1037,"Missing user ID."};
|
|
||||||
static const struct msg IdMustBe0{1038,"To create a user, you must set the ID to 0"};
|
|
||||||
static const struct msg InvalidUserRole{1039,"Invalid userRole."};
|
|
||||||
static const struct msg InvalidEmailAddress{1040,"Invalid email address."};
|
|
||||||
static const struct msg PasswordRejected{1041,"Password was rejected. This maybe an old password."};
|
|
||||||
static const struct msg InvalidIPRanges{1042,"Invalid IP range specifications."};
|
|
||||||
static const struct msg InvalidLOrderBy{1043,"Invalid orderBy specification."};
|
|
||||||
static const struct msg NeedMobileNumber{1044,"You must provide at least one validated phone number."};
|
|
||||||
static const struct msg BadMFAMethod{1045,"MFA only supports sms or email."};
|
|
||||||
static const struct msg InvalidCredentials{1046,"Invalid credentials (username/password)."};
|
|
||||||
static const struct msg InvalidPassword{1047,"Password does not conform to basic password rules."};
|
|
||||||
static const struct msg UserPendingVerification{1048,"User access denied pending email verification."};
|
|
||||||
static const struct msg PasswordMustBeChanged{1049,"Password must be changed."};
|
|
||||||
static const struct msg UnrecognizedRequest{1050,"Ill-formed request. Please consult documentation."};
|
|
||||||
static const struct msg MissingAuthenticationInformation{1051,"Missing authentication information."};
|
|
||||||
static const struct msg InsufficientAccessRights{1052,"Insufficient access rights to complete the operation."};
|
|
||||||
static const struct msg ExpiredToken{1053,"Token has expired, user must login."};
|
|
||||||
static const struct msg SubscriberMustExist{1054,"Subscriber must exist."};
|
|
||||||
static const struct msg AuthenticatorVerificationIncomplete{1055,"Authenticator validation is not complete."};
|
|
||||||
static const struct msg SMSCouldNotBeSentRetry{1056,"SMS could not be sent to validate device, try later or change the phone number."};
|
|
||||||
static const struct msg SMSCouldNotValidate{1057,"Code and number could not be validated"};
|
|
||||||
static const struct msg InvalidDeviceClass{1058,"Invalid device class. Must be: any, venue, entity, or subscriber"};
|
|
||||||
static const struct msg SerialNumberAlreadyProvisioned{1059,"This device has already been provisioned to a subscriber."};
|
|
||||||
static const struct msg SerialNumberNotTheProperClass{1060,"Device is not available to subscribers. It ahs been assigned to another class of devices."};
|
|
||||||
static const struct msg UserAlreadyExists{1061,"Username already exists."};
|
|
||||||
static const struct msg NotImplemented{1062,"Function not implemented."};
|
|
||||||
static const struct msg VariableMustExist{1063,"Specified variable does not exist."};
|
|
||||||
static const struct msg InvalidEntityType{1064,"Invalid entity type."};
|
|
||||||
static const struct msg CannotDeleteSubEntity{1065,"Cannot delete the default subscriber entity."};
|
|
||||||
static const struct msg OperatorIdMustExist{1066,"Missing or bad Operator ID"};
|
|
||||||
static const struct msg CannotDeleteDefaultOperator{1067,"Cannot delete the default operator."};
|
|
||||||
static const struct msg CannotCreateDefaultOperator{1068,"Cannot create the default operator."};
|
|
||||||
static const struct msg InvalidRRM{1069,"Invalid RRM value."};
|
|
||||||
static const struct msg InvalidIPAddresses{1070,"Invalid IP addresses."};
|
|
||||||
static const struct msg InvalidBillingCode{1071,"Empty of invalid billing code."};
|
|
||||||
static const struct msg InvalidBillingPeriod{1072,"Invalid billing period."};
|
|
||||||
static const struct msg InvalidSubscriberId{1073,"Invalid subscriber ID."};
|
|
||||||
static const struct msg InvalidContactId{1074,"Invalid contact ID."};
|
|
||||||
static const struct msg InvalidLocationId{1075,"Invalid location ID."};
|
|
||||||
static const struct msg InvalidContactType{1076,"Invalid contact type."};
|
|
||||||
static const struct msg InvalidLocationType{1077,"Invalid location type."};
|
|
||||||
static const struct msg InvalidOperatorId{1078,"Invalid operator ID."};
|
|
||||||
static const struct msg InvalidServiceClassId{1079,"Invalid service class ID."};
|
|
||||||
static const struct msg InvalidSubscriberDeviceId{1080,"Invalid subscriber device ID."};
|
|
||||||
static const struct msg InvalidRegistrationOperatorId{1081,"Invalid registration operator ID."};
|
|
||||||
static const struct msg InvalidRegistrationOperatorName{1082,"Invalid registration operator name."};
|
|
||||||
static const struct msg RegistrationNameDuplicate{1083,"Registration name must be unique."};
|
|
||||||
static const struct msg SMSMFANotEnabled{1084,"SMS is not enabled in the security service."};
|
|
||||||
static const struct msg EMailMFANotEnabled{1085,"email is not enabled in the security service."};
|
|
||||||
|
|
||||||
static const struct msg TOTInvalidCode{1086,"Invalid code."};
|
|
||||||
static const struct msg TOTInvalidIndex{1087,"Invalid index."};
|
|
||||||
static const struct msg TOTRepeatedCode{1088,"Code is repeated. Must be new code."};
|
|
||||||
static const struct msg TOTInvalidProtocol{1089,"Invalid protocol sequence."};
|
|
||||||
static const struct msg TOTNoSession{1090,"No validation session present."};
|
|
||||||
|
|
||||||
static const struct msg SignupAlreadySigned{1091,"Code is repeated. Must be new code."};
|
|
||||||
static const struct msg SignupEmailCheck{1092,"Waiting for email check completion."};
|
|
||||||
static const struct msg SignupWaitingForDevice{1093,"Waiting for device."};
|
|
||||||
|
|
||||||
static const struct msg SMSMissingPhoneNumber{1094,"Missing phone number"};
|
|
||||||
static const struct msg SMSTryLater{1095,"SMS could not be sent. Verify the number or try again later."};
|
|
||||||
static const struct msg SMSMissingChallenge{1096,"Missing 'challengeCode'"};
|
|
||||||
static const struct msg MustHaveConfigElement{1097,"Must have 'configuration' element."};
|
|
||||||
|
|
||||||
static const struct msg ModelIDListCannotBeEmpty{1098,"Model ID list cannot be empty."};
|
|
||||||
static const struct msg DefConfigNameExists{1099,"Configuration name already exists."};
|
|
||||||
|
|
||||||
static const struct msg SubNoDeviceActivated{1100,"No devices activated yet."};
|
|
||||||
static const struct msg SubConfigNotRefreshed{1101,"Configuration could not be refreshed."};
|
|
||||||
|
|
||||||
static const struct msg ProvServiceNotAvailable{1102,"Provisioning service not available yet."};
|
|
||||||
static const struct msg SSIDInvalidPassword{1103,"Invalid password length. Must be 8 characters or greater, and a maximum of 32 characters."};
|
|
||||||
static const struct msg InvalidStartingIPAddress{1104,"Invalid starting/ending IP address."};
|
|
||||||
static const struct msg SubnetFormatError{1105,"Subnet must be in format like 192.168.1.1/24."};
|
|
||||||
static const struct msg DeviceModeError{1106,"Device mode subnet must be of the form 192.168.1.1/24."};
|
|
||||||
|
|
||||||
static const struct msg BadDeviceMode{1107,"Mode must be bridge, nat, or manual."};
|
|
||||||
static const struct msg DefaultGatewayFormat{1108,"Default gateway must be in format like 192.168.1.1."};
|
|
||||||
static const struct msg PrimaryDNSFormat{1109,"Primary DNS must be an IP address i.e. 192.168.1.1."};
|
|
||||||
|
|
||||||
static const struct msg SecondaryDNSFormat{1110,"Secondary DNS must be an IP address i.e. 192.168.1.1."};
|
|
||||||
static const struct msg BadConnectionType{1111,"Internet Connection must be automatic, bridge, pppoe, or manual."};
|
|
||||||
static const struct msg InvalidDeviceID{1112,"Invalid deviceID."};
|
|
||||||
static const struct msg InvalidVisibilityAttribute{1113,"Invalid visibility attribute."};
|
|
||||||
static const struct msg UnknownConfigurationSection{1114,"Unknown section."};
|
|
||||||
|
|
||||||
static const struct msg CannotValidatePhoneNumber{1115,"Phone number could not be validated."};
|
|
||||||
static const struct msg RootUsersNoOwners{1116,"ROOT users may not have owners."};
|
|
||||||
static const struct msg PartnerMustHaveEntity{1118,"Partner user must belong to an entity."};
|
|
||||||
static const struct msg RootCannotModifyUsers{1119,"ROOT may not modify user roles."};
|
|
||||||
|
|
||||||
static const struct msg CertificateNotIssued{1120,"Certificate was not issued."};
|
|
||||||
static const struct msg IncompleteCertificate{1121,"Incomplete certificate information. Cannot be downloaded. You must delete and recreate."};
|
|
||||||
static const struct msg InvalidCertificateType{1122,"Invalid certificate type."};
|
|
||||||
static const struct msg InvalidDeviceName{1123,"Invalid device name."};
|
|
||||||
|
|
||||||
static const struct msg InvalidRedirectorName{1124,"Invalid redirector name"};
|
|
||||||
static const struct msg CommonNameAlreadyExists{1125,"A device/server of this name already exists"};
|
|
||||||
static const struct msg CertificateAlreadyExists{1126,"A certificate for this device already exists."};
|
|
||||||
static const struct msg CannotCreateCertTryAgain{1127,"Device certificate could not be created. Please try later."};
|
|
||||||
static const struct msg CouldNotRevoke{1128,"Certificate could not be revoked."};
|
|
||||||
|
|
||||||
static const struct msg CouldNotModifyCert{1129,"Certificate could not me modified. Please verify the information you supplied."};
|
|
||||||
static const struct msg BatchCertNoCreated{1130,"Certificates have not been created for this batch."};
|
|
||||||
static const struct msg BatchTooBig{1131,"Illegal number of MAC Addresses: must be between 1 and 1000."};
|
|
||||||
|
|
||||||
static const struct msg OutstandingJobs{1132,"Batch has running outstanding jobs. Please wait until job is finished."};
|
|
||||||
static const struct msg InvalidSMSNotificationList{1133,"Invalid SMS Notification list."};
|
|
||||||
static const struct msg InvalidEMailNotificationList{1134,"Invalid email Notification list."};
|
|
||||||
static const struct msg CannotChangeCommanNames{1135,"You cannot provide new/modified common names after jobs have been run for a batch."};
|
|
||||||
static const struct msg FailedToVerifyDigicert{1136,"Failed to verify the DigiCert information provided."};
|
|
||||||
static const struct msg CouldNotPerformCommand{1137,"Could not perform command."};
|
|
||||||
|
|
||||||
static const struct msg PoolNameInvalid{1138,"Pool name is invalid."};
|
|
||||||
static const struct msg InvalidRadiusProxyStrategy{1139,"Strategy name must be: random, round_robin, weighted."};
|
|
||||||
static const struct msg InvalidRadiusProxyMonitorMethod{1140,"monitorMethod must be: none, https, radius."};
|
|
||||||
static const struct msg MustHaveAtLeastOneRadiusServer{1141,"Must have at least one RADIUS server."};
|
|
||||||
static const struct msg InvalidRadiusServerEntry{1142,"RADIUS Server IP address invalid or port missing."};
|
|
||||||
static const struct msg InvalidRadiusServerWeigth{1143,"RADIUS Server IP weight cannot be 0."};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace OpenWifi::RESTAPI::Protocol {
|
|
||||||
static const char * CAPABILITIES = "capabilities";
|
|
||||||
static const char * LOGS = "logs";
|
|
||||||
static const char * HEALTHCHECKS = "healthchecks";
|
|
||||||
static const char * STATISTICS = "statistics";
|
|
||||||
static const char * STATUS = "status";
|
|
||||||
static const char * SERIALNUMBER = "serialNumber";
|
|
||||||
static const char * PERFORM = "perform";
|
|
||||||
static const char * CONFIGURE = "configure";
|
|
||||||
static const char * UPGRADE = "upgrade";
|
|
||||||
static const char * REBOOT = "reboot";
|
|
||||||
static const char * FACTORY = "factory";
|
|
||||||
static const char * LEDS = "leds";
|
|
||||||
static const char * TRACE = "trace";
|
|
||||||
static const char * REQUEST = "request";
|
|
||||||
static const char * WIFISCAN = "wifiscan";
|
|
||||||
static const char * EVENTQUEUE = "eventqueue";
|
|
||||||
static const char * RTTY = "rtty";
|
|
||||||
static const char * COMMAND = "command";
|
|
||||||
static const char * STARTDATE = "startDate";
|
|
||||||
static const char * ENDDATE = "endDate";
|
|
||||||
static const char * OFFSET = "offset";
|
|
||||||
static const char * LIMIT = "limit";
|
|
||||||
static const char * LIFETIME = "lifetime";
|
|
||||||
static const char * UUID = "UUID";
|
|
||||||
static const char * DATA = "data";
|
|
||||||
static const char * CONFIGURATION = "configuration";
|
|
||||||
static const char * WHEN = "when";
|
|
||||||
static const char * URI = "uri";
|
|
||||||
static const char * LOGTYPE = "logType";
|
|
||||||
static const char * VALUES = "values";
|
|
||||||
static const char * TYPES = "types";
|
|
||||||
static const char * PAYLOAD = "payload";
|
|
||||||
static const char * KEEPREDIRECTOR = "keepRedirector";
|
|
||||||
static const char * NETWORK = "network";
|
|
||||||
static const char * INTERFACE = "interface";
|
|
||||||
static const char * BANDS = "bands";
|
|
||||||
static const char * CHANNELS = "channels";
|
|
||||||
static const char * VERBOSE = "verbose";
|
|
||||||
static const char * MESSAGE = "message";
|
|
||||||
static const char * STATE = "state";
|
|
||||||
static const char * HEALTHCHECK = "healthcheck";
|
|
||||||
static const char * PCAP_FILE_TYPE = "pcap";
|
|
||||||
static const char * DURATION = "duration";
|
|
||||||
static const char * NUMBEROFPACKETS = "numberOfPackets";
|
|
||||||
static const char * FILTER = "filter";
|
|
||||||
static const char * SELECT = "select";
|
|
||||||
static const char * SERIALONLY = "serialOnly";
|
|
||||||
static const char * COUNTONLY = "countOnly";
|
|
||||||
static const char * DEVICEWITHSTATUS = "deviceWithStatus";
|
|
||||||
static const char * DEVICESWITHSTATUS = "devicesWithStatus";
|
|
||||||
static const char * DEVICES = "devices";
|
|
||||||
static const char * COUNT = "count";
|
|
||||||
static const char * SERIALNUMBERS = "serialNumbers";
|
|
||||||
static const char * CONFIGURATIONS = "configurations";
|
|
||||||
static const char * NAME = "name";
|
|
||||||
static const char * COMMANDS = "commands";
|
|
||||||
static const char * COMMANDUUID = "commandUUID";
|
|
||||||
static const char * FIRMWARES = "firmwares";
|
|
||||||
static const char * TOPIC = "topic";
|
|
||||||
static const char * HOST = "host";
|
|
||||||
static const char * OS = "os";
|
|
||||||
static const char * HOSTNAME = "hostname";
|
|
||||||
static const char * PROCESSORS = "processors";
|
|
||||||
static const char * REASON = "reason";
|
|
||||||
static const char * RELOAD = "reload";
|
|
||||||
static const char * SUBSYSTEMS = "subsystems";
|
|
||||||
static const char * FILEUUID = "uuid";
|
|
||||||
static const char * USERID = "userId";
|
|
||||||
static const char * PASSWORD = "password";
|
|
||||||
static const char * TOKEN = "token";
|
|
||||||
static const char * SETLOGLEVEL = "setloglevel";
|
|
||||||
static const char * GETLOGLEVELS = "getloglevels";
|
|
||||||
static const char * GETSUBSYSTEMNAMES = "getsubsystemnames";
|
|
||||||
static const char * GETLOGLEVELNAMES = "getloglevelnames";
|
|
||||||
static const char * STATS = "stats";
|
|
||||||
static const char * PING = "ping";
|
|
||||||
static const char * PARAMETERS = "parameters";
|
|
||||||
static const char * VALUE = "value";
|
|
||||||
static const char * LASTONLY = "lastOnly";
|
|
||||||
static const char * NEWEST = "newest";
|
|
||||||
static const char * ACTIVESCAN = "activeScan";
|
|
||||||
static const char * OVERRIDEDFS = "override_dfs";
|
|
||||||
static const char * LIST = "list";
|
|
||||||
static const char * TAG = "tag";
|
|
||||||
static const char * TAGLIST = "tagList";
|
|
||||||
static const char * DESCRIPTION = "description";
|
|
||||||
static const char * NOTES = "notes";
|
|
||||||
static const char * DEVICETYPE = "deviceType";
|
|
||||||
static const char * REVISION = "revision";
|
|
||||||
static const char * AGES = "ages";
|
|
||||||
static const char * REVISIONS = "revisions";
|
|
||||||
static const char * DEVICETYPES = "deviceTypes";
|
|
||||||
static const char * LATESTONLY = "latestOnly";
|
|
||||||
static const char * IDONLY = "idOnly";
|
|
||||||
static const char * REVISIONSET = "revisionSet";
|
|
||||||
static const char * DEVICESET = "deviceSet";
|
|
||||||
static const char * HISTORY = "history";
|
|
||||||
static const char * ID = "id";
|
|
||||||
static const char * VERSION = "version";
|
|
||||||
static const char * TIMES = "times";
|
|
||||||
static const char * UPTIME = "uptime";
|
|
||||||
static const char * START = "start";
|
|
||||||
static const char * DEBUG = "debug";
|
|
||||||
static const char * SCRIPT = "script";
|
|
||||||
static const char * TIMEOUT = "timeout";
|
|
||||||
|
|
||||||
static const char * NEWPASSWORD = "newPassword";
|
|
||||||
static const char * USERS = "users";
|
|
||||||
static const char * WITHEXTENDEDINFO = "withExtendedInfo";
|
|
||||||
|
|
||||||
static const char * ERRORTEXT = "errorText";
|
|
||||||
static const char * ERRORCODE = "errorCode";
|
|
||||||
static const char * AVATARID = "avatarId";
|
|
||||||
static const char * UNNAMED = "(unnamed)";
|
|
||||||
static const char * UNSPECIFIED = "(unspecified)";
|
|
||||||
static const char * CONTENTDISPOSITION = "Content-Disposition";
|
|
||||||
static const char * CONTENTTYPE = "Content-Type";
|
|
||||||
|
|
||||||
static const char * REQUIREMENTS = "requirements";
|
|
||||||
static const char * PASSWORDPATTERN = "passwordPattern";
|
|
||||||
static const char * ACCESSPOLICY = "accessPolicy";
|
|
||||||
static const char * PASSWORDPOLICY = "passwordPolicy";
|
|
||||||
static const char * FORGOTPASSWORD = "forgotPassword";
|
|
||||||
static const char * RESENDMFACODE = "resendMFACode";
|
|
||||||
static const char * COMPLETEMFACHALLENGE = "completeMFAChallenge";
|
|
||||||
static const char * ME = "me";
|
|
||||||
static const char * TELEMETRY = "telemetry";
|
|
||||||
static const char * INTERVAL = "interval";
|
|
||||||
static const char * UI = "UI";
|
|
||||||
static const char * BANDWIDTH = "bandwidth";
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace OpenWifi::uCentralProtocol {
|
|
||||||
|
|
||||||
const int SERIAL_NUMBER_LENGTH = 30;
|
|
||||||
|
|
||||||
// vocabulary used in the PROTOCOL.md file
|
|
||||||
static const char *JSONRPC = "jsonrpc";
|
|
||||||
static const char *ID = "id";
|
|
||||||
static const char *UUID = "uuid";
|
|
||||||
static const char *JSONRPC_VERSION = "2.0";
|
|
||||||
static const char *METHOD = "method";
|
|
||||||
static const char *PARAMS = "params";
|
|
||||||
static const char *SERIAL = "serial";
|
|
||||||
static const char *FIRMWARE = "firmware";
|
|
||||||
static const char *CONNECT = "connect";
|
|
||||||
static const char *STATE = "state";
|
|
||||||
static const char *STATUS = "status";
|
|
||||||
static const char *ERROR = "error";
|
|
||||||
static const char *TEXT = "text";
|
|
||||||
static const char *HEALTHCHECK = "healthcheck";
|
|
||||||
static const char *LOG = "log";
|
|
||||||
static const char *CRASHLOG = "crashlog";
|
|
||||||
static const char *PING = "ping";
|
|
||||||
static const char *CFGPENDING = "cfgpending";
|
|
||||||
static const char *RECOVERY = "recovery";
|
|
||||||
static const char *COMPRESS_64 = "compress_64";
|
|
||||||
static const char *CAPABILITIES = "capabilities";
|
|
||||||
static const char *REQUEST_UUID = "request_uuid";
|
|
||||||
static const char *SANITY = "sanity";
|
|
||||||
static const char *DATA = "data";
|
|
||||||
static const char *LOGLINES = "loglines";
|
|
||||||
static const char *SEVERITY = "severity";
|
|
||||||
static const char *ACTIVE = "active";
|
|
||||||
static const char *OVERRIDEDFS = "override_dfs";
|
|
||||||
static const char *REBOOT = "reboot";
|
|
||||||
static const char *WHEN = "when";
|
|
||||||
static const char *CONFIG = "config";
|
|
||||||
static const char *EMPTY_JSON_DOC = "{}";
|
|
||||||
static const char *RESULT = "result";
|
|
||||||
static const char *RESULT_64 = "result_64";
|
|
||||||
static const char *RESULT_SZ = "result_sz";
|
|
||||||
static const char *REQUEST = "request";
|
|
||||||
static const char *PERFORM = "perform";
|
|
||||||
static const char *CONFIGURE = "configure";
|
|
||||||
static const char *PENDING = "pending";
|
|
||||||
static const char *SUBMITTED_BY_SYSTEM = "*system";
|
|
||||||
static const char *URI = "uri";
|
|
||||||
static const char *COMMAND = "command";
|
|
||||||
static const char *PAYLOAD = "payload";
|
|
||||||
static const char *KEEP_REDIRECTOR = "keep_redirector";
|
|
||||||
static const char *DURATION = "duration";
|
|
||||||
static const char *PATTERN = "pattern";
|
|
||||||
static const char *LEDS = "leds";
|
|
||||||
static const char *DEBUG = "debug";
|
|
||||||
static const char *ON = "on";
|
|
||||||
static const char *OFF = "off";
|
|
||||||
static const char *BLINK = "blink";
|
|
||||||
static const char *PACKETS = "packets";
|
|
||||||
static const char *NETWORK = "network";
|
|
||||||
static const char *INTERFACE = "interface";
|
|
||||||
static const char *TRACE = "trace";
|
|
||||||
static const char *WIFISCAN = "wifiscan";
|
|
||||||
static const char *TYPES = "types";
|
|
||||||
static const char *EVENT = "event";
|
|
||||||
static const char *MESSAGE = "message";
|
|
||||||
static const char *RTTY = "rtty";
|
|
||||||
static const char *TOKEN = "token";
|
|
||||||
static const char *SERVER = "server";
|
|
||||||
static const char *PORT = "port";
|
|
||||||
static const char *USER = "user";
|
|
||||||
static const char *TIMEOUT = "timeout";
|
|
||||||
static const char *UPGRADE = "upgrade";
|
|
||||||
static const char *FACTORY = "factory";
|
|
||||||
static const char *VERBOSE = "verbose";
|
|
||||||
static const char *BANDS = "bands";
|
|
||||||
static const char *CHANNELS = "channels";
|
|
||||||
static const char *PASSWORD = "password";
|
|
||||||
static const char *DEVICEUPDATE = "deviceupdate";
|
|
||||||
|
|
||||||
static const char *SERIALNUMBER = "serialNumber";
|
|
||||||
static const char *COMPATIBLE = "compatible";
|
|
||||||
static const char *DISCONNECTION = "disconnection";
|
|
||||||
static const char *TIMESTAMP = "timestamp";
|
|
||||||
static const char *SYSTEM = "system";
|
|
||||||
static const char *HOST = "host";
|
|
||||||
static const char *CONNECTIONIP = "connectionIp";
|
|
||||||
static const char *TELEMETRY = "telemetry";
|
|
||||||
static const char *BANDWIDTH = "bandwidth";
|
|
||||||
|
|
||||||
static const char *SCRIPT = "script";
|
|
||||||
static const char *TYPE = "type";
|
|
||||||
|
|
||||||
static const char *RADIUS = "radius";
|
|
||||||
static const char *RADIUSDATA = "data";
|
|
||||||
static const char *RADIUSACCT = "acct";
|
|
||||||
static const char *RADIUSAUTH = "auth";
|
|
||||||
static const char *RADIUSDST = "dst";
|
|
||||||
static const char *IES = "ies";
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace OpenWifi::uCentralProtocol::Events {
|
|
||||||
|
|
||||||
static const char *CONNECT = "connect";
|
|
||||||
static const char *STATE = "state";
|
|
||||||
static const char *HEALTHCHECK = "healthcheck";
|
|
||||||
static const char *LOG = "log";
|
|
||||||
static const char *CRASHLOG = "crashlog";
|
|
||||||
static const char *PING = "ping";
|
|
||||||
static const char *CFGPENDING = "cfgpending";
|
|
||||||
static const char *RECOVERY = "recovery";
|
|
||||||
static const char *TELEMETRY = "telemetry";
|
|
||||||
static const char *DEVICEUPDATE = "deviceupdate";
|
|
||||||
|
|
||||||
enum EVENT_MSG {
|
|
||||||
ET_UNKNOWN,
|
|
||||||
ET_CONNECT,
|
|
||||||
ET_STATE,
|
|
||||||
ET_HEALTHCHECK,
|
|
||||||
ET_LOG,
|
|
||||||
ET_CRASHLOG,
|
|
||||||
ET_PING,
|
|
||||||
ET_CFGPENDING,
|
|
||||||
ET_RECOVERY,
|
|
||||||
ET_DEVICEUPDATE,
|
|
||||||
ET_TELEMETRY
|
|
||||||
};
|
|
||||||
|
|
||||||
inline EVENT_MSG EventFromString(const std::string & Method) {
|
|
||||||
if(strcmp(STATE,Method.c_str())==0)
|
|
||||||
return ET_STATE;
|
|
||||||
else if(strcmp(HEALTHCHECK,Method.c_str())==0)
|
|
||||||
return ET_HEALTHCHECK;
|
|
||||||
else if(strcmp(CONNECT,Method.c_str())==0)
|
|
||||||
return ET_CONNECT;
|
|
||||||
else if(strcmp(CFGPENDING,Method.c_str())==0)
|
|
||||||
return ET_CFGPENDING;
|
|
||||||
else if(strcmp(CRASHLOG,Method.c_str())==0)
|
|
||||||
return ET_CRASHLOG;
|
|
||||||
else if(strcmp(DEVICEUPDATE,Method.c_str())==0)
|
|
||||||
return ET_DEVICEUPDATE;
|
|
||||||
else if(strcmp(LOG,Method.c_str())==0)
|
|
||||||
return ET_LOG;
|
|
||||||
else if(strcmp(PING,Method.c_str())==0)
|
|
||||||
return ET_PING;
|
|
||||||
else if(strcmp(RECOVERY,Method.c_str())==0)
|
|
||||||
return ET_RECOVERY;
|
|
||||||
else if(strcmp(TELEMETRY,Method.c_str())==0)
|
|
||||||
return ET_TELEMETRY;
|
|
||||||
return ET_UNKNOWN;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace OpenWifi::Provisioning::DeviceClass {
|
|
||||||
|
|
||||||
static const char * ANY = "any";
|
|
||||||
static const char * SUBSCRIBER = "subscriber";
|
|
||||||
static const char * VENUE = "venue";
|
|
||||||
static const char * ENTITY = "entity";
|
|
||||||
|
|
||||||
inline bool Validate(const char *s) {
|
|
||||||
static std::vector<std::string> Values{ ANY, ENTITY, SUBSCRIBER, VENUE };
|
|
||||||
return std::find(cbegin(Values), cend(Values), s) != cend(Values);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(__GNUC__ )
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__clang__)
|
|
||||||
#pragma clang diagnostic pop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
131
src/framework/uCentral_Protocol.h
Normal file
131
src/framework/uCentral_Protocol.h
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
//
|
||||||
|
// License type: BSD 3-Clause License
|
||||||
|
// License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
|
||||||
|
//
|
||||||
|
// Created by Stephane Bourque on 2021-03-04.
|
||||||
|
// Arilia Wireless Inc.
|
||||||
|
//
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Poco/String.h"
|
||||||
|
|
||||||
|
namespace OpenWifi::uCentralProtocol {
|
||||||
|
|
||||||
|
const int SERIAL_NUMBER_LENGTH = 30;
|
||||||
|
|
||||||
|
// vocabulary used in the PROTOCOL.md file
|
||||||
|
static const char * JSONRPC = "jsonrpc";
|
||||||
|
static const char * ID = "id";
|
||||||
|
static const char * UUID = "uuid";
|
||||||
|
static const char * JSONRPC_VERSION = "2.0";
|
||||||
|
static const char * METHOD = "method";
|
||||||
|
static const char * PARAMS = "params";
|
||||||
|
static const char * SERIAL = "serial";
|
||||||
|
static const char * FIRMWARE = "firmware";
|
||||||
|
static const char * CONNECT = "connect";
|
||||||
|
static const char * STATE = "state";
|
||||||
|
static const char * HEALTHCHECK = "healthcheck";
|
||||||
|
static const char * LOG = "log";
|
||||||
|
static const char * CRASHLOG = "crashlog";
|
||||||
|
static const char * PING = "ping";
|
||||||
|
static const char * CFGPENDING = "cfgpending";
|
||||||
|
static const char * RECOVERY = "recovery";
|
||||||
|
static const char * COMPRESS_64 = "compress_64";
|
||||||
|
static const char * CAPABILITIES = "capabilities";
|
||||||
|
static const char * REQUEST_UUID = "request_uuid";
|
||||||
|
static const char * SANITY = "sanity";
|
||||||
|
static const char * DATA = "data";
|
||||||
|
static const char * LOGLINES = "loglines";
|
||||||
|
static const char * SEVERITY = "severity";
|
||||||
|
static const char * ACTIVE = "active";
|
||||||
|
static const char * OVERRIDEDFS = "override_dfs";
|
||||||
|
static const char * REBOOT = "reboot";
|
||||||
|
static const char * WHEN = "when";
|
||||||
|
static const char * CONFIG = "config";
|
||||||
|
static const char * EMPTY_JSON_DOC = "{}";
|
||||||
|
static const char * RESULT = "result";
|
||||||
|
static const char * REQUEST = "request";
|
||||||
|
static const char * PERFORM = "perform";
|
||||||
|
static const char * CONFIGURE = "configure";
|
||||||
|
static const char * PENDING = "pending";
|
||||||
|
static const char * SUBMITTED_BY_SYSTEM = "*system";
|
||||||
|
static const char * URI = "uri";
|
||||||
|
static const char * COMMAND = "command";
|
||||||
|
static const char * PAYLOAD = "payload";
|
||||||
|
static const char * KEEP_REDIRECTOR = "keep_redirector";
|
||||||
|
static const char * DURATION = "duration";
|
||||||
|
static const char * PATTERN = "pattern";
|
||||||
|
static const char * LEDS = "leds";
|
||||||
|
static const char * ON = "on";
|
||||||
|
static const char * OFF = "off";
|
||||||
|
static const char * BLINK = "blink";
|
||||||
|
static const char * PACKETS = "packets";
|
||||||
|
static const char * NETWORK = "network";
|
||||||
|
static const char * INTERFACE = "interface";
|
||||||
|
static const char * TRACE = "trace";
|
||||||
|
static const char * WIFISCAN = "wifiscan";
|
||||||
|
static const char * TYPES = "types";
|
||||||
|
static const char * EVENT = "event";
|
||||||
|
static const char * MESSAGE = "message";
|
||||||
|
static const char * RTTY = "rtty";
|
||||||
|
static const char * TOKEN = "token";
|
||||||
|
static const char * SERVER = "server";
|
||||||
|
static const char * PORT = "port";
|
||||||
|
static const char * USER = "user";
|
||||||
|
static const char * TIMEOUT = "timeout";
|
||||||
|
static const char * UPGRADE = "upgrade";
|
||||||
|
static const char * FACTORY = "factory";
|
||||||
|
static const char * VERBOSE = "verbose";
|
||||||
|
static const char * BANDS = "bands";
|
||||||
|
static const char * CHANNELS = "channels";
|
||||||
|
static const char * PASSWORD = "password";
|
||||||
|
static const char * DEVICEUPDATE = "deviceupdate";
|
||||||
|
|
||||||
|
static const char * SERIALNUMBER = "serialNumber";
|
||||||
|
static const char * COMPATIBLE = "compatible";
|
||||||
|
static const char * DISCONNECTION = "disconnection";
|
||||||
|
static const char * TIMESTAMP = "timestamp";
|
||||||
|
static const char * SYSTEM = "system";
|
||||||
|
static const char * HOST = "host";
|
||||||
|
static const char * CONNECTIONIP = "connectionIp";
|
||||||
|
static const char * TELEMETRY = "telemetry";
|
||||||
|
|
||||||
|
enum EVENT_MSG {
|
||||||
|
ET_UNKNOWN,
|
||||||
|
ET_CONNECT,
|
||||||
|
ET_STATE,
|
||||||
|
ET_HEALTHCHECK,
|
||||||
|
ET_LOG,
|
||||||
|
ET_CRASHLOG,
|
||||||
|
ET_PING,
|
||||||
|
ET_CFGPENDING,
|
||||||
|
ET_RECOVERY,
|
||||||
|
ET_DEVICEUPDATE,
|
||||||
|
ET_TELEMETRY
|
||||||
|
};
|
||||||
|
|
||||||
|
inline static EVENT_MSG EventFromString(const std::string & Method) {
|
||||||
|
if (!Poco::icompare(Method, CONNECT)) {
|
||||||
|
return ET_CONNECT;
|
||||||
|
} else if (!Poco::icompare(Method, STATE)) {
|
||||||
|
return ET_STATE;
|
||||||
|
} else if (!Poco::icompare(Method, HEALTHCHECK)) {
|
||||||
|
return ET_HEALTHCHECK;
|
||||||
|
} else if (!Poco::icompare(Method, LOG)) {
|
||||||
|
return ET_LOG;
|
||||||
|
} else if (!Poco::icompare(Method, CRASHLOG)) {
|
||||||
|
return ET_CRASHLOG;
|
||||||
|
} else if (!Poco::icompare(Method, PING)) {
|
||||||
|
return ET_PING;
|
||||||
|
} else if (!Poco::icompare(Method, CFGPENDING)) {
|
||||||
|
return ET_CFGPENDING;
|
||||||
|
} else if (!Poco::icompare(Method, RECOVERY)) {
|
||||||
|
return ET_RECOVERY;
|
||||||
|
} else if (!Poco::icompare(Method, DEVICEUPDATE)) {
|
||||||
|
return ET_DEVICEUPDATE;
|
||||||
|
} else if (!Poco::icompare(Method, TELEMETRY)) {
|
||||||
|
return ET_TELEMETRY;
|
||||||
|
} else
|
||||||
|
return ET_UNKNOWN;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -47,7 +47,7 @@ namespace OpenWifi {
|
|||||||
.revision = Revision,
|
.revision = Revision,
|
||||||
.deviceType = DeviceType,
|
.deviceType = DeviceType,
|
||||||
.endPoint = EndPoint,
|
.endPoint = EndPoint,
|
||||||
.lastUpdate = (uint64_t)OpenWifi::Now(),
|
.lastUpdate = (uint64_t)std::time(nullptr),
|
||||||
.status = "connected"};
|
.status = "connected"};
|
||||||
return CreateRecord(DI);
|
return CreateRecord(DI);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace OpenWifi {
|
|||||||
class DevicesDB : public ORM::DB<DevicesRecordTuple, FMSObjects::DeviceConnectionInformation> {
|
class DevicesDB : public ORM::DB<DevicesRecordTuple, FMSObjects::DeviceConnectionInformation> {
|
||||||
public:
|
public:
|
||||||
DevicesDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
DevicesDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
||||||
virtual ~DevicesDB() {};
|
|
||||||
bool SetDeviceRevision(std::string &SerialNumber, std::string & Revision, std::string & DeviceType, std::string &EndPoint);
|
bool SetDeviceRevision(std::string &SerialNumber, std::string & Revision, std::string & DeviceType, std::string &EndPoint);
|
||||||
bool DeleteDevice( std::string & SerialNumber);
|
bool DeleteDevice( std::string & SerialNumber);
|
||||||
bool SetDeviceDisconnected(std::string &SerialNumber, std::string &EndPoint);
|
bool SetDeviceDisconnected(std::string &SerialNumber, std::string &EndPoint);
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ namespace OpenWifi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void FirmwaresDB::RemoveOldFirmware() {
|
void FirmwaresDB::RemoveOldFirmware() {
|
||||||
uint64_t Limit = OpenWifi::Now() - ManifestCreator()->MaxAge();
|
uint64_t Limit = std::time(nullptr) - ManifestCreator()->MaxAge();
|
||||||
std::string WhereClause{"imageDate < " + std::to_string(Limit)};
|
std::string WhereClause{"imageDate < " + std::to_string(Limit)};
|
||||||
DeleteRecords(WhereClause);
|
DeleteRecords(WhereClause);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ namespace OpenWifi {
|
|||||||
class FirmwaresDB : public ORM::DB<FirmwaresRecordTuple, FMSObjects::Firmware> {
|
class FirmwaresDB : public ORM::DB<FirmwaresRecordTuple, FMSObjects::Firmware> {
|
||||||
public:
|
public:
|
||||||
FirmwaresDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
FirmwaresDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
||||||
virtual ~FirmwaresDB() {};
|
|
||||||
|
|
||||||
bool AddFirmware(FMSObjects::Firmware & F);
|
bool AddFirmware(FMSObjects::Firmware & F);
|
||||||
bool UpdateFirmware(std::string & ID, FMSObjects::Firmware & F);
|
bool UpdateFirmware(std::string & ID, FMSObjects::Firmware & F);
|
||||||
|
|||||||
@@ -44,17 +44,15 @@ namespace OpenWifi {
|
|||||||
return CreateRecord(History);
|
return CreateRecord(History);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryDB::AddHistory(const std::string &SerialNumber, const std::string &DeviceType, const std::string &PreviousRevision,
|
bool HistoryDB::AddHistory(std::string &SerialNumber, std::string &DeviceType, std::string &PreviousRevision,
|
||||||
const std::string &NewVersion) {
|
std::string &NewVersion) {
|
||||||
|
|
||||||
FMSObjects::RevisionHistoryEntry History{
|
FMSObjects::RevisionHistoryEntry History{
|
||||||
.id = MicroService::CreateUUID(),
|
.id = MicroService::CreateUUID(),
|
||||||
.serialNumber = SerialNumber,
|
.serialNumber = SerialNumber,
|
||||||
.fromRelease = PreviousRevision,
|
.fromRelease = PreviousRevision,
|
||||||
.toRelease = NewVersion,
|
.toRelease = NewVersion,
|
||||||
.commandUUID = "",
|
.upgraded = (uint64_t) std::time(nullptr)};
|
||||||
.revisionId = "",
|
|
||||||
.upgraded = OpenWifi::Now()};
|
|
||||||
|
|
||||||
FMSObjects::Firmware F;
|
FMSObjects::Firmware F;
|
||||||
if (StorageService()->FirmwaresDB().GetFirmwareByRevision(NewVersion, DeviceType, F)) {
|
if (StorageService()->FirmwaresDB().GetFirmwareByRevision(NewVersion, DeviceType, F)) {
|
||||||
@@ -62,81 +60,19 @@ namespace OpenWifi {
|
|||||||
} else {
|
} else {
|
||||||
History.revisionId = "unknown";
|
History.revisionId = "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
return AddHistory(History);
|
return AddHistory(History);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryDB::DeleteHistory([[maybe_unused]] const std::string &SerialNumber, const std::string &Id) {
|
bool HistoryDB::DeleteHistory(std::string &SerialNumber, std::string &Id) {
|
||||||
return DeleteRecord("id", Id);
|
return DeleteRecord("id", Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryDB::DeleteHistory(const std::string &SerialNumber) {
|
bool HistoryDB::DeleteHistory(std::string &SerialNumber) {
|
||||||
std::string WhereClause{" serialNumber='" + SerialNumber + "' "};
|
std::string WhereClause{" serialNumber='" + SerialNumber + "' "};
|
||||||
return DeleteRecords(WhereClause);
|
return DeleteRecords(WhereClause);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryDB::GetUnknownDeviceFirmwares(uint64_t offset, uint64_t limit,
|
|
||||||
std::vector<FMSObjects::DeviceCurrentInfo> &Devices) {
|
|
||||||
|
|
||||||
typedef Poco::Tuple<std::string, std::string, uint64_t > RecInfo;
|
|
||||||
std::vector<RecInfo> RecList;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Poco::Data::Session sql_session = Pool_.get();
|
|
||||||
auto sql_query = fmt::format("select max(upgraded), serialnumber from history where revisionid='unknown' group by serialnumber order by serialnumber offset={} limit={};)", offset, limit);
|
|
||||||
Poco::Data::Statement sql_statement(sql_session);
|
|
||||||
|
|
||||||
sql_statement << sql_query,
|
|
||||||
Poco::Data::Keywords::into(RecList),
|
|
||||||
Poco::Data::Keywords::now;
|
|
||||||
|
|
||||||
for(const auto &record:RecList) {
|
|
||||||
FMSObjects::DeviceCurrentInfo entry{
|
|
||||||
.serialNumber = record.get<1>(),
|
|
||||||
.revision = "unknown",
|
|
||||||
.upgraded = record.get<2>()
|
|
||||||
};
|
|
||||||
Devices.emplace_back(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
Logger().log(E);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool HistoryDB::GetDeviceFirmwares(uint64_t offset, uint64_t limit,
|
|
||||||
std::vector<FMSObjects::DeviceCurrentInfo> &Devices) {
|
|
||||||
|
|
||||||
typedef Poco::Tuple<uint64_t, std::string, std::string> RecInfo;
|
|
||||||
std::vector<RecInfo> RecList;
|
|
||||||
|
|
||||||
try {
|
|
||||||
Poco::Data::Session sql_session = Pool_.get();
|
|
||||||
auto sql_query = fmt::format("select max(upgraded), serialNumber, toRelease from history where "
|
|
||||||
"revisionId!='unknown' group by serialNumber, toRelease order by serialNumber, "
|
|
||||||
"toRelease offset={} limit={};)", offset, limit);
|
|
||||||
Poco::Data::Statement sql_statement(sql_session);
|
|
||||||
|
|
||||||
sql_statement << sql_query,
|
|
||||||
Poco::Data::Keywords::into(RecList),
|
|
||||||
Poco::Data::Keywords::now;
|
|
||||||
|
|
||||||
for(const auto &record:RecList) {
|
|
||||||
FMSObjects::DeviceCurrentInfo entry{
|
|
||||||
.serialNumber = record.get<1>(),
|
|
||||||
.revision = record.get<2>(),
|
|
||||||
.upgraded = record.get<0>()
|
|
||||||
};
|
|
||||||
Devices.emplace_back(entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (const Poco::Exception &E) {
|
|
||||||
Logger().log(E);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> void ORM::DB<OpenWifi::HistoryRecordTuple, OpenWifi::FMSObjects::RevisionHistoryEntry>::Convert(const OpenWifi::HistoryRecordTuple &T, OpenWifi::FMSObjects::RevisionHistoryEntry &F ) {
|
template<> void ORM::DB<OpenWifi::HistoryRecordTuple, OpenWifi::FMSObjects::RevisionHistoryEntry>::Convert(const OpenWifi::HistoryRecordTuple &T, OpenWifi::FMSObjects::RevisionHistoryEntry &F ) {
|
||||||
|
|||||||
@@ -22,18 +22,14 @@ namespace OpenWifi {
|
|||||||
class HistoryDB : public ORM::DB<HistoryRecordTuple, FMSObjects::RevisionHistoryEntry> {
|
class HistoryDB : public ORM::DB<HistoryRecordTuple, FMSObjects::RevisionHistoryEntry> {
|
||||||
public:
|
public:
|
||||||
HistoryDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
HistoryDB(OpenWifi::DBType T, Poco::Data::SessionPool & P, Poco::Logger &L);
|
||||||
virtual ~HistoryDB() {};
|
|
||||||
|
|
||||||
bool GetHistory(const std::string &SerialNumber, uint64_t From, uint64_t HowMany,
|
bool GetHistory(const std::string &SerialNumber, uint64_t From, uint64_t HowMany,
|
||||||
FMSObjects::RevisionHistoryEntryVec &History);
|
FMSObjects::RevisionHistoryEntryVec &History);
|
||||||
bool AddHistory(FMSObjects::RevisionHistoryEntry &History);
|
bool AddHistory(FMSObjects::RevisionHistoryEntry &History);
|
||||||
bool AddHistory(const std::string &SerialNumber, const std::string &DeviceType, const std::string &PreviousRevision,
|
bool AddHistory(std::string &SerialNumber, std::string &DeviceType, std::string &PreviousRevision,
|
||||||
const std::string &NewVersion);
|
std::string &NewVersion);
|
||||||
bool DeleteHistory(const std::string &SerialNumber, const std::string &Id);
|
bool DeleteHistory(std::string &SerialNumber, std::string &Id);
|
||||||
bool DeleteHistory(const std::string &SerialNumber);
|
bool DeleteHistory(std::string &SerialNumber);
|
||||||
|
|
||||||
bool GetUnknownDeviceFirmwares(uint64_t offset, uint64_t limit, std::vector<FMSObjects::DeviceCurrentInfo> & Devices);
|
|
||||||
bool GetDeviceFirmwares(uint64_t offset, uint64_t limit, std::vector<FMSObjects::DeviceCurrentInfo> & Devices);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ findbrowser() {
|
|||||||
setfms() {
|
setfms() {
|
||||||
if [ -z ${OWFMS_OVERRIDE+x} ]; then
|
if [ -z ${OWFMS_OVERRIDE+x} ]; then
|
||||||
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/systemEndpoints" \
|
curl ${FLAGS} -X GET "https://${OWSEC}/api/v1/systemEndpoints" \
|
||||||
-H "accept: Application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" > ${result_file}
|
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||||
rawurl="$(cat ${result_file} | jq -r '.endpoints[] | select( .type == "owfms" ) | .uri')"
|
rawurl="$(cat ${result_file} | jq -r '.endpoints[] | select( .type == "owfms" ) | .uri')"
|
||||||
if [[ ! -z "${rawurl}" ]]; then
|
if [[ ! -z "${rawurl}" ]]; then
|
||||||
@@ -110,41 +110,37 @@ fi
|
|||||||
}
|
}
|
||||||
|
|
||||||
logout() {
|
logout() {
|
||||||
curl ${FLAGS} -X DELETE "https://${OWSEC}/api/v1/oauth2/${token}" \
|
curl ${FLAGS} -X DELETE -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Authorization: Bearer ${token}"
|
"https://${OWSEC}/api/v1/oauth2/${token}"
|
||||||
rm -rf token.json
|
rm -rf token.json
|
||||||
}
|
}
|
||||||
|
|
||||||
getfirmwares() {
|
getfirmwares() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/firmwares?deviceType=$1" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/firmwares?deviceType=$1" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
latestfirmware() {
|
latestfirmware() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/firmwares?latestOnly=true&deviceType=$1" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/firmwares?latestOnly=true&deviceType=$1" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
revisions() {
|
revisions() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/firmwares?revisionSet=true" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/firmwares?revisionSet=true" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
devicetypes() {
|
devicetypes() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/firmwares?deviceSet=true" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/firmwares?deviceSet=true" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,10 +152,9 @@ firmwareage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
gethistory() {
|
gethistory() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/revisionHistory/$1" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/revisionHistory/$1" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,161 +166,66 @@ connecteddevice() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
connecteddevices() {
|
connecteddevices() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/connectedDevices" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/connectedDevices" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
devicereport() {
|
devicereport() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/deviceReport" \
|
curl ${FLAGS} -X GET -H "Content-Type: application/json" \
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" > ${result_file}
|
"https://${OWFMS}/api/v1/deviceReport" > ${result_file}
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
setloglevel() {
|
setloglevel() {
|
||||||
payload="{ \"command\" : \"setloglevel\" , \"subsystems\" : [ { \"tag\" : \"$1\" , \"value\" : \"$2\" } ] }"
|
payload="{ \"command\" : \"setloglevel\" , \"subsystems\" : [ { \"tag\" : \"$1\" , \"value\" : \"$2\" } ] }"
|
||||||
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" \
|
|
||||||
-d "$payload"
|
-d "$payload"
|
||||||
}
|
}
|
||||||
|
|
||||||
getloglevels() {
|
getloglevels() {
|
||||||
payload="{ \"command\" : \"getloglevels\" }"
|
payload="{ \"command\" : \"getloglevels\" }"
|
||||||
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" \
|
|
||||||
-d "$payload"
|
-d "$payload"
|
||||||
}
|
}
|
||||||
|
|
||||||
getloglevelnames() {
|
getloglevelnames() {
|
||||||
payload="{ \"command\" : \"getloglevelnames\" }"
|
payload="{ \"command\" : \"getloglevelnames\" }"
|
||||||
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" \
|
|
||||||
-d "$payload"
|
-d "$payload"
|
||||||
}
|
}
|
||||||
|
|
||||||
getsubsystemnames() {
|
getsubsystemnames() {
|
||||||
payload="{ \"command\" : \"getsubsystemnames\" }"
|
payload="{ \"command\" : \"getsubsystemnames\" }"
|
||||||
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" \
|
|
||||||
-d "$payload"
|
-d "$payload"
|
||||||
}
|
}
|
||||||
|
|
||||||
systeminfo() {
|
systeminfo() {
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/system?command=info" \
|
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/system?command=info" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" > ${result_file}
|
||||||
-H "Accept: application/json" > ${result_file}
|
|
||||||
jq < ${result_file}
|
|
||||||
}
|
|
||||||
|
|
||||||
getdeviceinfo() {
|
|
||||||
curl ${FLAGS} -X GET "https://${OWFMS}/api/v1/deviceInformation/$1" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Authorization: Bearer ${token}" \
|
|
||||||
-H "Accept: application/json" > ${result_file}
|
|
||||||
jq < ${result_file}
|
jq < ${result_file}
|
||||||
}
|
}
|
||||||
|
|
||||||
reloadsubsystem() {
|
reloadsubsystem() {
|
||||||
payload="{ \"command\" : \"reload\", \"subsystems\" : [ \"$1\" ] }"
|
payload="{ \"command\" : \"reload\", \"subsystems\" : [ \"$1\" ] }"
|
||||||
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
curl ${FLAGS} -X POST "https://${OWFMS}/api/v1/system" \
|
||||||
-H "Content-Type: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Bearer ${token}" \
|
-H "Authorization: Bearer ${token}" \
|
||||||
-H "Accept: application/json" \
|
|
||||||
-d "$payload"
|
-d "$payload"
|
||||||
}
|
}
|
||||||
|
|
||||||
check_response() {
|
|
||||||
|
|
||||||
if [ -s "$1" ]; then
|
|
||||||
ERROR_CODE="$(jq -r '.ErrorCode' < $1)"
|
|
||||||
|
|
||||||
if [[ -n "$ERROR_CODE" && "$ERROR_CODE" != 'null' ]]; then
|
|
||||||
echo "Error: got HTTP error code $ERROR_CODE, exiting"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Error: result file not found or empty"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
test_service() {
|
|
||||||
echo
|
|
||||||
echo "----------------------"
|
|
||||||
echo "Get system information"
|
|
||||||
echo "----------------------"
|
|
||||||
systeminfo
|
|
||||||
check_response $result_file
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "-----------------"
|
|
||||||
echo "Get device status"
|
|
||||||
echo "-----------------"
|
|
||||||
SECONDS=0
|
|
||||||
TIMEOUT_SECONDS=900
|
|
||||||
|
|
||||||
while (( $SECONDS < $TIMEOUT_SECONDS )); do
|
|
||||||
connecteddevice $1 &>/dev/null
|
|
||||||
DEVICE_STATUS="$(jq -r '.status' < $result_file)"
|
|
||||||
|
|
||||||
if [ "$DEVICE_STATUS" != 'connected' ]; then
|
|
||||||
echo "Waiting for firmware service to report device status, $SECONDS seconds elapsed"
|
|
||||||
sleep 30
|
|
||||||
else
|
|
||||||
jq < $result_file
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
if (( $SECONDS >= $TIMEOUT_SECONDS )); then
|
|
||||||
echo "Error: timed out getting firmware list"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "-----------------"
|
|
||||||
echo "Get firmware list"
|
|
||||||
echo "-----------------"
|
|
||||||
SECONDS=0
|
|
||||||
TIMEOUT_SECONDS=900
|
|
||||||
|
|
||||||
while (( $SECONDS < $TIMEOUT_SECONDS )); do
|
|
||||||
getfirmwares &>/dev/null
|
|
||||||
check_response $result_file
|
|
||||||
FIRMWARE_STATUS="$(jq -r '.firmwares' < $result_file)"
|
|
||||||
|
|
||||||
if [ "$FIRMWARE_STATUS" == '[]' ]; then
|
|
||||||
echo "Waiting for service to retrieve firmware list, $SECONDS seconds elapsed"
|
|
||||||
sleep 30
|
|
||||||
else
|
|
||||||
jq < $result_file
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
if (( $SECONDS >= $TIMEOUT_SECONDS )); then
|
|
||||||
echo "Error: timed out getting firmware list"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
help() {
|
help() {
|
||||||
|
|
||||||
echo "Usage: cli <cmd> [args]"
|
echo "Usage: cli <cmd> [args]"
|
||||||
@@ -345,7 +245,6 @@ help() {
|
|||||||
echo "getsubsystemnames Get the list of subsystems."
|
echo "getsubsystemnames Get the list of subsystems."
|
||||||
echo "systeminfo Get basic system information."
|
echo "systeminfo Get basic system information."
|
||||||
echo "reloadsubsystem <subsystem name> Reload the configuration for a subsystem."
|
echo "reloadsubsystem <subsystem name> Reload the configuration for a subsystem."
|
||||||
echo "test_service <serial> Run a set of CLI commands for testing purposes."
|
|
||||||
echo
|
echo
|
||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
@@ -368,8 +267,6 @@ case "$1" in
|
|||||||
"getsubsystemnames") login; getsubsystemnames; logout ;;
|
"getsubsystemnames") login; getsubsystemnames; logout ;;
|
||||||
"reloadsubsystem") login; reloadsubsystem "$2"; logout ;;
|
"reloadsubsystem") login; reloadsubsystem "$2"; logout ;;
|
||||||
"systeminfo") login; systeminfo ; logout;;
|
"systeminfo") login; systeminfo ; logout;;
|
||||||
"test_service") login; test_service $2; logout;;
|
|
||||||
"getdeviceinfo") login; getdeviceinfo $2; logout;;
|
|
||||||
*) help ;;
|
*) help ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user