2016-07-20 17:16:06 +02:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <QJsonDocument>
|
|
|
|
#include <QJsonObject>
|
|
|
|
#include <QJsonValue>
|
|
|
|
#include <QJsonArray>
|
|
|
|
#include <QStringList>
|
2017-07-30 13:32:10 +02:00
|
|
|
#include <QPair>
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
/// JsonSchemaChecker is a very basic implementation of json schema.
|
|
|
|
/// The json schema definition draft can be found at
|
|
|
|
/// http://tools.ietf.org/html/draft-zyp-json-schema-03
|
|
|
|
///
|
|
|
|
/// The following keywords are supported:
|
|
|
|
/// - type
|
|
|
|
/// - required
|
|
|
|
/// - properties
|
|
|
|
/// - items
|
|
|
|
/// - enum
|
|
|
|
/// - minimum
|
|
|
|
/// - maximum
|
|
|
|
/// - addtionalProperties
|
|
|
|
/// - minItems
|
|
|
|
/// - maxItems
|
2017-10-12 11:55:03 +02:00
|
|
|
/// - minLength
|
|
|
|
/// - maxLength
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
class QJsonSchemaChecker
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
QJsonSchemaChecker();
|
|
|
|
virtual ~QJsonSchemaChecker();
|
|
|
|
|
|
|
|
///
|
|
|
|
/// @param schema The schema to use
|
|
|
|
/// @return true upon succes
|
|
|
|
///
|
|
|
|
bool setSchema(const QJsonObject & schema);
|
2017-07-30 13:32:10 +02:00
|
|
|
|
2016-07-20 17:16:06 +02:00
|
|
|
///
|
|
|
|
/// @brief Validate a JSON structure
|
|
|
|
/// @param value The JSON value to check
|
2017-07-30 13:32:10 +02:00
|
|
|
/// @param ignoreRequired Ignore the "required" keyword in hyperion schema. Default is false
|
2017-10-12 11:55:03 +02:00
|
|
|
/// @return The first boolean is true when the arguments is valid according to the schema. The second is true when the schema contains no errors
|
2017-07-30 13:32:10 +02:00
|
|
|
/// @return TODO: Check the Schema in SetSchema() function and remove the QPair result
|
|
|
|
///
|
|
|
|
QPair<bool, bool> validate(const QJsonObject & value, bool ignoreRequired = false);
|
|
|
|
|
|
|
|
///
|
|
|
|
/// @brief Auto correct a JSON structure
|
|
|
|
/// @param value The JSON value to correct
|
|
|
|
/// @param ignoreRequired Ignore the "required" keyword in hyperion schema. Default is false
|
|
|
|
/// @return The corrected JSON structure
|
2016-07-20 17:16:06 +02:00
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
QJsonObject getAutoCorrectedConfig(const QJsonObject & value, bool ignoreRequired = false);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// @return A list of error messages
|
|
|
|
///
|
2020-08-08 23:12:43 +02:00
|
|
|
QStringList getMessages() const;
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
///
|
|
|
|
/// Validates a json-value against a given schema. Results are stored in the members of this
|
|
|
|
/// class (_error & _messages)
|
|
|
|
///
|
|
|
|
/// @param[in] value The value to validate
|
|
|
|
/// @param[in] schema The schema against which the value is validated
|
|
|
|
///
|
|
|
|
void validate(const QJsonValue &value, const QJsonObject & schema);
|
|
|
|
|
|
|
|
///
|
|
|
|
/// Adds the given message to the message-queue (with reference to current line-number)
|
|
|
|
///
|
|
|
|
/// @param[in] message The message to add to the queue
|
|
|
|
///
|
2017-03-04 22:17:42 +01:00
|
|
|
void setMessage(const QString & message);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
private:
|
|
|
|
// attribute check functions
|
|
|
|
///
|
|
|
|
/// Checks if the given value is of the specified type. If the type does not match _error is set
|
|
|
|
/// to true and an error-message is added to the message-queue
|
|
|
|
///
|
|
|
|
/// @param[in] value The given value
|
|
|
|
/// @param[in] schema The specified type (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkType(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2017-10-12 11:55:03 +02:00
|
|
|
|
2016-07-20 17:16:06 +02:00
|
|
|
///
|
|
|
|
/// Checks is required properties of an json-object exist and if all properties are of the
|
|
|
|
/// correct format. If this is not the case _error is set to true and an error-message is added
|
|
|
|
/// to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param[in] value The given json-object
|
|
|
|
/// @param[in] schema The schema of the json-object
|
|
|
|
///
|
|
|
|
void checkProperties(const QJsonObject & value, const QJsonObject & schema);
|
|
|
|
|
fix: Rewrite-/LatchTime LedDevice definitions (#785) (#799)
* Fix Rewrite/Latch Time
* dependencies can now be specified in the schema
Signed-off-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* dependencies can now be specified in the schema
Signed-off-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* correct default config
Signed-off-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* dependencies part 2
Signed-off-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* Update README.md
* build: Update Windows to Qt5.15 (#798)
* Update compile howto
- to qt5.15
- minimal install overhead
- sync with vscode and cmake
* Update docs with more input
gh actions windows: Qt5.15 and msvc2019
* fix: Azure build
* feat: Add Trapezoid to LED Layout (#791)
* Update schema-ledConfig.json
extend schema with corner points (vertcal and horizontal values in percent)
* Update conf_leds.html
input fields for corner points
* Update content_leds.js
add corner values and calculation of led rows
* Update de.json
german title for corners
* CHanges 26.12.2019 Correction and PowerOff add
* GrabberFix PiCam
* VType as QString
* Unused variable deletet
* Missing new paramneters for GrabberFix
* Error json
* JSon error by user
* Crosscompile SutnikElf frok
* Warning unused variable
* Revert "Crosscompile SutnikElf frok"
This reverts commit 443fe8009021f15b617292868c778499c13282a7.
* Fixing a linting error
* Adding Grabber Override Names
* Adding more Grabber Fix translations
* Missed one
* remove V4L2 Grabber Fix and Power Button from Dashboard
Signed-off-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* Setting some limits to the trapezoid
Co-authored-by: SputnikElf <58911932+SputnikElf@users.noreply.github.com>
Co-authored-by: SputnikElf <sputnikelf@gmx.de>
Co-authored-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
* add Hue EntertainmentAPI + Forwarder & other Fixes (#592)
* whitespaces + typo fixes
* JS / LGTM fixes
* SSDP Handler crash fix
* MessageForwarder handlePriorityChanges Slave fixes
* use aboutToQuit Signal
* complete rewriten Hue Entertainment API structure
combined Philips Hue and Entertainment API
with new MbedTLS based SSL UDP Provider
* add required cross-compile submodules
* logical rebuild fn: initLeds, setLights + new logs
-more detailed checks and error handling inside iniLeds and setLights
- logical script procedure before ProviderUdpSSL init
- first steps for multiple ProviderUdpSSL usage
- better fallback support to old RestAPI, if entertainment api is not supported
- just 4 u LordGrey: new log fn for cosmetic config outputs ;)
* add OSX CompileHowTo - undo from CrossCompileHowTo
* whitespace fixes
* lightID toString fix
* fix unsigned int E-API + debug output
* bugfixes, reworked black signal detection, wizard:
- change device config field light-ids from int to string -> real unsigned int fix
- add signal detection brightness minimum threshold value
0.0 for 0% brightness - 1.0 for 100% brightness to count for blacklight signal detection
reason: input may not 100% black, like mine - i have a deep dark gray input signal
-> my threshold value is set to 0.005 for 0.5% minimum brightness = 1 (from max 255) to count as black
- wizard optimations, with fallback without entertainment support (beta state)
- whitespace fixes
* cleanup + minor fixes
* change fixed Hue UPD SSL config to _devConfig paras
* Hotfix SSL Connection, new light models, wizard:
- Fix UPD SSL Connection failed Problems
- add new supported gamut C light models: LCG002, LCA001, LCA002, LCA003
- wizard: extend fallback support to classic mode + hints
* whitespace, typo fix
* uncheck useEntertainmentAPI, if noAPISupport detected + hint
* coredump fix -> add _blackLightsTimer nullptr init
* code cleanup / remove old debugs + whitespacefixes
* add gamut C LCP001, LCP002
* SSL UDP config made more flexible + remove qDebug
-> switch to hyerion.ng _log
-> replace logCommand with verbose
-> code cleanups etc...
* extended mbedtls debugging infos
* add adjustable ssl timeout settings
* error handling
* streamdebugger bugfixes
* UPDSSL psk / psk_identity bugfixes! + hue wizard fn typo fix +
- verbose option available without dependencies
- whitespace fixes
* Philips Hue Assistant now recognizes non-original bridges better...
+ Added note if no clientkey is set when using the entertainment API
+ User creation (+ clientkey) for non-original bridges can now also be used
+ Minor changes and bug fixes
* CMAKE mbedTLS detection
* minor bug fixes + code cleanups
* FindMbedTLS.cmake remove Path-Hints + wizard.js: ajax timeout handling
Test - content_grabber.js: run relevant code only, if V4L2_AVAIL is true:
conf_grabber don't displays other devices, if V4L2 is not available
* compile mbedtls via cmake as static lib
* remove libmbedtls-dev from compileHowto / scripts
* Fix Windows build
* Fix windows build (part 2)
* removed unnecessary osx x11 include directory path
* QTimer Shutdown bugfix
* cmake win32 fix + minor bugfixes
* cmake debug msg used mbedtls libs
* Bugfix: noSignalDetection wasn't switchedOn again
if no signal was previously detected
* Some code fixes based on alerts from lgtm.com
Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
* Update devices allowing rewriteTime
* Fix typo
* Add missing "general_btn_saverestart" text to en-file
Co-authored-by: Paulchen-Panther <Paulchen-Panter@protonmail.com>
Co-authored-by: Paulchen Panther <16664240+Paulchen-Panther@users.noreply.github.com>
Co-authored-by: brindosch <edeltraud70@gmx.de>
Co-authored-by: Ben Williams <desertblade@gmail.com>
Co-authored-by: SputnikElf <58911932+SputnikElf@users.noreply.github.com>
Co-authored-by: SputnikElf <sputnikelf@gmx.de>
Co-authored-by: SJunkies <41368976+SJunkies@users.noreply.github.com>
2020-05-26 22:28:36 +02:00
|
|
|
///
|
|
|
|
/// Checks whether certain properties of a JSON object exist under certain dependencies and are the same.
|
|
|
|
/// If this is not the case _error is set to true and an error-message is added
|
|
|
|
/// to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param[in] value The given json-object
|
|
|
|
/// @param[in] schema The schema of the json-object
|
|
|
|
///
|
|
|
|
void checkDependencies(const QJsonObject & value, const QJsonObject & schema);
|
|
|
|
|
2016-07-20 17:16:06 +02:00
|
|
|
///
|
|
|
|
/// Verifies the additional configured properties of an json-object. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param value The given json-object
|
|
|
|
/// @param schema The schema for the json-object
|
|
|
|
/// @param ignoredProperties The properties that were ignored
|
|
|
|
///
|
|
|
|
void checkAdditionalProperties(const QJsonObject & value, const QJsonValue & schema, const QStringList & ignoredProperties);
|
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if the given value is larger or equal to the specified value. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param[in] value The given value
|
|
|
|
/// @param[in] schema The minimum value (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMinimum(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if the given value is smaller or equal to the specified value. If this is not the
|
|
|
|
/// case _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param[in] value The given value
|
|
|
|
/// @param[in] schema The maximum value (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMaximum(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2017-03-24 10:17:36 +01:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if the given value is hugher than the specified value. If this is the
|
|
|
|
/// case _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
2017-10-12 11:55:03 +02:00
|
|
|
/// @param value The given value
|
2017-03-24 10:17:36 +01:00
|
|
|
/// @param schema The minimum size specification (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMinLength(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2017-03-24 10:17:36 +01:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if the given value is smaller than the specified value. If this is the
|
|
|
|
/// case _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
2017-10-12 11:55:03 +02:00
|
|
|
/// @param value The given value
|
2017-03-24 10:17:36 +01:00
|
|
|
/// @param schema The maximum size specification (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMaxLength(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Validates all the items of an array.
|
|
|
|
///
|
|
|
|
/// @param value The json-array
|
|
|
|
/// @param schema The schema for the items in the array
|
|
|
|
///
|
|
|
|
void checkItems(const QJsonValue & value, const QJsonObject & schema);
|
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if a given array has at least a minimum number of items. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param value The json-array
|
|
|
|
/// @param schema The minimum size specification (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMinItems(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if a given array has at most a maximum number of items. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param value The json-array
|
|
|
|
/// @param schema The maximum size specification (as json-value)
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkMaxItems(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if a given array contains only unique items. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param value The json-array
|
|
|
|
/// @param schema Bool to enable the check (as json-value)
|
|
|
|
///
|
|
|
|
void checkUniqueItems(const QJsonValue & value, const QJsonValue & schema);
|
|
|
|
|
|
|
|
///
|
|
|
|
/// Checks if an enum value is actually a valid value for that enum. If this is not the case
|
|
|
|
/// _error is set to true and an error-message is added to the message-queue.
|
|
|
|
///
|
|
|
|
/// @param value The enum value
|
|
|
|
/// @param schema The enum schema definition
|
|
|
|
///
|
2017-07-30 13:32:10 +02:00
|
|
|
void checkEnum(const QJsonValue & value, const QJsonValue & schema, const QJsonValue & defaultValue);
|
2016-07-20 17:16:06 +02:00
|
|
|
|
2020-03-27 23:13:58 +01:00
|
|
|
///
|
|
|
|
/// @brief Return the "default" value as string. If not found, an empty string is output
|
|
|
|
///
|
|
|
|
/// @param value The JSON value to search
|
|
|
|
/// @return The "default" value as string
|
|
|
|
///
|
|
|
|
QString getDefaultValue(const QJsonValue & value);
|
|
|
|
|
2016-07-20 17:16:06 +02:00
|
|
|
private:
|
|
|
|
/// The schema of the entire json-configuration
|
|
|
|
QJsonObject _qSchema;
|
2016-10-09 22:22:17 +02:00
|
|
|
/// ignore the required value in json schema
|
|
|
|
bool _ignoreRequired;
|
2017-07-30 13:32:10 +02:00
|
|
|
/// Auto correction variable
|
|
|
|
QString _correct;
|
|
|
|
/// The auto corrected json-configuration
|
|
|
|
QJsonObject _autoCorrected;
|
2016-07-20 17:16:06 +02:00
|
|
|
/// The current location into a json-configuration structure being checked
|
2017-03-04 22:17:42 +01:00
|
|
|
QStringList _currentPath;
|
2016-07-20 17:16:06 +02:00
|
|
|
/// The result messages collected during the schema verification
|
2017-03-04 22:17:42 +01:00
|
|
|
QStringList _messages;
|
2016-07-20 17:16:06 +02:00
|
|
|
/// Flag indicating an error occured during validation
|
|
|
|
bool _error;
|
2017-07-30 13:32:10 +02:00
|
|
|
/// Flag indicating an schema error occured during validation
|
|
|
|
bool _schemaError;
|
2016-07-20 17:16:06 +02:00
|
|
|
};
|