forked from ondra/colnod-connector
Merge branch 'fetaure/3-add-ci-gitlab-runner' into 'master'
Resolve "add CI ( gitlab-runner )" Closes #3 See merge request spaceti-app/integrations/acs/colnod-connector!4
This commit is contained in:
commit
83c77c9b1c
3
.gitignore
vendored
3
.gitignore
vendored
@ -35,6 +35,9 @@ Thumbs.db
|
||||
/.qmake.cache
|
||||
/.qmake.stash
|
||||
|
||||
# build directory
|
||||
build
|
||||
|
||||
# qtcreator generated files
|
||||
*.pro.user*
|
||||
|
||||
|
||||
32
.gitlab-ci.yml
Normal file
32
.gitlab-ci.yml
Normal file
@ -0,0 +1,32 @@
|
||||
# for
|
||||
stages:
|
||||
- build
|
||||
- test
|
||||
|
||||
# ########
|
||||
# Build
|
||||
##########
|
||||
build: # name of task
|
||||
stage: build # in what stage it will run ( 1. build then test etc )
|
||||
tags: # Tags are used to choose correct gitlab-runner
|
||||
- hw # spaceti-runner server has running runners and one has tag 'hw'
|
||||
script: # run in bash
|
||||
- mkdir -p build
|
||||
- cd build
|
||||
- qmake ../colnod-connector.pro
|
||||
- make -j8
|
||||
cache:
|
||||
paths:
|
||||
- build/
|
||||
|
||||
|
||||
# ########
|
||||
# Test
|
||||
##########
|
||||
test: # name of task
|
||||
stage: test # in what stage it will run ( 1. build then test etc )
|
||||
tags: # Tags are used to choose correct gitlab-runner
|
||||
- hw # spaceti-runner server has running runners and one has tag 'hw'
|
||||
script: # run in bash
|
||||
- cd build
|
||||
- make check test
|
||||
304
Insomnia_2019-10-07.yaml
Normal file
304
Insomnia_2019-10-07.yaml
Normal file
@ -0,0 +1,304 @@
|
||||
_type: export
|
||||
__export_format: 4
|
||||
__export_date: 2019-10-07T11:07:18.147Z
|
||||
__export_source: insomnia.desktop.app:v7.0.0
|
||||
resources:
|
||||
- _id: req_f0797b6411b144f0bf0a40d9300ee92f
|
||||
authentication:
|
||||
disabled: false
|
||||
password: E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0
|
||||
type: basic
|
||||
username: spaceti
|
||||
body:
|
||||
mimeType: application/json
|
||||
text: >-
|
||||
{
|
||||
"username": "spaceti",
|
||||
"password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0"
|
||||
}
|
||||
created: 1569905755136
|
||||
description: ""
|
||||
headers:
|
||||
- id: pair_061d15d1294e412caca8300559541695
|
||||
name: content-type
|
||||
value: application/json
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755136
|
||||
method: POST
|
||||
modified: 1570026752164
|
||||
name: Login user
|
||||
parameters: []
|
||||
parentId: fld_9ef1d96e0e6d40ef9094250114269496
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/AaaManager/authSession"
|
||||
_type: request
|
||||
- _id: fld_9ef1d96e0e6d40ef9094250114269496
|
||||
created: 1569905755142
|
||||
description: Login information ( token )
|
||||
environment: {}
|
||||
environmentPropertyOrder: null
|
||||
metaSortKey: -1569905755142
|
||||
modified: 1569905755142
|
||||
name: login
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: request_group
|
||||
- _id: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
created: 1569905755149
|
||||
description: "Colnod system: [Product information](http://produkty.colsys.cz/colnod)
|
||||
Jira issues: [Communicaiton with
|
||||
Colnod](https://spaceti.atlassian.net/secure/RapidBoard.jspa?rapidView=78\
|
||||
&projectKey=INT&modal=detail&selectedIssue=INT-3563)"
|
||||
modified: 1569905755149
|
||||
name: Colnod server 1.0.0
|
||||
parentId: null
|
||||
_type: workspace
|
||||
- _id: req_00f9f99d933c4638900385ffbbd4f8f7
|
||||
authentication:
|
||||
disabled: false
|
||||
token: "{% response 'body', 'req_f0797b6411b144f0bf0a40d9300ee92f',
|
||||
'b64::JC5pZA==::46b', 'no-history' %}"
|
||||
type: bearer
|
||||
body:
|
||||
mimeType: application/json
|
||||
text: ""
|
||||
created: 1569905755134
|
||||
description: ""
|
||||
headers:
|
||||
- id: pair_a2a3c43a20f64efbb8a4752c7e983c8e
|
||||
name: Content-Type
|
||||
value: application/json
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755134
|
||||
method: POST
|
||||
modified: 1570444685408
|
||||
name: Get subjects Bearer
|
||||
parameters: []
|
||||
parentId: fld_2fb4c2cef1f44cff83d6b00fe0886384
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/SubjectManager/getSubjects"
|
||||
_type: request
|
||||
- _id: fld_2fb4c2cef1f44cff83d6b00fe0886384
|
||||
created: 1569905755140
|
||||
description: Operations about user
|
||||
environment: {}
|
||||
environmentPropertyOrder: null
|
||||
metaSortKey: -1569905755140
|
||||
modified: 1569905755140
|
||||
name: user
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: request_group
|
||||
- _id: req_1c6b6e7783ac4eec95802f655899b9ea
|
||||
authentication:
|
||||
disabled: false
|
||||
password: ""
|
||||
type: basic
|
||||
username: "{% response 'body', 'req_f0797b6411b144f0bf0a40d9300ee92f',
|
||||
'b64::JC5pZA==::46b', 'never' %}"
|
||||
body:
|
||||
mimeType: application/json
|
||||
text: ""
|
||||
created: 1570444564217
|
||||
description: ""
|
||||
headers:
|
||||
- id: pair_a2a3c43a20f64efbb8a4752c7e983c8e
|
||||
name: Content-Type
|
||||
value: application/json
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755132.5
|
||||
method: POST
|
||||
modified: 1570444765270
|
||||
name: Get subjects
|
||||
parameters: []
|
||||
parentId: fld_2fb4c2cef1f44cff83d6b00fe0886384
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/SubjectManager/getSubjects"
|
||||
_type: request
|
||||
- _id: req_9e42a5023f9d4235a5de099cd7573d2b
|
||||
authentication:
|
||||
disabled: false
|
||||
password: ""
|
||||
type: basic
|
||||
username: "{% response 'body', 'req_f0797b6411b144f0bf0a40d9300ee92f',
|
||||
'b64::JC5pZA==::46b', 'never' %}"
|
||||
body:
|
||||
mimeType: application/json
|
||||
text: ""
|
||||
created: 1569905755131
|
||||
description: ""
|
||||
headers:
|
||||
- disabled: false
|
||||
id: pair_e888b6c679d74b0988f0dd2d77690383
|
||||
name: Content-Type
|
||||
value: application/json
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755131
|
||||
method: POST
|
||||
modified: 1570445587166
|
||||
name: Get Tokens
|
||||
parameters: []
|
||||
parentId: fld_36a4be72380440a0ace83ad508a0458d
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/TokenManager/getTokens/"
|
||||
_type: request
|
||||
- _id: fld_36a4be72380440a0ace83ad508a0458d
|
||||
created: 1569905755138
|
||||
description: Working with tokens ( keys )
|
||||
environment: {}
|
||||
environmentPropertyOrder: null
|
||||
metaSortKey: -1569905755138
|
||||
modified: 1569934361048
|
||||
name: Token Manager
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: request_group
|
||||
- _id: req_4f99d61a83c14da29882cc80c07ddf54
|
||||
authentication:
|
||||
token: "{% response 'body', 'req_f0797b6411b144f0bf0a40d9300ee92f',
|
||||
'b64::JC5pZA==::46b', 'never' %}"
|
||||
type: bearer
|
||||
body: {}
|
||||
created: 1569905755127
|
||||
description: ""
|
||||
headers: []
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755129
|
||||
method: POST
|
||||
modified: 1569938955854
|
||||
name: Set Tokens
|
||||
parameters: []
|
||||
parentId: fld_36a4be72380440a0ace83ad508a0458d
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: /TokenManager/setTokens
|
||||
_type: request
|
||||
- _id: req_fd2e096f45554b46b31755564a0932bf
|
||||
authentication:
|
||||
disabled: false
|
||||
password: ""
|
||||
type: basic
|
||||
username: "{% response 'body', 'req_f0797b6411b144f0bf0a40d9300ee92f',
|
||||
'b64::JC5pZA==::46b', 'never' %}"
|
||||
body: {}
|
||||
created: 1569934364782
|
||||
description: ""
|
||||
headers: []
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755130.5
|
||||
method: POST
|
||||
modified: 1570445314172
|
||||
name: Get Token Subject
|
||||
parameters: []
|
||||
parentId: fld_8d34eca167ef426c8aa998c98bbe74e2
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/OpenManager/getTokenSubject"
|
||||
_type: request
|
||||
- _id: fld_8d34eca167ef426c8aa998c98bbe74e2
|
||||
created: 1569934364777
|
||||
description: Working with tokens ( keys )
|
||||
environment: {}
|
||||
environmentPropertyOrder: null
|
||||
metaSortKey: -1569905755088
|
||||
modified: 1569934370959
|
||||
name: Open Manager
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: request_group
|
||||
- _id: req_7007bb1f6a0243a7b0568741f691f6d1
|
||||
authentication:
|
||||
disabled: false
|
||||
password: E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0
|
||||
type: basic
|
||||
username: spaceti
|
||||
body:
|
||||
mimeType: application/json
|
||||
text: >-
|
||||
{
|
||||
"username": "spaceti",
|
||||
"password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0"
|
||||
}
|
||||
created: 1570025458784
|
||||
description: ""
|
||||
headers:
|
||||
- id: pair_74b4df5d54d1446a90e6a668d373fb79
|
||||
name: Content-Type
|
||||
value: application/json
|
||||
isPrivate: false
|
||||
metaSortKey: -1569905755129.75
|
||||
method: POST
|
||||
modified: 1570030518745
|
||||
name: Get Token Subject Full authorization
|
||||
parameters: []
|
||||
parentId: fld_8d34eca167ef426c8aa998c98bbe74e2
|
||||
settingDisableRenderRequestBody: false
|
||||
settingEncodeUrl: true
|
||||
settingRebuildPath: true
|
||||
settingSendCookies: true
|
||||
settingStoreCookies: true
|
||||
url: "{{ base_url }}/OpenManager/getTokenSubject"
|
||||
_type: request
|
||||
- _id: env_7bc4918f1ec5467393a2ab36a460e4d0
|
||||
color: null
|
||||
created: 1569905755147
|
||||
data:
|
||||
base_url: "{{ scheme }}://{{ host }}{{ base_path }}"
|
||||
dataPropertyOrder:
|
||||
"&":
|
||||
- base_url
|
||||
isPrivate: false
|
||||
metaSortKey: 1569905755147
|
||||
modified: 1569905805832
|
||||
name: Base environment
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: environment
|
||||
- _id: jar_61bbb3fdc5ee80a49ee817b3e5341053a6022960
|
||||
cookies:
|
||||
- creation: 2019-10-01T04:57:46.521Z
|
||||
domain: 192.168.1.3
|
||||
hostOnly: true
|
||||
httpOnly: true
|
||||
id: "6291984803147272"
|
||||
key: JSESSIONID
|
||||
lastAccessed: 2019-10-07T10:53:10.794Z
|
||||
path: /
|
||||
secure: true
|
||||
value: F2CB995532DC96C0757326A9057551DA
|
||||
created: 1569905764431
|
||||
modified: 1570445590794
|
||||
name: Default Jar
|
||||
parentId: wrk_43652e59afaf4825a8bbbf31e346f616
|
||||
_type: cookie_jar
|
||||
- _id: env_92b9543a27e847689c951d1b1eeff229
|
||||
color: "#cb5dc2"
|
||||
created: 1569905755144
|
||||
data:
|
||||
base_path: /
|
||||
host: 192.168.1.3:8443
|
||||
scheme: https
|
||||
dataPropertyOrder: null
|
||||
isPrivate: false
|
||||
metaSortKey: 1569905755144
|
||||
modified: 1569935791597
|
||||
name: colnod-test
|
||||
parentId: env_7bc4918f1ec5467393a2ab36a460e4d0
|
||||
_type: environment
|
||||
@ -2,5 +2,5 @@
|
||||
|
||||
|
||||
TOKEN=$(curl -k --user "spaceti:E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0" -d '{"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0","username":"spaceti"}' -H "Content-Type: application/json" https://192.168.1.3:8443/AaaManager/authSession 2>/dev/null | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]')
|
||||
|
||||
echo TOKEN
|
||||
curl -kv -u "$TOKEN:" -X POST https://192.168.1.3:8443/OpenManager/getTokenSubject
|
||||
|
||||
37
http/Curl.txt
Normal file
37
http/Curl.txt
Normal file
@ -0,0 +1,37 @@
|
||||
|
||||
///SubjectManager/getSubjects
|
||||
RESPONSE
|
||||
HTTP/1.1 200
|
||||
X-Content-Type-Options: nosniff
|
||||
X-XSS-Protection: 1; mode=block
|
||||
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
|
||||
Pragma: no-cache
|
||||
Expires: 0
|
||||
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
|
||||
X-Frame-Options: DENY
|
||||
Set-Cookie: JSESSIONID=77278D21902AE1DE75E43204C2770545;path=/;Secure;HttpOnly
|
||||
Content-Type: application/json;charset=UTF-8
|
||||
Transfer-Encoding: chunked
|
||||
Date: Thu, 03 Oct 2019 11:12:03 GMT
|
||||
|
||||
REQUEST
|
||||
POST /SubjectManager/getSubjects HTTP/1.1
|
||||
Host: 192.168.1.3:8443
|
||||
Authorization: Basic ODkwZjllNmMtMDIxNi00ZThiLWI2MjgtMjViOGI2ZmFiNWM4Og==
|
||||
User-Agent: curl/7.65.3
|
||||
Accept: */*
|
||||
|
||||
|
||||
|
||||
POST /AaaManager/authSession HTTP/1.1
|
||||
Host: localhost:8080
|
||||
Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==
|
||||
User-Agent: curl/7.65.3
|
||||
Accept: */*
|
||||
Content-Type: application/json
|
||||
Content-Length: 164
|
||||
|
||||
{
|
||||
"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0",
|
||||
"username":"spaceti"
|
||||
}
|
||||
12
http/Insomnia.txt
Normal file
12
http/Insomnia.txt
Normal file
@ -0,0 +1,12 @@
|
||||
POST /OpenManager/getTokenSubject HTTP/1.1
|
||||
Host: localhost:8080
|
||||
Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==
|
||||
User-Agent: insomnia/7.0.0
|
||||
Content-Type: application/json
|
||||
Accept: */*
|
||||
Content-Length: 173
|
||||
|
||||
{
|
||||
"username": "spaceti",
|
||||
"password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0"
|
||||
}
|
||||
24
http/Qt requests.txt
Normal file
24
http/Qt requests.txt
Normal file
@ -0,0 +1,24 @@
|
||||
POST /AaaManager/authSession HTTP/1.1
|
||||
Host: localhost:8080
|
||||
Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==
|
||||
Content-Type: application/json; charset=UTF-8
|
||||
Content-Length: 178
|
||||
Connection: Keep-Alive
|
||||
Accept-Encoding: gzip, deflate
|
||||
Accept-Language: en-AI,*
|
||||
User-Agent: Mozilla/5.0
|
||||
|
||||
{
|
||||
"password": "E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0",
|
||||
"username": "spaceti"
|
||||
}
|
||||
|
||||
|
||||
//no data because cant get token
|
||||
POST /SubjectManager/getSubjects HTTP/1.1
|
||||
Host: localhost:8080
|
||||
Content-Length: 0
|
||||
Connection: Keep-Alive
|
||||
Accept-Encoding: gzip, deflate
|
||||
Accept-Language: en-AI,*
|
||||
User-Agent: Mozilla/5.0
|
||||
5
http/sendingRequestBySSLSocket.txt
Normal file
5
http/sendingRequestBySSLSocket.txt
Normal file
@ -0,0 +1,5 @@
|
||||
POST /SubjectManager/getSubjects HTTP/1.1
|
||||
Host: 192.168.1.3:8443
|
||||
Authorization: Basic " + tkn.toUtf8().toBase64() + "
|
||||
User-Agent: curl/7.65.3
|
||||
Accept: */*
|
||||
@ -2,8 +2,18 @@ INCLUDEPATH += $$PWD
|
||||
#SRC_DIR = $$PWD
|
||||
message($$PWD)
|
||||
SOURCES += \
|
||||
$$PWD/requestmanager.cpp
|
||||
$$PWD/databasemanager.cpp \
|
||||
$$PWD/dataprocessor.cpp \
|
||||
$$PWD/entity.cpp \
|
||||
$$PWD/requestmanager.cpp \
|
||||
$$PWD/subject.cpp \
|
||||
$$PWD/token.cpp
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/requestmanager.h
|
||||
$$PWD/databasemanager.h \
|
||||
$$PWD/dataprocessor.h \
|
||||
$$PWD/entity.h \
|
||||
$$PWD/requestmanager.h \
|
||||
$$PWD/subject.h \
|
||||
$$PWD/token.h
|
||||
message($$SOURCES)
|
||||
|
||||
50
src/colnod/databasemanager.cpp
Normal file
50
src/colnod/databasemanager.cpp
Normal file
@ -0,0 +1,50 @@
|
||||
#include "databasemanager.h"
|
||||
|
||||
DatabaseManager::DatabaseManager(QString host, QString dbName, QString user, QString password)
|
||||
{
|
||||
|
||||
db = QSqlDatabase::addDatabase("QPSQL");
|
||||
|
||||
db.setDatabaseName(dbName);
|
||||
db.setHostName(host);
|
||||
db.setUserName(user);
|
||||
db.setPassword(password);
|
||||
opened = db.open();
|
||||
if (!opened)
|
||||
{
|
||||
qDebug() << "Opening error" + db.lastError().text();
|
||||
}
|
||||
query = QSqlQuery("query", db);
|
||||
}
|
||||
|
||||
void DatabaseManager::saveSubject(Subject subject, QString table)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
void DatabaseManager::saveToken(Subject subject, QString table)
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
|
||||
QString DatabaseManager::getTestMessage(int id)
|
||||
{
|
||||
query.prepare("SELECT message FROM test WHERE id = :id");
|
||||
query.bindValue(":id", id);
|
||||
query.exec();
|
||||
query.next();
|
||||
//qDebug() << query.value(0);
|
||||
return query.value(0).toString();
|
||||
}
|
||||
|
||||
void DatabaseManager::createTestRecord(QString msg)
|
||||
{
|
||||
query.exec("SELECT MAX(id) FROM test");
|
||||
query.next();
|
||||
int id = query.value(0).toInt() + 1;
|
||||
QString statement = QString("INSERT INTO test (id, message) VALUES (%1, '%2')").arg(id).arg(msg);
|
||||
query.exec(statement);
|
||||
query.next();
|
||||
qDebug() << "U inserted new row, id: " << id << "msg: " << getTestMessage(id);
|
||||
|
||||
}
|
||||
38
src/colnod/databasemanager.h
Normal file
38
src/colnod/databasemanager.h
Normal file
@ -0,0 +1,38 @@
|
||||
#ifndef DATABASEMANAGER_H
|
||||
#define DATABASEMANAGER_H
|
||||
#include <QSql>
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
#include <QSqlError>
|
||||
|
||||
#include <QVariant>
|
||||
#include <QDebug>
|
||||
#include "subject.h"
|
||||
#include "token.h"
|
||||
|
||||
|
||||
class DatabaseManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
DatabaseManager(QString host, QString dbName, QString user, QString password);
|
||||
|
||||
void saveSubject(Subject subject, QString table);
|
||||
void saveToken(Subject subject, QString table);
|
||||
|
||||
QString getTestMessage(int id);
|
||||
void createTestRecord(QString msg);
|
||||
|
||||
|
||||
bool getOpened() {return opened;}
|
||||
|
||||
private:
|
||||
QSqlDatabase db;
|
||||
QSqlQuery query;
|
||||
|
||||
bool opened;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // DATABASEMANAGER_H
|
||||
56
src/colnod/dataprocessor.cpp
Normal file
56
src/colnod/dataprocessor.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
#include "dataprocessor.h"
|
||||
|
||||
DataProcessor::DataProcessor()
|
||||
{
|
||||
|
||||
db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12");
|
||||
reqMan = new RequestManager;
|
||||
}
|
||||
|
||||
void DataProcessor::processSubjects()
|
||||
{
|
||||
reqMan->getSubjects();
|
||||
QEventLoop loop;
|
||||
QObject::connect(reqMan, &RequestManager::responseReady, &loop, &QEventLoop::quit);
|
||||
loop.exec();
|
||||
prepareSubjectJson(reqMan->getResponse());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
QUuid DataProcessor::getSubjectId(const QString &email) const
|
||||
{
|
||||
auto subject = this->getSubjectByEmail(email);
|
||||
if (!subject)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return subject->getId();
|
||||
}
|
||||
|
||||
Subject *DataProccesor::getSubjectById(const QUuid &id) const
|
||||
{
|
||||
return this->subjectsById.value(id);
|
||||
}
|
||||
|
||||
Subject DataProcessor::getSubjectByEmail(const QString &email) const
|
||||
{
|
||||
return this->subjectsByEmail.value(email);
|
||||
}
|
||||
|
||||
Token *Client::getTokenById(const QUuid &id) const
|
||||
{
|
||||
return this->tokensById.value(id);
|
||||
}
|
||||
|
||||
Token *Client::getTokenByData(const QString &data) const
|
||||
{
|
||||
return this->tokensByData.value(data);
|
||||
}*/
|
||||
|
||||
void DataProcessor::prepareSubjectJson(QString json)
|
||||
{
|
||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||
subjectArr = doc.object()["items"].toArray();
|
||||
}
|
||||
41
src/colnod/dataprocessor.h
Normal file
41
src/colnod/dataprocessor.h
Normal file
@ -0,0 +1,41 @@
|
||||
#ifndef DATAPROCESSOR_H
|
||||
#define DATAPROCESSOR_H
|
||||
|
||||
#include "token.h"
|
||||
#include "subject.h"
|
||||
#include "requestmanager.h"
|
||||
#include "databasemanager.h"
|
||||
#include <QJsonDocument>
|
||||
#include <qjsonarray.h>
|
||||
|
||||
|
||||
|
||||
class DataProcessor : public QObject
|
||||
{
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DataProcessor();
|
||||
|
||||
void processSubjects();
|
||||
|
||||
Subject *getSubjectById(const QUuid &id) const;
|
||||
Subject *getSubjectByEmail(const QString &email) const;
|
||||
QUuid getSubjectId(const QString &email) const;
|
||||
|
||||
Token *getTokenById(const QUuid &id) const;
|
||||
Token *getTokenByData(const QString &data) const;
|
||||
|
||||
private slots:
|
||||
void prepareSubjectJson(QString json);
|
||||
|
||||
private:
|
||||
RequestManager *reqMan;
|
||||
DatabaseManager *db;
|
||||
QJsonArray subjectArr;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // DATAPROCESSOR_H
|
||||
52
src/colnod/entity.cpp
Normal file
52
src/colnod/entity.cpp
Normal file
@ -0,0 +1,52 @@
|
||||
#include <QJsonObject>
|
||||
#include "entity.h"
|
||||
|
||||
const QUuid &Entity::getId() const {
|
||||
return id;
|
||||
}
|
||||
|
||||
void Entity::setId(const QUuid &id) {
|
||||
Entity::id = id;
|
||||
}
|
||||
|
||||
const QString &Entity::getName() const {
|
||||
return name;
|
||||
}
|
||||
|
||||
void Entity::setName(const QString &name) {
|
||||
Entity::name = name;
|
||||
}
|
||||
|
||||
const QString &Entity::getDescription() const {
|
||||
return description;
|
||||
}
|
||||
|
||||
void Entity::setDescription(const QString &description) {
|
||||
Entity::description = description;
|
||||
}
|
||||
|
||||
uint64_t Entity::getLastUpdate() const {
|
||||
return lastUpdate;
|
||||
}
|
||||
|
||||
void Entity::setLastUpdate(uint64_t lastUpdate) {
|
||||
this->lastUpdate = lastUpdate;
|
||||
}
|
||||
|
||||
void Entity::fromJSON(const QJsonObject &json) {
|
||||
id = json.value("id").toString();
|
||||
name = json.value("name").toString();
|
||||
description = json.value("description").toString();
|
||||
lastUpdate = json.value("lastUpdate").toDouble();
|
||||
}
|
||||
|
||||
QJsonObject Entity::toJSON() const {
|
||||
QJsonObject json;
|
||||
|
||||
json.value("id") = id.toString();
|
||||
json.value("name") = name;
|
||||
json.value("description") = description;
|
||||
json.value("lastUpdate") = lastUpdate;
|
||||
|
||||
return json;
|
||||
}
|
||||
37
src/colnod/entity.h
Normal file
37
src/colnod/entity.h
Normal file
@ -0,0 +1,37 @@
|
||||
#ifndef COLNOD_CONNECTOR_ENTITY_H
|
||||
#define COLNOD_CONNECTOR_ENTITY_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/QUuid>
|
||||
#include <QtCore/QJsonObject>
|
||||
|
||||
|
||||
class Entity : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
using QObject::QObject;
|
||||
|
||||
const QUuid &getId() const;
|
||||
void setId(const QUuid &id);
|
||||
|
||||
const QString &getName() const;
|
||||
void setName(const QString &name);
|
||||
|
||||
const QString &getDescription() const;
|
||||
void setDescription(const QString &description);
|
||||
|
||||
uint64_t getLastUpdate() const;
|
||||
void setLastUpdate(uint64_t lastUpdate);
|
||||
|
||||
virtual void fromJSON(const QJsonObject &json);
|
||||
virtual QJsonObject toJSON() const;
|
||||
protected:
|
||||
QUuid id;
|
||||
QString name;
|
||||
QString description;
|
||||
qint64 lastUpdate;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif //COLNOD_CONNECTOR_ENTITY_H
|
||||
@ -4,17 +4,17 @@ RequestManager::RequestManager()
|
||||
{
|
||||
manager = new QNetworkAccessManager();
|
||||
token = "";
|
||||
loginStatus = false;
|
||||
loginStatus = false; //should be false, true for testing request header
|
||||
|
||||
|
||||
|
||||
QFile configFile(QDir::current().filePath("config.json"));
|
||||
|
||||
if (!configFile.open(QIODevice::ReadOnly)) {
|
||||
qCritical() << "Couldn't open config file config.json" << QDir::current().filePath("config.json");
|
||||
QCoreApplication::exit(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
this->config = QJsonDocument::fromJson(configFile.readAll());
|
||||
this->config = QJsonDocument::fromJson(configFile.readAll());
|
||||
QObject::connect(manager, &QNetworkAccessManager::sslErrors, this, &RequestManager::onSSLError);
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ void RequestManager::login(QString host, QString username, QString password)
|
||||
request.setRawHeader("Authorization", authHeader.toLocal8Bit());
|
||||
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json; charset=UTF-8");
|
||||
QJsonDocument jsonDocument;
|
||||
|
||||
jsonDocument.setObject(reqBody);
|
||||
QNetworkReply* reply = manager->post(request, jsonDocument.toJson());
|
||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
||||
@ -40,11 +41,11 @@ void RequestManager::login(QString host, QString username, QString password)
|
||||
{
|
||||
qDebug() << reply->errorString();
|
||||
loginStatus = false;
|
||||
qDebug() << reply->readAll();
|
||||
return;
|
||||
}
|
||||
jsonResponse = reply->readAll();
|
||||
prepareAuthHeader();
|
||||
loginStatus = true;
|
||||
emit successLogin();
|
||||
reply->deleteLater();
|
||||
});
|
||||
@ -52,37 +53,52 @@ void RequestManager::login(QString host, QString username, QString password)
|
||||
|
||||
void RequestManager::getRequest(QString endpoint)
|
||||
{
|
||||
if (!loginStatus)
|
||||
{
|
||||
login(config.object()["host"].toString(), config.object()["username"].toString(), config.object()["password"].toString());
|
||||
// QEventLoop loop;
|
||||
// QObject::connect(this, &RequestManager::successLogin, &loop, &QEventLoop::quit);
|
||||
// loop.exec();
|
||||
}
|
||||
|
||||
//
|
||||
//host = config.object()["host"].toString();
|
||||
//
|
||||
|
||||
QNetworkRequest request;
|
||||
request.setUrl(host + endpoint);
|
||||
qDebug() << authHeader;
|
||||
request.setRawHeader("Authorization", authHeader.toLocal8Bit());
|
||||
request.setRawHeader("User-Agent", "curl/7.65.3");
|
||||
request.setRawHeader("Connection", "Keep-Alive");
|
||||
request.setRawHeader("Accept", "*/*");
|
||||
request.setRawHeader("Accept-Encoding", "*");
|
||||
request.setRawHeader("Accept-Language", "*");
|
||||
|
||||
QNetworkReply* reply = manager->post(request, QByteArray());
|
||||
|
||||
//
|
||||
//QEventLoop loop;
|
||||
//QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
|
||||
// loop.exec();
|
||||
//
|
||||
|
||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
||||
if (reply->error())
|
||||
{
|
||||
qDebug() << reply->errorString();
|
||||
qDebug() << reply->readAll();
|
||||
loginStatus = false;
|
||||
getRequest(endpoint);
|
||||
return;
|
||||
}
|
||||
|
||||
//print reply info
|
||||
auto items = reply->rawHeaderPairs();
|
||||
for (auto item : items)
|
||||
{
|
||||
qDebug() << item;
|
||||
}
|
||||
auto reqHeaderName = reply->request().rawHeaderList();
|
||||
for (QString header : reqHeaderName)
|
||||
{
|
||||
qDebug() << reply->request().rawHeader(header.toUtf8());
|
||||
}
|
||||
qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
|
||||
|
||||
jsonResponse = reply->readAll();
|
||||
emit responseReady();
|
||||
});
|
||||
}
|
||||
|
||||
QString RequestManager::getFromJson(QString json, QString member)
|
||||
QString RequestManager::getFromJson(QString json, const QString &member)
|
||||
{
|
||||
QJsonParseError err;
|
||||
QJsonDocument document = QJsonDocument::fromJson(json.toUtf8(),&err);
|
||||
@ -90,7 +106,7 @@ QString RequestManager::getFromJson(QString json, QString member)
|
||||
{
|
||||
qDebug() << err.errorString();
|
||||
}
|
||||
return document[member].toString();
|
||||
return document.object().value(member).toString();
|
||||
}
|
||||
|
||||
QString RequestManager::encryptedPassword(QString password)
|
||||
@ -122,3 +138,8 @@ void RequestManager::onSSLError(QNetworkReply *reply, const QList<QSslError> &er
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RequestManager::getSubjects()
|
||||
{
|
||||
getRequest("/SubjectManager/getSubjects");
|
||||
}
|
||||
|
||||
@ -20,24 +20,35 @@
|
||||
#include <QDir>
|
||||
#include <QSslError>
|
||||
|
||||
|
||||
#include "databasemanager.h"
|
||||
#include "token.h"
|
||||
#include "subject.h"
|
||||
|
||||
class RequestManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
RequestManager();
|
||||
void getSubjects();
|
||||
void login(QString endpoint, QString username, QString password);
|
||||
void getRequest(QString endpoint);
|
||||
void fetchSubjects(QString endpoint);
|
||||
void loadSubjectsFromColnodToDB();
|
||||
|
||||
|
||||
|
||||
const QJsonDocument &getConfig() const {return config;}
|
||||
const QString &getResponse() const {return jsonResponse;}
|
||||
QString getToken(){return token;}
|
||||
|
||||
private:
|
||||
|
||||
QString getFromJson(QString json, QString member);
|
||||
QString getFromJson(QString json, const QString &member);
|
||||
QString encryptedPassword(QString password);
|
||||
QString getLoginHeader(QString username, QString hash);
|
||||
void prepareAuthHeader();
|
||||
|
||||
private slots:
|
||||
void onSSLError(QNetworkReply *reply, const QList<QSslError> &errors);
|
||||
|
||||
@ -48,14 +59,13 @@ signals:
|
||||
|
||||
private:
|
||||
QNetworkAccessManager* manager;
|
||||
|
||||
QJsonDocument config;
|
||||
QString authHeader;
|
||||
QString host;
|
||||
QString token;
|
||||
QString jsonResponse;
|
||||
bool loginStatus;
|
||||
QString tenant;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
74
src/colnod/subject.cpp
Normal file
74
src/colnod/subject.cpp
Normal file
@ -0,0 +1,74 @@
|
||||
#include <utility>
|
||||
|
||||
#include "subject.h"
|
||||
|
||||
#include <QJsonArray>
|
||||
|
||||
QString Subject::getEmail() const {
|
||||
return attributes["email"].toString();
|
||||
}
|
||||
|
||||
void Subject::fromJSON(const QJsonObject &json) {
|
||||
Entity::fromJSON(json);
|
||||
|
||||
//attributes = json["attributes"]["items"].toObject();
|
||||
|
||||
attributes = json.value("attributes").toObject().value("items").toObject();
|
||||
|
||||
const auto &tokenFlagsArray = json.value("tokenFlags").toArray();
|
||||
for(const auto &flag : tokenFlagsArray){
|
||||
tokenFlags.insert(flag.toString());
|
||||
}
|
||||
|
||||
pin = json.value("pin").toString();
|
||||
|
||||
const auto &pinFlagsArray = json.value("pinFlags").toArray();
|
||||
for(const auto &flag : pinFlagsArray){
|
||||
pinFlags.insert(flag.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
QJsonObject Subject::toJSON() const {
|
||||
QJsonObject json = Entity::toJSON();
|
||||
|
||||
QJsonObject items({{"items", attributes}});
|
||||
json.value("atributes") = items;
|
||||
json.value("tokenFlags") = QJsonArray::fromStringList(tokenFlags.toList());
|
||||
json.value("pin") = pin;
|
||||
json.value("pinFlags") = QJsonArray::fromStringList(pinFlags.toList());
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
const QJsonObject &Subject::getAttributes() const {
|
||||
return attributes;
|
||||
}
|
||||
|
||||
void Subject::setAttributes(const QJsonObject &attributes) {
|
||||
Subject::attributes = attributes;
|
||||
}
|
||||
|
||||
const QSet<QString> &Subject::getTokenFlags() const {
|
||||
return tokenFlags;
|
||||
}
|
||||
|
||||
void Subject::setTokenFlags(const QSet<QString> &tokenFlags) {
|
||||
Subject::tokenFlags = tokenFlags;
|
||||
}
|
||||
|
||||
const QString &Subject::getPin() const {
|
||||
return pin;
|
||||
}
|
||||
|
||||
void Subject::setPin(const QString &pin) {
|
||||
Subject::pin = pin;
|
||||
}
|
||||
|
||||
const QSet<QString> &Subject::getPinFlags() const {
|
||||
return pinFlags;
|
||||
}
|
||||
|
||||
void Subject::setPinFlags(const QSet<QString> &pinFlags) {
|
||||
Subject::pinFlags = pinFlags;
|
||||
}
|
||||
35
src/colnod/subject.h
Normal file
35
src/colnod/subject.h
Normal file
@ -0,0 +1,35 @@
|
||||
#ifndef COLNOD_CONNECTOR_SUBJECT_H
|
||||
#define COLNOD_CONNECTOR_SUBJECT_H
|
||||
|
||||
#include <QSet>
|
||||
|
||||
#include "entity.h"
|
||||
|
||||
|
||||
class Subject : public Entity {
|
||||
|
||||
public:
|
||||
using Entity::Entity;
|
||||
|
||||
QString getEmail() const;
|
||||
|
||||
const QJsonObject &getAttributes() const;
|
||||
void setAttributes(const QJsonObject &attributes);
|
||||
const QSet<QString> &getTokenFlags() const;
|
||||
void setTokenFlags(const QSet<QString> &tokenFlags);
|
||||
const QString &getPin() const;
|
||||
void setPin(const QString &pin);
|
||||
const QSet<QString> &getPinFlags() const;
|
||||
void setPinFlags(const QSet<QString> &pinFlags);
|
||||
|
||||
void fromJSON(const QJsonObject &json) override;
|
||||
QJsonObject toJSON() const override;
|
||||
protected:
|
||||
QJsonObject attributes;
|
||||
QSet<QString> tokenFlags;
|
||||
QString pin;
|
||||
QSet<QString> pinFlags;
|
||||
};
|
||||
|
||||
|
||||
#endif //COLNOD_CONNECTOR_SUBJECT_H
|
||||
108
src/colnod/token.cpp
Normal file
108
src/colnod/token.cpp
Normal file
@ -0,0 +1,108 @@
|
||||
#include "token.h"
|
||||
|
||||
#include <QJsonArray>
|
||||
|
||||
void Token::fromJSON(const QJsonObject &json) {
|
||||
Entity::fromJSON(json);
|
||||
|
||||
tokenType = json.value("tokenType").toString();
|
||||
tokenBits = json.value("tokenBits").toInt();
|
||||
tokenData = json.value("tokenData").toString();
|
||||
validFrom = json.value("validFrom").toDouble();
|
||||
validTo = json.value("validTo").toDouble();
|
||||
timeToLive = json.value("timeToLive").toInt();
|
||||
authErrors = json["authErrors"].toInt();
|
||||
const auto &flagsArray = json["flags"].toArray();
|
||||
for(const auto &flag : flagsArray){
|
||||
flags.insert(flag.toString());
|
||||
}
|
||||
subjectId = json.value("subjectId").toString();
|
||||
}
|
||||
|
||||
QJsonObject Token::toJSON() const {
|
||||
QJsonObject json = Entity::toJSON();
|
||||
|
||||
json.value("tokenType") = tokenType;
|
||||
json.value("tokenBits") = tokenBits;
|
||||
json.value("tokenData") = tokenData;
|
||||
json.value("validFrom") = validFrom;
|
||||
json.value("validTo") = validTo;
|
||||
json.value("timeToLive") = timeToLive;
|
||||
json.value("authErrors") = authErrors;
|
||||
json.value("flags") = QJsonArray::fromStringList(flags.toList());
|
||||
json.value("subjectId") = subjectId.toString();
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
const QString &Token::getTokenType() const {
|
||||
return tokenType;
|
||||
}
|
||||
|
||||
void Token::setTokenType(const QString &tokenType) {
|
||||
Token::tokenType = tokenType;
|
||||
}
|
||||
|
||||
int Token::getTokenBits() const {
|
||||
return tokenBits;
|
||||
}
|
||||
|
||||
void Token::setTokenBits(int tokenBits) {
|
||||
Token::tokenBits = tokenBits;
|
||||
}
|
||||
|
||||
const QString &Token::getTokenData() const {
|
||||
return tokenData;
|
||||
}
|
||||
|
||||
void Token::setTokenData(const QString &tokenData) {
|
||||
Token::tokenData = tokenData;
|
||||
}
|
||||
|
||||
qint64 Token::getValidFrom() const {
|
||||
return validFrom;
|
||||
}
|
||||
|
||||
void Token::setValidFrom(qint64 validFrom) {
|
||||
Token::validFrom = validFrom;
|
||||
}
|
||||
|
||||
qint64 Token::getValidTo() const {
|
||||
return validTo;
|
||||
}
|
||||
|
||||
void Token::setValidTo(qint64 validTo) {
|
||||
Token::validTo = validTo;
|
||||
}
|
||||
|
||||
int Token::getTimeToLive() const {
|
||||
return timeToLive;
|
||||
}
|
||||
|
||||
void Token::setTimeToLive(int timeToLive) {
|
||||
Token::timeToLive = timeToLive;
|
||||
}
|
||||
|
||||
int Token::getAuthErrors() const {
|
||||
return authErrors;
|
||||
}
|
||||
|
||||
void Token::setAuthErrors(int authErrors) {
|
||||
Token::authErrors = authErrors;
|
||||
}
|
||||
|
||||
const QSet<QString> &Token::getFlags() const {
|
||||
return flags;
|
||||
}
|
||||
|
||||
void Token::setFlags(const QSet<QString> &flags) {
|
||||
Token::flags = flags;
|
||||
}
|
||||
|
||||
const QUuid &Token::getSubjectId() const {
|
||||
return subjectId;
|
||||
}
|
||||
|
||||
void Token::setSubjectId(const QUuid &subjectId) {
|
||||
Token::subjectId = subjectId;
|
||||
}
|
||||
48
src/colnod/token.h
Normal file
48
src/colnod/token.h
Normal file
@ -0,0 +1,48 @@
|
||||
#ifndef COLNOD_CONNECTOR_TOKEN_H
|
||||
#define COLNOD_CONNECTOR_TOKEN_H
|
||||
|
||||
#include "entity.h"
|
||||
|
||||
#include <QSet>
|
||||
|
||||
|
||||
class Token : public Entity {
|
||||
public:
|
||||
// using Entity::Entity;
|
||||
|
||||
const QString &getTokenType() const;
|
||||
void setTokenType(const QString &tokenType);
|
||||
int getTokenBits() const;
|
||||
void setTokenBits(int tokenBits);
|
||||
const QString &getTokenData() const;
|
||||
void setTokenData(const QString &tokenData);
|
||||
qint64 getValidFrom() const;
|
||||
void setValidFrom(qint64 validFrom);
|
||||
qint64 getValidTo() const;
|
||||
void setValidTo(qint64 validTo);
|
||||
int getTimeToLive() const;
|
||||
void setTimeToLive(int timeToLive);
|
||||
int getAuthErrors() const;
|
||||
void setAuthErrors(int authErrors);
|
||||
const QSet<QString> &getFlags() const;
|
||||
void setFlags(const QSet<QString> &flags);
|
||||
const QUuid &getSubjectId() const;
|
||||
void setSubjectId(const QUuid &subjectId);
|
||||
|
||||
|
||||
void fromJSON(const QJsonObject &json) override;
|
||||
QJsonObject toJSON() const override;
|
||||
protected:
|
||||
QString tokenType;
|
||||
int tokenBits;
|
||||
QString tokenData;
|
||||
qint64 validFrom;
|
||||
qint64 validTo;
|
||||
int timeToLive;
|
||||
int authErrors;
|
||||
QSet<QString> flags;
|
||||
QUuid subjectId;
|
||||
};
|
||||
|
||||
|
||||
#endif //COLNOD_CONNECTOR_TOKEN_H
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"host": "https://localhost:8080",
|
||||
"host": "https://192.168.1.3",
|
||||
"username": "spaceti",
|
||||
"password": "SuperSecretPassword"
|
||||
"password": "spaceti1"
|
||||
}
|
||||
58
src/subjects.json
Normal file
58
src/subjects.json
Normal file
@ -0,0 +1,58 @@
|
||||
{
|
||||
"items":[
|
||||
{
|
||||
"id":"6d809c12-3255-4b0a-bf8f-3af86912a40f",
|
||||
"name":"Person2",
|
||||
"description":"",
|
||||
"lastUpdate":1543843828247,
|
||||
"attributes":{
|
||||
"items":{
|
||||
|
||||
}
|
||||
},
|
||||
"tokenFlags":[
|
||||
"NoPin"
|
||||
],
|
||||
"pin":"",
|
||||
"pinFlags":[
|
||||
"Access"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id":"1a23c502-1665-4492-94ea-039bb7505cae",
|
||||
"name":"Person3",
|
||||
"description":"",
|
||||
"lastUpdate":1553868160516,
|
||||
"attributes":{
|
||||
"items":{
|
||||
"email":"person3@gmail.com"
|
||||
}
|
||||
},
|
||||
"tokenFlags":[
|
||||
"NoPin"
|
||||
],
|
||||
"pin":"",
|
||||
"pinFlags":[
|
||||
"Access"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id":"7ad58bd8-a1ec-40b4-a54f-347ee6a4ba29",
|
||||
"name":"Person1",
|
||||
"description":"",
|
||||
"lastUpdate":1560786050717,
|
||||
"attributes":{
|
||||
"items":{
|
||||
"email":"person1@gmail.com"
|
||||
}
|
||||
},
|
||||
"tokenFlags":[
|
||||
"NoPin"
|
||||
],
|
||||
"pin":"",
|
||||
"pinFlags":[
|
||||
"Access"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -12,32 +12,31 @@ void UnitTest::loginSuccessfully()
|
||||
QString json = testAccess->getResponse();
|
||||
qDebug() << json;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||
QVERIFY2(doc["id"].isString(), "No parameter 'id' in response");
|
||||
QVERIFY2(doc.object().value("id").isString(), "No parameter 'id' in response");
|
||||
}
|
||||
|
||||
//POST request w/o datas
|
||||
void UnitTest::getSubjects()
|
||||
{
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
testAccess->login(host, email, password);
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
testAccess->getRequest("/SubjectManager/getSubjects");
|
||||
spy.wait();
|
||||
QVERIFY(spy.isValid());
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QString json = testAccess->getResponse();
|
||||
qDebug() << json;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8());
|
||||
QVERIFY(doc.isObject());
|
||||
QVERIFY2(doc["items"].isArray(), "No parameter 'id' in response");
|
||||
qDebug() << doc["items"].toArray()[0].toObject()["id"].toString();
|
||||
QVERIFY2(doc["items"].toArray()[0].toObject()["id"].isString(), "ada");
|
||||
QVERIFY2(doc.object().value("items").isArray(), "No parameter 'id' in response");
|
||||
qDebug() << doc.object().value("items").toArray()[0].toObject()["id"].toString();
|
||||
QVERIFY2(doc.object().value("items").toArray()[0].toObject()["id"].isString(), "ada");
|
||||
|
||||
}
|
||||
|
||||
void UnitTest::getTokens()
|
||||
{
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
testAccess->login(host, email, password);
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
testAccess->getRequest("/TokenManager/getTokens");
|
||||
QCOMPARE(spy.count(), 0);
|
||||
@ -50,7 +49,6 @@ void UnitTest::getTokens()
|
||||
void UnitTest::getTokensOpenManager()
|
||||
{
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
testAccess->login(host, email, password);
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
testAccess->getRequest("/OpenManager/getTokenSubject");
|
||||
QCOMPARE(spy.count(), 0);
|
||||
@ -58,8 +56,119 @@ void UnitTest::getTokensOpenManager()
|
||||
QVERIFY(spy.isValid());
|
||||
QCOMPARE(spy.count(), 1);
|
||||
QString response = testAccess->getResponse();
|
||||
QVERIFY(!response.isEmpty());
|
||||
qDebug() << response;
|
||||
QVERIFY(!response.isEmpty());
|
||||
}
|
||||
|
||||
void UnitTest::subjectJSONParser()
|
||||
{
|
||||
/*
|
||||
QFile jsonData(QDir::current().filePath("subjects.json"));
|
||||
|
||||
if (!jsonData.open(QIODevice::ReadOnly)) {
|
||||
qCritical() << "Couldn't open config file config.json" << QDir::current().filePath("subjects.json");
|
||||
QCoreApplication::exit(-1);
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonDocument doc = QJsonDocument::fromJson(jsonData.readAll());
|
||||
QJsonObject obj = doc.object();
|
||||
QJsonArray arr = obj["items"].toArray();
|
||||
*/
|
||||
QVERIFY(true);
|
||||
return;
|
||||
|
||||
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
testAccess->getRequest("/SubjectManager/getSubjects");
|
||||
spy.wait();
|
||||
QString response = testAccess->getResponse();
|
||||
QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||
QJsonArray arr = doc.object()["items"].toArray();
|
||||
auto testSubject = new Subject();
|
||||
testSubject->fromJSON(arr[1].toObject());
|
||||
qDebug() << testSubject->getName() << " Size: " << arr.size();
|
||||
QVERIFY(!testSubject->getName().isEmpty());
|
||||
}
|
||||
|
||||
void UnitTest::tokenJSONParser()
|
||||
{
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
QSignalSpy spy(testAccess, SIGNAL(responseReady()));
|
||||
testAccess->getRequest("/TokenManager/getTokens");
|
||||
spy.wait();
|
||||
QString response = testAccess->getResponse();
|
||||
|
||||
//TODO
|
||||
/* QJsonDocument doc = QJsonDocument::fromJson(response.toUtf8());
|
||||
QJsonArray arr = doc.object()["items"].toArray();
|
||||
auto testSubject = new Subject();
|
||||
testSubject->fromJSON(arr[1].toObject());
|
||||
qDebug() << testSubject->getName();
|
||||
QVERIFY(!testSubject->getName().isEmpty());*/
|
||||
QVERIFY(true);
|
||||
|
||||
}
|
||||
|
||||
void UnitTest::connectToDB()
|
||||
{
|
||||
DatabaseManager *db = new DatabaseManager("192.168.1.94", "deloitte", "postgres", "34rjkciea12");
|
||||
QVERIFY(db->getOpened());
|
||||
qDebug() << db->getTestMessage(1);
|
||||
QVERIFY(true);
|
||||
QCOMPARE(db->getTestMessage(1), QStringLiteral("Hello world"));
|
||||
db->createTestRecord("Does it work?");
|
||||
QCOMPARE(db->getTestMessage(2), QStringLiteral("Does it work?"));
|
||||
}
|
||||
|
||||
void UnitTest::debugConnection()
|
||||
{
|
||||
QSslSocket ssl;// = new QSslSocket();
|
||||
ssl.connectToHostEncrypted("192.168.1.3", 8443);
|
||||
ssl.ignoreSslErrors();
|
||||
if (!ssl.waitForEncrypted())
|
||||
{
|
||||
qDebug() << ssl.errorString();
|
||||
}
|
||||
QString tmp = "POST /AaaManager/authSession HTTP/1.1\r\nHost: 192.168.1.3:8443\r\nAuthorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==\r\nUser-Agent: curl/7.65.3\r\nAccept: */*\r\nContent-Type: application/json\r\nContent-Length: 164\r\n\r\n{\"password\":\"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0\",\"username\":\"spaceti\"}";
|
||||
/*POST /AaaManager/authSession HTTP/1.1
|
||||
Host: localhost:8080
|
||||
Authorization: Basic c3BhY2V0aTpFN0ZFQTA3REJDODJGQjlCQTM0QjJFNDUzRTJFRkU4OUYwNTgzRTcxODc1NDM1MDdFRjExRTg0NzI2MDcxRkU0Mjg0NDUzNzJGMkU0NkI0NTVFQjBDNzk3NDdDNTFFMzYyRjQwM0NFMzk0NzNBMkE4QzJERkEwQ0U1Qzk4MjZDMA==
|
||||
User-Agent: curl/7.65.3
|
||||
Accept:
|
||||
Content-Type: application/json
|
||||
Content-Length: 164
|
||||
|
||||
{"password":"E7FEA07DBC82FB9BA34B2E453E2EFE89F0583E7187543507EF11E84726071FE428445372F2E46B455EB0C79747C51E362F403CE39473A2A8C2DFA0CE5C9826C0","username":"spaceti"}*/
|
||||
qDebug() << tmp.toUtf8();
|
||||
ssl.write(tmp.toUtf8());
|
||||
QString data;
|
||||
while (ssl.waitForReadyRead() && data.isEmpty())
|
||||
{
|
||||
data.append(ssl.readAll().data());
|
||||
}
|
||||
qDebug() << data;
|
||||
int index = data.lastIndexOf("id");
|
||||
QString tkn = data.mid( index + 5, 36);
|
||||
tkn = tkn + ":";
|
||||
qDebug() << "parsed token : " <<tkn;
|
||||
/*
|
||||
RequestManager* testAccess = new RequestManager();
|
||||
QJsonDocument config = testAccess->getConfig();
|
||||
QSignalSpy spy(testAccess, SIGNAL(successLogin()));
|
||||
testAccess->login(host, email, password);
|
||||
spy.wait();
|
||||
|
||||
QString token = testAccess->getToken();
|
||||
token = token + ":";*/
|
||||
tmp = "POST /SubjectManager/getSubjects\r\nHTTP/1.1 Host: 192.168.1.3:8443\r\nAuthorization: Basic " + tkn.toUtf8().toBase64() + "\r\nUser-Agent: curl/7.65.3\r\nAccept: */*)";
|
||||
qDebug() << tmp.toUtf8();
|
||||
ssl.write(tmp.toUtf8());
|
||||
while (ssl.waitForReadyRead())
|
||||
qDebug() << ssl.readAll().data();
|
||||
|
||||
QVERIFY(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
{
|
||||
"host": "https://localhost:8080",
|
||||
"host": "https://192.168.1.3:8443",
|
||||
"username": "spaceti",
|
||||
"password": "SuperSecretPassword"
|
||||
"password": "spaceti1"
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
QT -= gui
|
||||
QT += core sql network testlib
|
||||
CONFIG += testcase # neccesary to have posibility to run: make check UnitTest
|
||||
|
||||
HEADERS += \
|
||||
unittest.h
|
||||
|
||||
@ -1,8 +1,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <QtTest/QtTest>
|
||||
#include <QSignalSpy>
|
||||
#include <requestmanager.h>
|
||||
#include "subject.h"
|
||||
#include "databasemanager.h"
|
||||
#include <QSslSocket>
|
||||
|
||||
|
||||
class UnitTest : public QObject
|
||||
@ -11,15 +15,17 @@ class UnitTest : public QObject
|
||||
|
||||
private slots:
|
||||
|
||||
void loginSuccessfully();
|
||||
|
||||
|
||||
void getTokens();
|
||||
void getTokensOpenManager();
|
||||
void getSubjects();
|
||||
void loginSuccessfully(); // /AaaManager/authSession
|
||||
void getSubjects(); // /SubjectManager/getSubjects
|
||||
void getTokens(); // /TokenManager/getTokens
|
||||
void getTokensOpenManager(); // /OpenManager/getTokenSubject
|
||||
void subjectJSONParser();
|
||||
void tokenJSONParser();
|
||||
void connectToDB();
|
||||
void debugConnection();
|
||||
|
||||
private:
|
||||
// QString host = "https://localhost:8080"; //colnod server (ssh -L 8080:192.168.254.11:8443 penta-master)
|
||||
//QString host = "http://localhost:8080"; //colnod server (ssh -L 8080:192.168.254.11:8443 penta-master)
|
||||
QString host = "https://192.168.1.3:8443"; //local testing server
|
||||
QString password = "spaceti1";
|
||||
QString email = "spaceti";
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user