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