Compare commits
37 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c2241c0b1 | ||
|
|
571d7f0402 | ||
|
|
2404733cbe | ||
|
|
7c71555add | ||
|
|
3f0e3c801c | ||
|
|
f6250a2724 | ||
|
|
ddd4188524 | ||
|
|
8874f38696 | ||
|
|
c5f6fa71b9 | ||
|
|
614c8e4dd9 | ||
|
|
cfc6847096 | ||
|
|
dcd069c884 | ||
|
|
754551ef6c | ||
|
|
57d58f5b27 | ||
|
|
09444a94ed | ||
|
|
20248b56e1 | ||
|
|
44c3144eb0 | ||
|
|
5a9481f92c | ||
|
|
e913f8154d | ||
|
|
e2b86cb8e0 | ||
|
|
a0f7399e83 | ||
|
|
fd66500f46 | ||
|
|
d677d9ddb5 | ||
|
|
e3743e6d16 | ||
|
|
b446b16027 | ||
|
|
16126c6364 | ||
|
|
9945ca0baa | ||
|
|
23363c5070 | ||
|
|
de18627c30 | ||
|
|
d79f4f4b8f | ||
|
|
27aff73824 | ||
|
|
b8df2eccd8 | ||
|
|
a99c7676b1 | ||
|
|
bd301f169d | ||
|
|
f4c990c0fb | ||
|
|
72ecb82a46 | ||
|
|
d18bb21b74 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/target/
|
||||||
|
/data/
|
||||||
738
Insomnia_test.yaml
Normal file
738
Insomnia_test.yaml
Normal file
@@ -0,0 +1,738 @@
|
|||||||
|
type: collection.insomnia.rest/5.0
|
||||||
|
name: TP4
|
||||||
|
meta:
|
||||||
|
id: wrk_edb44e38083f4e9f83998faf549c0d7a
|
||||||
|
created: 1754408137750
|
||||||
|
modified: 1761341975705
|
||||||
|
description: ""
|
||||||
|
collection:
|
||||||
|
- name: SESSION
|
||||||
|
meta:
|
||||||
|
id: fld_6a3d533b4c7a494986be94875f20da98
|
||||||
|
created: 1761344709621
|
||||||
|
modified: 1761344822984
|
||||||
|
sortKey: -1761344728121.25
|
||||||
|
description: ""
|
||||||
|
children:
|
||||||
|
- url: http://localhost:8082/session/getAll
|
||||||
|
name: Get all session from USER
|
||||||
|
meta:
|
||||||
|
id: req_1655a615b20d49f8bdf3fc81c5d6b761
|
||||||
|
created: 1761165598138
|
||||||
|
modified: 1761344718542
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344718509
|
||||||
|
method: GET
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser2
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDQ5NzgsImlhdCI6MTc2MTM0NDY3OCwianRpIjoib25ydHJvOjAyY2MxNDU5LWUwY2MtNzUzZi0yNWY3LTk1MWQ0Zjg0N2Q5ZSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiNDQ4Y2NiMjUtYzZjNC05OTU1LTk2ZmItZDgxMmNjZDRlMjMyIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.mhQIeD0e_kuS_zCZDGd6x2mq4VqeRBemFiCM-4NcSRwSvLqSl0AKla4pfpOg88dXyKjYbSJyszQ7-qMtO3NFgFT5Tlcf5pb-FR8p5XRk1XgKcKX-9-kirbhsuHzFRMbRSRr7RooPLvhqqarxZtAAPWtEzXveysVTIYLffhhJ7MdYLfQRVFhUGTyashuYH-H6_L8DpjGhie_bcf7VXfo4-UupJEmcUBzjmDXt4aunAl1-qEdLoJ0FgqQwB63DGxoVnRePBYCmiuUJM_KXQ8bi_epkwyeL6HDRL6GuudCIPWTNLYckU0wXWb5nLcQBAjE3s3DidyYKpndZbNjYXKOkaw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/session/create
|
||||||
|
name: "CREATE session with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_3a89035567d94274a0965addaf869500
|
||||||
|
created: 1761166627479
|
||||||
|
modified: 1761344721839
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344718609
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: '{"theme": "Science Informatic"}'
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDQ4MTYsImlhdCI6MTc2MTM0NDUxNiwianRpIjoib25ydHJvOmNjNTE3YmI2LTMzMzMtN2RiMy03NGI1LTlkYjNhOTQzZGNhMiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiZTFjZDE4YzAtOWQyNS04ZjFmLWM4MzMtYTdmMDcwZGMwOGQ2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.PM3Bj5-c3QFWeVy6fhcrVZDE2CqzGZPYW3ZLg46whc1vCYbb7c_ASuu0pJKDXHIiRrH2_Yws1qtY5u5fSquZ1zHENppsB4ltRwpf2dTQjZ5-0a_ULbbXsONCJ_TUxAkUaTuy6XNYXAjRf8nH_SirfDRgTB47ynOXTKqGVNZYhgkQKbpxZ1UwVOciQpeuXQqbIXBhfo5Ejpyp8DiWkkXujDnJGJua2FQaNfSvDmas4BSB2V4_2rXAbT72t76INu3vJYetGO5wPgWppwl0PVK3dvOIK_iSMR0LHp8-MMlykPZpESxq1DGLfHAP7XYDS2u0yiddhGZY0fD4ziegDDVJpw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/session/delete/5
|
||||||
|
name: "DELETE session with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_28a034a37be54183b1423364b01ecb71
|
||||||
|
created: 1761344610268
|
||||||
|
modified: 1761348128370
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344718559
|
||||||
|
method: DELETE
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: ""
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDQ4MTYsImlhdCI6MTc2MTM0NDUxNiwianRpIjoib25ydHJvOmNjNTE3YmI2LTMzMzMtN2RiMy03NGI1LTlkYjNhOTQzZGNhMiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiZTFjZDE4YzAtOWQyNS04ZjFmLWM4MzMtYTdmMDcwZGMwOGQ2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.PM3Bj5-c3QFWeVy6fhcrVZDE2CqzGZPYW3ZLg46whc1vCYbb7c_ASuu0pJKDXHIiRrH2_Yws1qtY5u5fSquZ1zHENppsB4ltRwpf2dTQjZ5-0a_ULbbXsONCJ_TUxAkUaTuy6XNYXAjRf8nH_SirfDRgTB47ynOXTKqGVNZYhgkQKbpxZ1UwVOciQpeuXQqbIXBhfo5Ejpyp8DiWkkXujDnJGJua2FQaNfSvDmas4BSB2V4_2rXAbT72t76INu3vJYetGO5wPgWppwl0PVK3dvOIK_iSMR0LHp8-MMlykPZpESxq1DGLfHAP7XYDS2u0yiddhGZY0fD4ziegDDVJpw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- name: TOKEN
|
||||||
|
meta:
|
||||||
|
id: fld_edbd6e42d9804716ab375d1a9c4e34f8
|
||||||
|
created: 1761344734288
|
||||||
|
modified: 1761344734288
|
||||||
|
sortKey: -1761344734288
|
||||||
|
description: ""
|
||||||
|
children:
|
||||||
|
- url: http://localhost:8080/realms/myspringbootapprealm/protocol/openid-connect/token
|
||||||
|
name: POST token of myuser2 (USER)
|
||||||
|
meta:
|
||||||
|
id: req_6042b7d04430475090e584300c99eab9
|
||||||
|
created: 1759266818074
|
||||||
|
modified: 1761344742391
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344738832
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser2
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8080/realms/myspringbootapprealm/protocol/openid-connect/token
|
||||||
|
name: POST token of myuser (ADMIN)
|
||||||
|
meta:
|
||||||
|
id: req_01c3633b3ca74f01addf57999b2e0c4c
|
||||||
|
created: 1761341868733
|
||||||
|
modified: 1761345268241
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344738732
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- name: RESPONSE
|
||||||
|
meta:
|
||||||
|
id: fld_bc553a9a2b6f4c869522a93d27180c10
|
||||||
|
created: 1761344775233
|
||||||
|
modified: 1761348525580
|
||||||
|
sortKey: -1761344726579.5625
|
||||||
|
description: ""
|
||||||
|
children:
|
||||||
|
- url: http://localhost:8082/reponse/create/choix
|
||||||
|
name: "CREATE resp choix with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_c8c745e6a7f54f53a3767e741ac7fee2
|
||||||
|
created: 1761344835170
|
||||||
|
modified: 1761345288184
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344838422
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: '{"theme": "Science Informatic"}'
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU1ODEsImlhdCI6MTc2MTM0NTI4MSwianRpIjoib25ydHJvOjJmOWViYjE0LTExNGUtN2JmZS02NzllLTUzZDE5NmQzMTAxNiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiOTEzYzRlZTAtNWY3MS03NjMyLTkyOGItNDU0YzNmODJhYzcxIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.rRmFvq0OJmCf6p6pZqm2cPGOYhMc8_xhuApZw5yMHjhKIu-faEwd_-cd1yIE8SJ4VqKi979l5ZT4wLTiGRT6tDKyKkd6gszMXJ71YmphM0czEV-gpOLodA9UxQN_W1nDjE7l3f6Xe_LZgyHUzTIt3sJP8GTbFtzaOyeRsMa9VYcA0gxkeUoymbfFerpvpF3z2c2U_OjZkoT79GpRpzqzqGzZoyDVO8KglWh4tE0pSwy9zCKqs_DcTxxD_6OIUyWujwrriy9SRGd2lfYoQROEqfi1lU5Jwi7cdNwHfyjzm6m0xBsJkJGjkEOf747vxUKrMqwxmYWUSWZ7s1dhdEYBuA
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/create/courte
|
||||||
|
name: "CREATE resp courte with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_8cfde146a3b74765acc4e5607adf9fb7
|
||||||
|
created: 1761344881275
|
||||||
|
modified: 1761344909081
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344788627
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: '{"theme": "Science Informatic"}'
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDUxOTksImlhdCI6MTc2MTM0NDg5OSwianRpIjoib25ydHJvOjhmODU1YmEyLWMxN2MtMDBhNy1lMTVhLTRhOTg3ZWE5OWRmMiIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzE0MjQ2MDgtMzFmMi01ZmJhLTQ3M2EtNmFhZGNiMWRkNzJmIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.c0P5T6tk__nXWvdv0_YOW78GAZy0e6Q9o5dvjB8resS8_PcJne-d2RgH2gzES36I1X4E71Quj5WpXVGZSR_j7P25MIo4Xm-5kRlnMfsWFNWpTkjmos0CI5d2VP4vW0iDqvucLNhW3Z1aYgmC1KxLrrIPhUXob5_2xem4yWA6dJdfeUZzTv_a5yOIiDpDxpZhNUHAgfK_tWzivYdNLqLSd-dvgZD9PZeFcYoXcT3fWNhZW6Ix8FKvHuUjpczCGoc7k4flqdDcbU2_UK4liByeKntQ1JuD1a5gNM6Sp9ijrvQVouB8N8ejcRTQjlRy-mXlQUUbtYimOerBTvuJyGE-RQ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/getAll
|
||||||
|
name: Get all resp courte from USER
|
||||||
|
meta:
|
||||||
|
id: req_4b38e162a28d4909bf45b7b9abc204a4
|
||||||
|
created: 1761344930516
|
||||||
|
modified: 1761345550386
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344788527
|
||||||
|
method: GET
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser2
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU2MjAsImlhdCI6MTc2MTM0NTMyMCwianRpIjoib25ydHJvOjJhMGIxOGZiLWE4MjEtMWI3MS1iODQ1LWE5NGY0NWY1ZDA4MSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzFhYmVlNzYtOWJkNy02NWMyLWY0MzMtOTJiZjliODZlMDA1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.GBNldYmb4q02AaOwnu1xoLxkF_9qvadLdw1ftjetOsaDNYSe_y_9XhqmStc1ocD11AJUVr0Ix9fqB6TACoNMBS6gegSI6xmmdjT2ABqGilcpMs3OY6edNB8qZ9LP_YFK_z6UWdBBgWmETSfr9zRGVOOfLDMFwadgxCtbeV1AxGLTmfdVLCDPOlZseN3SNKHeFbC_ApYgPR-_vO1Fjl8KE8CucWULoDzgyHBdU1zqlLttlpaOQHl6aHWS0mtb4ymvQWDp7UZd-aukVb41UT5oeVtPS9HC6w2jfd4UBxG1T2TdTfazoXXk1eGgAD7ir6QyoB2Pkv9aANiRMMrTlk0C_w
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/addReponse/2
|
||||||
|
name: PUT resp courte from ADMIN
|
||||||
|
meta:
|
||||||
|
id: req_2704faf70033478ab6ae1def154fa917
|
||||||
|
created: 1761345052972
|
||||||
|
modified: 1761345244528
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344763679.5
|
||||||
|
method: PUT
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: |-
|
||||||
|
{
|
||||||
|
"reponse": "La bonne réponse 2"
|
||||||
|
}
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDUyNDgsImlhdCI6MTc2MTM0NDk0OCwianRpIjoib25ydHJvOjFiMzcwMjU1LTg5MzgtM2U0Zi1lMTBiLTVlOGZmOTYwNzVlMCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiYTVjYWNlMDUtYTIxZS1kMzk2LTdhYjEtMDRmOWEwNTg5YzQwIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.Hqsi5Pk5Hrh61cKDEmMbGpA2kv3YTW-WOh0Z4NhrZn2GeCphKI3ApgRV3Zbkrt_UbyUv3z9UW69eZLUFIS-LZRMNBiwSl7U86xlNA9s5A9aiCL7GU5NsyCy4zNlqNo2RHZP_2RLB-aPtmWr8eDjFEhN0M8WwZJIje-vvDUQAugAKe6x0g8L1IbajYxGSHqScIYE8UAV9sA-HcVOVY92uGUG3T8xZK4_v9EvUI3hfleHaQVBilhlh_cHhcOTngvBgO4C__npW9KJYKeQiPqXyrN5cmNeJWJ38UcfcoinSXsXAjdwPQDTikg9W8x9qf9-MyVIDRBHZBwqj65MkyRCEcQ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/addChoix/13
|
||||||
|
name: PUT resp choix from ADMIN
|
||||||
|
meta:
|
||||||
|
id: req_4188b0f6c89f4cce9159f88c380a46cb
|
||||||
|
created: 1761345107220
|
||||||
|
modified: 1761345327676
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344751255.75
|
||||||
|
method: PUT
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: |-
|
||||||
|
{
|
||||||
|
"choix": "Option A"
|
||||||
|
}
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_911df3ed408a4f8399789d8f9cdac928
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU2MjAsImlhdCI6MTc2MTM0NTMyMCwianRpIjoib25ydHJvOjJhMGIxOGZiLWE4MjEtMWI3MS1iODQ1LWE5NGY0NWY1ZDA4MSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzFhYmVlNzYtOWJkNy02NWMyLWY0MzMtOTJiZjliODZlMDA1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.GBNldYmb4q02AaOwnu1xoLxkF_9qvadLdw1ftjetOsaDNYSe_y_9XhqmStc1ocD11AJUVr0Ix9fqB6TACoNMBS6gegSI6xmmdjT2ABqGilcpMs3OY6edNB8qZ9LP_YFK_z6UWdBBgWmETSfr9zRGVOOfLDMFwadgxCtbeV1AxGLTmfdVLCDPOlZseN3SNKHeFbC_ApYgPR-_vO1Fjl8KE8CucWULoDzgyHBdU1zqlLttlpaOQHl6aHWS0mtb4ymvQWDp7UZd-aukVb41UT5oeVtPS9HC6w2jfd4UBxG1T2TdTfazoXXk1eGgAD7ir6QyoB2Pkv9aANiRMMrTlk0C_w
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/get/13
|
||||||
|
name: Get all resp choix from USER
|
||||||
|
meta:
|
||||||
|
id: req_dcface58294d4fd793f7ba39bbfb1bd8
|
||||||
|
created: 1761345559727
|
||||||
|
modified: 1761345567849
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344776103.25
|
||||||
|
method: GET
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser2
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU2MjAsImlhdCI6MTc2MTM0NTMyMCwianRpIjoib25ydHJvOjJhMGIxOGZiLWE4MjEtMWI3MS1iODQ1LWE5NGY0NWY1ZDA4MSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzFhYmVlNzYtOWJkNy02NWMyLWY0MzMtOTJiZjliODZlMDA1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.GBNldYmb4q02AaOwnu1xoLxkF_9qvadLdw1ftjetOsaDNYSe_y_9XhqmStc1ocD11AJUVr0Ix9fqB6TACoNMBS6gegSI6xmmdjT2ABqGilcpMs3OY6edNB8qZ9LP_YFK_z6UWdBBgWmETSfr9zRGVOOfLDMFwadgxCtbeV1AxGLTmfdVLCDPOlZseN3SNKHeFbC_ApYgPR-_vO1Fjl8KE8CucWULoDzgyHBdU1zqlLttlpaOQHl6aHWS0mtb4ymvQWDp7UZd-aukVb41UT5oeVtPS9HC6w2jfd4UBxG1T2TdTfazoXXk1eGgAD7ir6QyoB2Pkv9aANiRMMrTlk0C_w
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/delete/5
|
||||||
|
name: "DELETE resp with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_e04466dab86345809e01cec179a7e210
|
||||||
|
created: 1761348162308
|
||||||
|
modified: 1761348196375
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344751155.75
|
||||||
|
method: DELETE
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: ""
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg0ODUsImlhdCI6MTc2MTM0ODE4NSwianRpIjoib25ydHJvOjg4YWY2ZGE0LWYwMzAtMjMyZi0wYzVmLTNjM2E4YzhlNzcwOCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiM2UyZmRhNzAtY2JiOC1jODZjLTc1YjYtMjQxMzY5YjU1Njg2IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.I4qJZegiHsGn1JLbZMUF6waDq387tCXpOVWuaf4B-emczDw53cfVLGAHefbPmqYSrENqRJwpI-BrWdFxgNO8ELLMfrEKw_dyYbtfM_GJLcxo4zlvaoldZ2RhIN4muJB52zeKPYuBg34KwrlDR49HYvqGkrhNz9Ve8Jl4sbig4T8U53vhveLu0qqpC58RoC-5oXboq8qxVllGbk9mBUDzzU6DpzhyZOp8ywvf-qHs2JJW5svG4en6O2uK4Hpu4Nm_Mr6_ReI5jOJ-XK8C4eCZFjtPOo16x5lA07k4UVRBxu7W1ccMOp_N56pkmwftaOt40EXezXgmEBxmwxCWwzyJhA
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/reponse/removeChoix/1
|
||||||
|
name: "DELETE resp choix with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_16e00e9051c84902a69a7822a49b8bfc
|
||||||
|
created: 1761348252746
|
||||||
|
modified: 1761348405701
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761344744993.875
|
||||||
|
method: PUT
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: |-
|
||||||
|
{
|
||||||
|
"choix": "OptionA"
|
||||||
|
}
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg1OTIsImlhdCI6MTc2MTM0ODI5MiwianRpIjoib25ydHJvOjQwYjU0YTViLWRkMmItZTNlYy0zNDA3LWU5ODAwNWE5YThjMSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiNjg0MjQ3YzUtZDAxYy0yY2Y3LTI0NTYtYWQ3MTgyNTExZWQ4IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.aUvRWi5eYa0AmrLeTVKVHRA_oc0qPsHwsXZIQMhxWea8CEv3ScXi_BNi_H5U-3D_wAdGjOXz8iWS4WS2TtYiCjOwNhCmwVfheN36X-ub_h3PpmCn-SH68V7f-761BMmXk4Uao91CyQ-kXdhDJqde3qcmBsLjwx3ccuzmF9cMwUpoUVkCnWxfJEIhR-MGvjxxtku_EZZxce3CLFsxXmNYi8oa-BjMYh5GG3GQg2MIuivDIF-gfZFxjYZRV4icwybDTZ0jQht6aVopnoapnVh7kkggvjafsfmy0EZ34dkV5VsQGOOo-L6d4WRo9JbkO1e2ZiphMjCtU_W_H0eqbLqRsw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- name: QUIZZ
|
||||||
|
meta:
|
||||||
|
id: fld_7cc2d773f5a942ac98e9614bafc67a43
|
||||||
|
created: 1761348455968
|
||||||
|
modified: 1761348514804
|
||||||
|
sortKey: -1761344725037.875
|
||||||
|
description: ""
|
||||||
|
children:
|
||||||
|
- url: http://localhost:8082/quizz/create/1
|
||||||
|
name: "CREATE quizz with ADMIN "
|
||||||
|
meta:
|
||||||
|
id: req_e954bc2df607411a889380466d7889f0
|
||||||
|
created: 1761348544027
|
||||||
|
modified: 1761348778718
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761348548595
|
||||||
|
method: POST
|
||||||
|
body:
|
||||||
|
mimeType: application/json
|
||||||
|
text: "{}"
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/json
|
||||||
|
id: pair_2694b5ff2f964512842dc3fa44ccd3e1
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg4NzksImlhdCI6MTc2MTM0ODU3OSwianRpIjoib25ydHJvOmJiYmQyM2QwLTY2ZTctMWY0NS1iNTFiLTBiZGFjNzQzZmZiMyIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiN2FjZmE3YWItNTk4ZC01ZmVlLTU0MzktYzMyNDYyYzFkM2JjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.TrxycBI76TRjSNjA7kwDNycyKjmNwhjfMnQ2xOi0hVvBqpQN-nIH6mvm3hv6FwoTCVZz9lwwS5kpn83Z4FoYZVY5oKGYsccNR77tg42Rahn1UXOuQuCs4v9W0oqClQa5PtI8loQXO9d5P3mc8uuUvO2vClnGRrky48DqGDSis30fXPY-c26TIZvIRyi_PWPSOK2i2k9w7fkWPodkkGxdaRm4Sc45hNXCA9FT8xRJhzfxJ21ynOovx2Z9y8lILqV5Q4NqjMOTlzyVwkj6vS3veXIJkHAAk8LPdHJKoPrrqQzXXsb3ZIgTl8DyF2cYcJ58vOOle91UoGuqWi1U-pJSnw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- url: http://localhost:8082/quizz/getAll
|
||||||
|
name: Get all quizz from USER
|
||||||
|
meta:
|
||||||
|
id: req_f1529608fc064c4f83df2717cefb01ef
|
||||||
|
created: 1761348670144
|
||||||
|
modified: 1761348786170
|
||||||
|
isPrivate: false
|
||||||
|
description: ""
|
||||||
|
sortKey: -1761348548495
|
||||||
|
method: GET
|
||||||
|
body:
|
||||||
|
mimeType: application/x-www-form-urlencoded
|
||||||
|
params:
|
||||||
|
- id: pair_54b0a24cfe5c4d81ae864d64640e35f2
|
||||||
|
name: client_id
|
||||||
|
value: myspringbootapp
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f6c73c60f3024e42bbacc223615d3be1
|
||||||
|
name: client_secret
|
||||||
|
value: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_3698939343424230a63d135857f0acb1
|
||||||
|
name: username
|
||||||
|
value: myuser2
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_f8b4c07baea14742a4ebd8f005ff5e92
|
||||||
|
name: password
|
||||||
|
value: "1"
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
- id: pair_e49d8dbb324d484bad8747b563ae1615
|
||||||
|
name: grant_type
|
||||||
|
value: password
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
headers:
|
||||||
|
- name: Content-Type
|
||||||
|
value: application/x-www-form-urlencoded
|
||||||
|
id: pair_987cf70c521843c8a47e1c51976cce3b
|
||||||
|
type: text
|
||||||
|
multiline: false
|
||||||
|
- name: User-Agent
|
||||||
|
value: insomnia/11.6.1
|
||||||
|
id: pair_4c3461e4c95d45bd973dcb4bfd5e519a
|
||||||
|
- id: pair_b3814f137d494ce389fbe6075385cb71
|
||||||
|
name: Authorization
|
||||||
|
value: Bearer
|
||||||
|
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg4NzksImlhdCI6MTc2MTM0ODU3OSwianRpIjoib25ydHJvOmJiYmQyM2QwLTY2ZTctMWY0NS1iNTFiLTBiZGFjNzQzZmZiMyIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiN2FjZmE3YWItNTk4ZC01ZmVlLTU0MzktYzMyNDYyYzFkM2JjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.TrxycBI76TRjSNjA7kwDNycyKjmNwhjfMnQ2xOi0hVvBqpQN-nIH6mvm3hv6FwoTCVZz9lwwS5kpn83Z4FoYZVY5oKGYsccNR77tg42Rahn1UXOuQuCs4v9W0oqClQa5PtI8loQXO9d5P3mc8uuUvO2vClnGRrky48DqGDSis30fXPY-c26TIZvIRyi_PWPSOK2i2k9w7fkWPodkkGxdaRm4Sc45hNXCA9FT8xRJhzfxJ21ynOovx2Z9y8lILqV5Q4NqjMOTlzyVwkj6vS3veXIJkHAAk8LPdHJKoPrrqQzXXsb3ZIgTl8DyF2cYcJ58vOOle91UoGuqWi1U-pJSnw
|
||||||
|
description: ""
|
||||||
|
disabled: false
|
||||||
|
settings:
|
||||||
|
renderRequestBody: true
|
||||||
|
encodeUrl: true
|
||||||
|
followRedirects: global
|
||||||
|
cookies:
|
||||||
|
send: true
|
||||||
|
store: true
|
||||||
|
rebuildPath: true
|
||||||
|
- name: QUESTION
|
||||||
|
meta:
|
||||||
|
id: fld_c6cc9e699561490db8dce6d93e60a0cd
|
||||||
|
created: 1761348479799
|
||||||
|
modified: 1761348510649
|
||||||
|
sortKey: -1761344727350.4062
|
||||||
|
description: ""
|
||||||
|
cookieJar:
|
||||||
|
name: Default Jar
|
||||||
|
meta:
|
||||||
|
id: jar_068e06f12cad1a0f9f00592ae145d89f7e23f621
|
||||||
|
created: 1759266691097
|
||||||
|
modified: 1761348288035
|
||||||
|
cookies:
|
||||||
|
- key: JSESSIONID
|
||||||
|
value: 43CC5321D4DE83F58DA69D80E2AC45A1
|
||||||
|
domain: localhost
|
||||||
|
path: /
|
||||||
|
httpOnly: true
|
||||||
|
hostOnly: true
|
||||||
|
creation: 2025-10-22T19:54:48.589Z
|
||||||
|
lastAccessed: 2025-10-24T23:24:48.035Z
|
||||||
|
id: eeeea037-2a2e-4b1b-badb-22b5c98f4519
|
||||||
|
environments:
|
||||||
|
name: Base Environment
|
||||||
|
meta:
|
||||||
|
id: env_068e06f12cad1a0f9f00592ae145d89f7e23f621
|
||||||
|
created: 1754408137751
|
||||||
|
modified: 1759266691083
|
||||||
|
isPrivate: false
|
||||||
91
README.md
91
README.md
@@ -1,15 +1,92 @@
|
|||||||
# TP TAA
|
# TP TAA
|
||||||
|
|
||||||
|
|
||||||
## TP1 - TP2
|
|
||||||
|
|
||||||
Le compte rendu pour le TP1 et TP2 partie servlet est dans la branche tp_servlet
|
|
||||||
|
|
||||||
Le compte rendu de la partie API Rest du TP2 est dans la branche tp_rest
|
|
||||||
|
|
||||||
## TP3 - TP4
|
## TP3 - TP4
|
||||||
|
|
||||||
Le compte rendu des TP3 et TP4 est dans la branche tp_spring
|
### Nous avons maintenant deux rôles :
|
||||||
|
|
||||||
|
- ADMIN : correspond à l’enseignant
|
||||||
|
|
||||||
|
- USER : correspond à l’étudiant
|
||||||
|
|
||||||
|
Pour Keycloak, il faudrait normalement créer les utilisateurs via OAuth2. Cependant, pour ce TP, nous avons utilisé directement la base de données (BDD) pour créer les utilisateurs.
|
||||||
|
|
||||||
|
### Remarques sur les entités
|
||||||
|
|
||||||
|
Pour les classes Quizz, Question et Utilisateur, nous avons testé que tout fonctionne, mais elles sont liées à Utilisateur. Cela n’a pas beaucoup de sens avec les rôles USER de Keycloak et ce n’est pas l’objectif principal du TP.
|
||||||
|
|
||||||
|
### Tests avec Insomnia
|
||||||
|
|
||||||
|
Pour simplifier et se concentrer sur les fonctionnalités principales, nous avons testé les classes Session et Reponse directement via Insomnia.
|
||||||
|
|
||||||
|
### Example de token admin et user dans OAuth2
|
||||||
|
- Site web de décodage:
|
||||||
|
https://www.jwt.io/
|
||||||
|
|
||||||
|
- Admin
|
||||||
|
`eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDg4NzksImlhdCI6MTc2MTM0ODU3OSwianRpIjoib25ydHJvOmJiYmQyM2QwLTY2ZTctMWY0NS1iNTFiLTBiZGFjNzQzZmZiMyIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmY5YWRhYzQtODU4Ni00NTI4LWE4Y2QtM2I3M2I5NTc0ODBiIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiN2FjZmE3YWItNTk4ZC01ZmVlLTU0MzktYzMyNDYyYzFkM2JjIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJBRE1JTiIsImRlZmF1bHQtcm9sZXMtbXlzcHJpbmdib290YXBwcmVhbG0iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6InByb2ZpbGUgZW1haWwiLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwibmFtZSI6IlRpYm8gUm9jaGFzIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyIiwiZ2l2ZW5fbmFtZSI6IlRpYm8iLCJmYW1pbHlfbmFtZSI6IlJvY2hhcyIsImVtYWlsIjoidGlib0BjYWNhLmNvbSJ9.TrxycBI76TRjSNjA7kwDNycyKjmNwhjfMnQ2xOi0hVvBqpQN-nIH6mvm3hv6FwoTCVZz9lwwS5kpn83Z4FoYZVY5oKGYsccNR77tg42Rahn1UXOuQuCs4v9W0oqClQa5PtI8loQXO9d5P3mc8uuUvO2vClnGRrky48DqGDSis30fXPY-c26TIZvIRyi_PWPSOK2i2k9w7fkWPodkkGxdaRm4Sc45hNXCA9FT8xRJhzfxJ21ynOovx2Z9y8lILqV5Q4NqjMOTlzyVwkj6vS3veXIJkHAAk8LPdHJKoPrrqQzXXsb3ZIgTl8DyF2cYcJ58vOOle91UoGuqWi1U-pJSnw`
|
||||||
|
- User
|
||||||
|
`eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJVaDlNMG8wMERKaEdTQzdTRjdmdDlFZWFDNmE4UVdKV0NPXzdENVBKeXFRIn0.eyJleHAiOjE3NjEzNDU2MjAsImlhdCI6MTc2MTM0NTMyMCwianRpIjoib25ydHJvOjJhMGIxOGZiLWE4MjEtMWI3MS1iODQ1LWE5NGY0NWY1ZDA4MSIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yZWFsbXMvbXlzcHJpbmdib290YXBwcmVhbG0iLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiOTkyZTI3OTktN2ExOS00ZWY1LTk0ODItYWMzMjljNTNhNDc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibXlzcHJpbmdib290YXBwIiwic2lkIjoiMzFhYmVlNzYtOWJkNy02NWMyLWY0MzMtOTJiZjliODZlMDA1IiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyJodHRwOi8vbG9jYWxob3N0OjgwODIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJVU0VSIiwiZGVmYXVsdC1yb2xlcy1teXNwcmluZ2Jvb3RhcHByZWFsbSJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJuYW1lIjoidWlvYXpkcSB6c29rZHFzamtkIiwicHJlZmVycmVkX3VzZXJuYW1lIjoibXl1c2VyMiIsImdpdmVuX25hbWUiOiJ1aW9hemRxIiwiZmFtaWx5X25hbWUiOiJ6c29rZHFzamtkIiwiZW1haWwiOiJva0BjYWNhLmNvbSJ9.GBNldYmb4q02AaOwnu1xoLxkF_9qvadLdw1ftjetOsaDNYSe_y_9XhqmStc1ocD11AJUVr0Ix9fqB6TACoNMBS6gegSI6xmmdjT2ABqGilcpMs3OY6edNB8qZ9LP_YFK_z6UWdBBgWmETSfr9zRGVOOfLDMFwadgxCtbeV1AxGLTmfdVLCDPOlZseN3SNKHeFbC_ApYgPR-_vO1Fjl8KE8CucWULoDzgyHBdU1zqlLttlpaOQHl6aHWS0mtb4ymvQWDp7UZd-aukVb41UT5oeVtPS9HC6w2jfd4UBxG1T2TdTfazoXXk1eGgAD7ir6QyoB2Pkv9aANiRMMrTlk0C_w`
|
||||||
|
|
||||||
|
#### Utilisateur Resource
|
||||||
|
| Methode | URL | Description |
|
||||||
|
|---------|----------------------------------------------------|----------------------------------------------------------------------------------------------|
|
||||||
|
| POST | `/utilisateur/create` | Créer un utilisateur (avec aussi l'id keyloak) ("name","email et "password" dans body json) |
|
||||||
|
| GET | `/utilisateur/getAll` | retourn tout les utilisateurs (id, name, email) |
|
||||||
|
| GET | `/utilisateur/getSessions/{session_id}` | Retourne les sessions de l'utilisateur |
|
||||||
|
| PUT | `/utilisateur/addSession/{user_id}/{session_id}` | rejoint une session à la liste de l'utilisateur |
|
||||||
|
| PUT | `/utilisateur/removeSession/{user_id}/{session_id}`| quite une session à la liste de l'utilisateur |
|
||||||
|
| PUT | `/utilisateur/update/{user_id}` | met à jour les info de l'utilisateur ("name","email et "password" dans body json) |
|
||||||
|
| DELETE | `/utilisteur/delete/{user_id}/delete` | Supprime l'utilisateur |
|
||||||
|
|
||||||
|
#### Session Resource
|
||||||
|
| Methode | URL | Description |
|
||||||
|
|---------|-------------------------------------------------|---------------------------------------------------------------|
|
||||||
|
| POST | `/session/create` | créer une nouvelle session ("theme":String dans body json) |
|
||||||
|
| GET | `/session/getAll` | Retourne la liste des sessions |
|
||||||
|
| PUT | `/session/addQuizz/{session_id}/{quizz_id}` | ajoute un quizz à la session |
|
||||||
|
| PUT | `/session/removeQuizz/{session_id}/{quizz_id}` | retire un quizz à la session |
|
||||||
|
| PUT | `/session/update/{session_id}` | change le thème ("theme":String dans body json) |
|
||||||
|
| PUT | `/session/join/{session_id}` | l'utilisateur courant (keycloak) rejout la session |
|
||||||
|
| PUT | `/session/leave/{session_id}` | l'utilisateur courant (keycloak) quitte la session |
|
||||||
|
| DELETE | `/session/delete/{session_id}` | Supprime la session |
|
||||||
|
|
||||||
|
#### ReponseController
|
||||||
|
| Methode | URL | Description |
|
||||||
|
|---------|-------------------------------------------------|---------------------------------------------------------------------------|
|
||||||
|
| POST | `/reponse/create/choix` | créer un objet réponse de type choix multiple |
|
||||||
|
| POST | `/reponse/create/courte` | créer un objet réponse de type réponse courte |
|
||||||
|
| GET | `/reponse/getAll` | affiche l'id et les réponse correct de chaque réponse |
|
||||||
|
| GET | `/reponse/get/{id_reponse}` | affiche toutes les info d'un réponse |
|
||||||
|
| DELETE | `/reponse/delete/{id_reponse}` | supprime un objet réponse |
|
||||||
|
| PUT | `/reponse/removeReponse/{id_reponse} ` | retire une réponse correcte ("reponse" dans body json) |
|
||||||
|
| PUT | `/reponse/addReponse/{id_reponse} ` | ajoute une réponse correcte ("reponse" dans body json) |
|
||||||
|
| PUT | `/reponse/addChoix/{id_reponse} ` | ajoute un choix (réponse choix uniquement) ("choix":String dans body json)|
|
||||||
|
| PUT | `/reponse/removeChoix/{id_reponse}` | retire un choix (réponse choix uniquement) ("choix":String dans body json)|
|
||||||
|
|
||||||
|
#### Quizz Resource
|
||||||
|
| Methode | URL | Description |
|
||||||
|
|---------|-------------------------------------------------|----------------------------------------------------|
|
||||||
|
| POST | `/quizz/create/{utilisateur_id}` | céer un nouveau quizz par associé à un utilisateur |
|
||||||
|
| GET | `/quizz/getQuestions/{quizz_id}` | Retourne la list des questions d'un quizz |
|
||||||
|
| GET | `/quizz/getAll` | Retourne toute la liste du quizz |
|
||||||
|
| PUT | `/quizz/add_question/{quizz_id}/{question_id}` | Ajoute une nouvelle question au quizz |
|
||||||
|
| PUT | `/quizz/removeQuestion/{quizz_id}/{question_id}`| Ajoute une nouvelle question au quizz |
|
||||||
|
| DELETE | `/quizz/delete/{quizz_id}` | Suprrime le quizz |
|
||||||
|
|
||||||
|
#### Question Resource
|
||||||
|
| Methode | URL | Description |
|
||||||
|
|----------|----------------------------------------------------|-----------------------------------------------------------------------|
|
||||||
|
| GET | `/question` | Retourne toute la liste du question |
|
||||||
|
| POST | `/question/create` | Créer une question ( "enonce":String dans body Json) |
|
||||||
|
| PUT | `/question/update/{question_id}` | Change l'énoncé de la question ("enonce":String dans body JSON) |
|
||||||
|
| GET | `/question/get/{question_id}` | donne toutes les infos de la question sous forme de String |
|
||||||
|
| GET | `/question/getAll` | donne l'id et l'énoncé de toutes les questions sous forme de String |
|
||||||
|
| GET | `/question/getReponse/{question_id}` | donne toutes les réponse correct sous forme de String |
|
||||||
|
| PUT | `/question/setReponse/{question_id}/{reponse_id}` | met à null l'objet réponse à la question |
|
||||||
|
| PUT | `/question/setReponse/{question_id}/{reponse_id}` | Associe un objet réponse à la question |
|
||||||
|
| PUT | `/question/delet/{question_id}` | supprime la question |
|
||||||
|
|
||||||
|
|
||||||
## Auteurs
|
## Auteurs
|
||||||
|
|
||||||
|
|||||||
209
pom.xml
Executable file
209
pom.xml
Executable file
@@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-sample-data-jpa</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
<name>Spring Boot Data JPA Sample</name>
|
||||||
|
<description>Spring Boot Data JPA Sample</description>
|
||||||
|
<url>http://projects.spring.io/spring-boot/</url>
|
||||||
|
<organization>
|
||||||
|
<name>Pivotal Software, Inc.</name>
|
||||||
|
<url>http://www.spring.io</url>
|
||||||
|
</organization>
|
||||||
|
<properties>
|
||||||
|
<main.basedir>${basedir}/../..</main.basedir>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.3.3</version>
|
||||||
|
<relativePath/>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-oauth2-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.security</groupId>
|
||||||
|
<artifactId>spring-security-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.mysql</groupId>
|
||||||
|
<artifactId>mysql-connector-j</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.13.2</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.hsqldb</groupId>
|
||||||
|
<artifactId>hsqldb</artifactId>
|
||||||
|
<version>2.7.2</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>jakarta.validation</groupId>
|
||||||
|
<artifactId>jakarta.validation-api</artifactId>
|
||||||
|
<version>3.1.1</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
<!-- <version>1.4.192</version> -->
|
||||||
|
<version>2.2.224</version>
|
||||||
|
<scope>runtime</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.42</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<version>3.1.2</version>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-eclipse-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<useProjectReferences>false</useProjectReferences>
|
||||||
|
<additionalConfig>
|
||||||
|
<file>
|
||||||
|
<name>.settings/org.eclipse.jdt.ui.prefs</name>
|
||||||
|
<location>${main.basedir}/eclipse/org.eclipse.jdt.ui.prefs</location>
|
||||||
|
</file>
|
||||||
|
<file>
|
||||||
|
<name>.settings/org.eclipse.jdt.core.prefs</name>
|
||||||
|
<location>${main.basedir}/eclipse/org.eclipse.jdt.core.prefs</location>
|
||||||
|
</file>
|
||||||
|
</additionalConfig>
|
||||||
|
<annotationProcessorPaths>
|
||||||
|
<path>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
<version>1.18.42</version>
|
||||||
|
</path>
|
||||||
|
</annotationProcessorPaths>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<includes>
|
||||||
|
<include>**/*Tests.java</include>
|
||||||
|
</includes>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/Abstract*.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
<systemPropertyVariables>
|
||||||
|
<java.security.egd>file:/dev/./urandom</java.security.egd>
|
||||||
|
<java.awt.headless>true</java.awt.headless>
|
||||||
|
</systemPropertyVariables>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<pluginManagement>
|
||||||
|
<plugins>
|
||||||
|
<!--This plugin's configuration is used to store Eclipse m2e settings
|
||||||
|
only. It has no influence on the Maven build itself. -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.eclipse.m2e</groupId>
|
||||||
|
<artifactId>lifecycle-mapping</artifactId>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<configuration>
|
||||||
|
<lifecycleMappingMetadata>
|
||||||
|
<pluginExecutions>
|
||||||
|
<pluginExecution>
|
||||||
|
<pluginExecutionFilter>
|
||||||
|
<groupId>
|
||||||
|
org.springframework.boot
|
||||||
|
</groupId>
|
||||||
|
<artifactId>
|
||||||
|
spring-boot-maven-plugin
|
||||||
|
</artifactId>
|
||||||
|
<versionRange>
|
||||||
|
[3.1.2,)
|
||||||
|
</versionRange>
|
||||||
|
<goals>
|
||||||
|
<goal>build-info</goal>
|
||||||
|
</goals>
|
||||||
|
</pluginExecutionFilter>
|
||||||
|
<action>
|
||||||
|
<ignore/>
|
||||||
|
</action>
|
||||||
|
</pluginExecution>
|
||||||
|
</pluginExecutions>
|
||||||
|
</lifecycleMappingMetadata>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</pluginManagement>
|
||||||
|
</build>
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>spring-releases</id>
|
||||||
|
<name>Spring Releases</name>
|
||||||
|
<url>http://repo.spring.io/release</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>false</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
|
</project>
|
||||||
27
src/main/java/sample/data/jpa/SampleDataJpaApplication.java
Normal file
27
src/main/java/sample/data/jpa/SampleDataJpaApplication.java
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2013 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package sample.data.jpa;
|
||||||
|
|
||||||
|
import org.springframework.boot.SpringApplication;
|
||||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
|
@SpringBootApplication
|
||||||
|
public class SampleDataJpaApplication {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
SpringApplication.run(SampleDataJpaApplication.class, args);
|
||||||
|
}
|
||||||
|
}
|
||||||
41
src/main/java/sample/data/jpa/WebSecurityConfig.java
Normal file
41
src/main/java/sample/data/jpa/WebSecurityConfig.java
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package sample.data.jpa;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
|
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
|
||||||
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebSecurity
|
||||||
|
public class WebSecurityConfig {
|
||||||
|
@Bean
|
||||||
|
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||||
|
http.authorizeHttpRequests(auth -> auth
|
||||||
|
.requestMatchers("/").permitAll()
|
||||||
|
.requestMatchers("/index").hasAuthority("USER")
|
||||||
|
.requestMatchers("/admin").hasAuthority("ADMIN")
|
||||||
|
.requestMatchers("/session/**").hasAnyAuthority("USER", "ADMIN")
|
||||||
|
.requestMatchers("/quizz/**").hasAuthority("ADMIN")
|
||||||
|
.anyRequest().authenticated()
|
||||||
|
)
|
||||||
|
.oauth2ResourceServer(oauth2 -> oauth2
|
||||||
|
.jwt(jwt -> jwt.jwtAuthenticationConverter(jwtToken -> {
|
||||||
|
Map<String, Collection<String>> realmAccess = jwtToken.getClaim("realm_access");
|
||||||
|
Collection<String> roles = realmAccess.get("roles");
|
||||||
|
List<SimpleGrantedAuthority> grantedAuthorities = roles.stream()
|
||||||
|
.map(role -> new SimpleGrantedAuthority(role.toUpperCase()))
|
||||||
|
.toList();
|
||||||
|
return new JwtAuthenticationToken(jwtToken, grantedAuthorities);
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
return http.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/main/java/sample/data/jpa/controller/ViewController.java
Normal file
38
src/main/java/sample/data/jpa/controller/ViewController.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package sample.data.jpa.controller;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
public class ViewController {
|
||||||
|
@GetMapping("/index")
|
||||||
|
@PreAuthorize("hasRole('USER')")
|
||||||
|
public ModelAndView index(JwtAuthenticationToken authentication) {
|
||||||
|
|
||||||
|
ModelAndView modelAndView = new ModelAndView("index");
|
||||||
|
authentication.getToken().getClaims().forEach((e, v) -> {
|
||||||
|
System.err.println(e + ' ' + v);
|
||||||
|
});
|
||||||
|
modelAndView.addObject("user", authentication);
|
||||||
|
return modelAndView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/")
|
||||||
|
public ModelAndView main() {
|
||||||
|
ModelAndView modelAndView = new ModelAndView("indexmain");
|
||||||
|
return modelAndView;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/admin")
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public ModelAndView admin(Principal principal) {
|
||||||
|
ModelAndView modelAndView = new ModelAndView("admin");
|
||||||
|
modelAndView.addObject("user", principal);
|
||||||
|
return modelAndView;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
src/main/java/sample/data/jpa/metier/Choix.java
Normal file
53
src/main/java/sample/data/jpa/metier/Choix.java
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@PrimaryKeyJoinColumn(name = "Choix_Id")
|
||||||
|
public class Choix extends Reponse{
|
||||||
|
List<String> choix = new ArrayList<String>();;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String valHTML(){
|
||||||
|
String res = "";
|
||||||
|
|
||||||
|
for (String val : this.choix) {
|
||||||
|
res+=val+"<br/>";
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String prettyPrinter(int tab){
|
||||||
|
|
||||||
|
String tabStr = "";
|
||||||
|
for(int i =0; i<tab;i++)tabStr+="\t";
|
||||||
|
|
||||||
|
String res = "";
|
||||||
|
|
||||||
|
res += tabStr+"choix : [";
|
||||||
|
for (int i = 0; i<this.choix.size(); i++) {
|
||||||
|
res += this.choix.get(i);
|
||||||
|
if(i<this.choix.size()-1) res+= ", ";
|
||||||
|
}
|
||||||
|
res += "]\n";
|
||||||
|
|
||||||
|
res += tabStr +"reponses : [";
|
||||||
|
for (int i = 0; i<this.reponses.size(); i++) {
|
||||||
|
res += this.reponses.get(i);
|
||||||
|
if(i<this.reponses.size()-1) res+= ", ";
|
||||||
|
}
|
||||||
|
res += "]\n";
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
39
src/main/java/sample/data/jpa/metier/Question.java
Normal file
39
src/main/java/sample/data/jpa/metier/Question.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Question implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
private String enonce;
|
||||||
|
|
||||||
|
@OneToOne(cascade = CascadeType.ALL)
|
||||||
|
@JoinColumn(name ="bonne_reponse", referencedColumnName = "id")
|
||||||
|
private Reponse reponse;
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name="id_quizz")
|
||||||
|
private Quizz quizz;
|
||||||
|
|
||||||
|
public String prettyPrinter(int tab){
|
||||||
|
String res = "";
|
||||||
|
String tabStr = "";
|
||||||
|
for(int i =0; i<tab;i++)tabStr+="\t";
|
||||||
|
|
||||||
|
res += tabStr + "id : " + this.getId() + "\n";
|
||||||
|
res += tabStr + "ennonce : \"" + this.getEnonce() + "\"\n";
|
||||||
|
res += this.getReponse().prettyPrinter(tab);;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/sample/data/jpa/metier/Quizz.java
Normal file
30
src/main/java/sample/data/jpa/metier/Quizz.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Quizz implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
private List<Session> sessions = new ArrayList<Session>();
|
||||||
|
|
||||||
|
@ManyToOne
|
||||||
|
@JoinColumn(name="id_utilisateur")
|
||||||
|
private Utilisateur createur;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "quizz")
|
||||||
|
private List<Question> questions=new ArrayList<Question>();
|
||||||
|
}
|
||||||
45
src/main/java/sample/data/jpa/metier/Reponse.java
Normal file
45
src/main/java/sample/data/jpa/metier/Reponse.java
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Inheritance(strategy=InheritanceType.JOINED)
|
||||||
|
@DiscriminatorColumn(name="Type_reponse")
|
||||||
|
@DiscriminatorValue("Reponse")
|
||||||
|
public abstract class Reponse implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@OneToOne
|
||||||
|
private Question question;
|
||||||
|
public List<String> reponses = new ArrayList<String>();
|
||||||
|
|
||||||
|
public String valHTML(){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String prettyPrinter(int tab){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString(){
|
||||||
|
String res = "[";
|
||||||
|
for (int i = 0; i<this.reponses.size(); i++) {
|
||||||
|
res += this.reponses.get(i);
|
||||||
|
if(i<this.reponses.size()-1) res+= ", ";
|
||||||
|
}
|
||||||
|
res += "]";
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
37
src/main/java/sample/data/jpa/metier/ReponseCourte.java
Normal file
37
src/main/java/sample/data/jpa/metier/ReponseCourte.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.Entity;
|
||||||
|
import jakarta.persistence.PrimaryKeyJoinColumn;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
@PrimaryKeyJoinColumn(name = "RC_Id")
|
||||||
|
public class ReponseCourte extends Reponse{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String valHTML(){
|
||||||
|
return "INPUT";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String prettyPrinter(int tab){
|
||||||
|
|
||||||
|
String tabStr = "";
|
||||||
|
for(int i =0; i<tab;i++)tabStr+="\t";
|
||||||
|
|
||||||
|
String res = tabStr+"INPUT\n";
|
||||||
|
|
||||||
|
res += tabStr +"reponses : [";
|
||||||
|
for (int i = 0; i<this.reponses.size(); i++) {
|
||||||
|
res += this.reponses.get(i);
|
||||||
|
if(i<this.reponses.size()-1) res+= ", ";
|
||||||
|
}
|
||||||
|
res += "]\n";
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
30
src/main/java/sample/data/jpa/metier/Session.java
Normal file
30
src/main/java/sample/data/jpa/metier/Session.java
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Session implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
|
||||||
|
@Column(unique=true)
|
||||||
|
private int codePIN;
|
||||||
|
|
||||||
|
@ManyToMany(mappedBy="sessions")
|
||||||
|
private List<Quizz> quizzs = new ArrayList<>();
|
||||||
|
|
||||||
|
@ManyToMany(mappedBy = "sessions")
|
||||||
|
private List<Utilisateur> utilisateurs = new ArrayList<>();
|
||||||
|
private String theme;
|
||||||
|
}
|
||||||
37
src/main/java/sample/data/jpa/metier/Utilisateur.java
Normal file
37
src/main/java/sample/data/jpa/metier/Utilisateur.java
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package sample.data.jpa.metier;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.*;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class Utilisateur implements Serializable {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
//Pour génénrer un sub diff pour chaque persone
|
||||||
|
@Column(unique = true)
|
||||||
|
private String keycloakId;
|
||||||
|
|
||||||
|
@Column(unique=true)
|
||||||
|
private String email;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
@ManyToMany
|
||||||
|
@JoinTable(
|
||||||
|
name="utilisateur_session",
|
||||||
|
joinColumns = @JoinColumn(name="utilisateur_id"),
|
||||||
|
inverseJoinColumns = @JoinColumn(name = "session_id")
|
||||||
|
)
|
||||||
|
private List<Session> sessions= new ArrayList<>();
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "createur")
|
||||||
|
private List<Quizz> quizzs = new ArrayList<>();
|
||||||
|
}
|
||||||
10
src/main/java/sample/data/jpa/service/QuestionDao.java
Normal file
10
src/main/java/sample/data/jpa/service/QuestionDao.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package sample.data.jpa.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Question;
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public interface QuestionDao extends JpaRepository<Question, Integer> {
|
||||||
|
}
|
||||||
11
src/main/java/sample/data/jpa/service/QuizzDao.java
Normal file
11
src/main/java/sample/data/jpa/service/QuizzDao.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package sample.data.jpa.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Quizz;
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public interface QuizzDao extends JpaRepository<Quizz, Integer> {
|
||||||
|
|
||||||
|
}
|
||||||
11
src/main/java/sample/data/jpa/service/ReponseDao.java
Normal file
11
src/main/java/sample/data/jpa/service/ReponseDao.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package sample.data.jpa.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Reponse;
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public interface ReponseDao extends JpaRepository<Reponse, Integer> {
|
||||||
|
|
||||||
|
}
|
||||||
9
src/main/java/sample/data/jpa/service/SessionDao.java
Normal file
9
src/main/java/sample/data/jpa/service/SessionDao.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package sample.data.jpa.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Session;
|
||||||
|
|
||||||
|
public interface SessionDao extends JpaRepository<Session, Integer> {
|
||||||
|
boolean existsByCodePIN(int codePIN);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package sample.data.jpa.service;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Utilisateur;
|
||||||
|
|
||||||
|
public interface UtilisateurDao extends JpaRepository<Utilisateur, Integer> {
|
||||||
|
Utilisateur findByKeycloakId(String keycloakId);
|
||||||
|
}
|
||||||
188
src/main/java/sample/data/jpa/web/QuestionController.java
Normal file
188
src/main/java/sample/data/jpa/web/QuestionController.java
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
package sample.data.jpa.web;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Question;
|
||||||
|
import sample.data.jpa.metier.Reponse;
|
||||||
|
import sample.data.jpa.service.QuestionDao;
|
||||||
|
import sample.data.jpa.service.ReponseDao;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/question")
|
||||||
|
public class QuestionController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private QuestionDao qDao;
|
||||||
|
@Autowired
|
||||||
|
private ReponseDao rDao;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Post /question/create param : body Jsp, "enonce"
|
||||||
|
Put /question/update/{id} param : body Jsp, "enonce"
|
||||||
|
Get /question/getAll
|
||||||
|
Get /question/get/{id}
|
||||||
|
Get /question/getReponse/{id}
|
||||||
|
Put /question/removeReponse
|
||||||
|
Put /question/setReponse/{id}/{idReponse}
|
||||||
|
Delete /question/delete/{id}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utiliser un Json pour mettre : String enonce
|
||||||
|
*/
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String create(@RequestBody Map<String, String> body) {
|
||||||
|
String qId = "";
|
||||||
|
Question q = new Question();
|
||||||
|
try {
|
||||||
|
if (body.containsKey("enonce")) {
|
||||||
|
q.setEnonce(body.get("enonce"));
|
||||||
|
} else q.setEnonce("");
|
||||||
|
qDao.save(q);
|
||||||
|
qId = String.valueOf(q.getId());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error creating the question : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Question \"" + q.getEnonce() + "\" succesfully created with id = " + qId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utiliser un Json pour mettre le String "enonce"
|
||||||
|
* l'id se met dans l'url
|
||||||
|
*/
|
||||||
|
@PutMapping("/update/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String update(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
Question q;
|
||||||
|
try {
|
||||||
|
q = qDao.findById(id).get();
|
||||||
|
q.setEnonce(body.get("enonce"));
|
||||||
|
qDao.save(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error updating the question: " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Question " + id + " succesfully updated! : " + q.getEnonce();
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String get(@PathVariable("id") int id) {
|
||||||
|
Question q;
|
||||||
|
String res = "";
|
||||||
|
try {
|
||||||
|
q = qDao.findById(id).get();
|
||||||
|
res=q.prettyPrinter(0);
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
return "Erreur lors de la récupération de la question : " + ex.toString();
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getAll")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getAll() {
|
||||||
|
try {
|
||||||
|
List<Question> questions = qDao.findAll();
|
||||||
|
String res = "";
|
||||||
|
for (Question question : questions) {
|
||||||
|
res += "id: " + question.getId() + " , ";
|
||||||
|
res += "enonce: \"" + question.getEnonce() + "\"\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la récupération des question : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getReponses/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getReponses(@PathVariable("id") int id) {
|
||||||
|
try {
|
||||||
|
Question question = qDao.findById(id).get();
|
||||||
|
Reponse rep = question.getReponse();
|
||||||
|
if (rep != null) {
|
||||||
|
List<String> reponses = rep.getReponses();
|
||||||
|
String res = "[";
|
||||||
|
for (int i = 0; i < reponses.size(); i++) {
|
||||||
|
res += reponses.get(i);
|
||||||
|
if (i < reponses.size() - 1) {
|
||||||
|
res += ",";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res += "]";
|
||||||
|
return "Réponse de la question " + id + " : " + res;
|
||||||
|
} else return "Réponse non initialisée pour la question : " + id;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la récupération de la réponse : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/removeReponse/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeReponse(@PathVariable("id") int id) {
|
||||||
|
try {
|
||||||
|
Question question = qDao.findById(id).get();
|
||||||
|
Reponse reponse = question.getReponse();
|
||||||
|
reponse.setQuestion(null);
|
||||||
|
question.setReponse(null);
|
||||||
|
qDao.save(question);
|
||||||
|
rDao.save(reponse);
|
||||||
|
return "Reponses retiré de la question " + id;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la mise en place de la Reponse : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/setReponse/{id}/{idR}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String setReponse(@PathVariable("id") int id, @PathVariable("idR") int idR) {
|
||||||
|
try {
|
||||||
|
Question question = qDao.findById(id).get();
|
||||||
|
Reponse reponse = rDao.findById(idR).get();
|
||||||
|
question.setReponse(reponse);
|
||||||
|
reponse.setQuestion(question);
|
||||||
|
qDao.save(question);
|
||||||
|
rDao.save(reponse);
|
||||||
|
return "Reponses " + idR + " mises sur la question " + id;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la mise en place de la Reponse : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String delete(@PathVariable("id") int id) {
|
||||||
|
try {
|
||||||
|
Question q = qDao.findById(id).get();
|
||||||
|
qDao.delete(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error deleting the question " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Question " + id + " succesfully deleted!";
|
||||||
|
}
|
||||||
|
}
|
||||||
179
src/main/java/sample/data/jpa/web/QuizzController.java
Normal file
179
src/main/java/sample/data/jpa/web/QuizzController.java
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
package sample.data.jpa.web;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Question;
|
||||||
|
import sample.data.jpa.metier.Quizz;
|
||||||
|
import sample.data.jpa.metier.Reponse;
|
||||||
|
import sample.data.jpa.metier.Session;
|
||||||
|
import sample.data.jpa.metier.Utilisateur;
|
||||||
|
import sample.data.jpa.service.QuestionDao;
|
||||||
|
import sample.data.jpa.service.QuizzDao;
|
||||||
|
import sample.data.jpa.service.UtilisateurDao;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/quizz")
|
||||||
|
public class QuizzController {
|
||||||
|
@Autowired
|
||||||
|
private QuizzDao qDao;
|
||||||
|
@Autowired
|
||||||
|
private QuestionDao qtDao;
|
||||||
|
@Autowired
|
||||||
|
private UtilisateurDao uDao;
|
||||||
|
/*
|
||||||
|
Post /quizz/create
|
||||||
|
Delete /quizz/delete/{id}
|
||||||
|
Put /quizz/addQuestion/{idQuestion}/{idQuizz}
|
||||||
|
Put /quizz/removeQuestion/{idQuestin}/{idQuizz}
|
||||||
|
Get /quizz/getAll
|
||||||
|
Get /quizz/getQuestions/{id}
|
||||||
|
*/
|
||||||
|
|
||||||
|
@PostMapping("/create/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String create(@PathVariable("id") int id) {
|
||||||
|
String qId = "";
|
||||||
|
String emailU = "";
|
||||||
|
try {
|
||||||
|
Quizz q = new Quizz();
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
emailU = u.getEmail();
|
||||||
|
q.setCreateur(u);
|
||||||
|
qDao.save(q);
|
||||||
|
qId = String.valueOf(q.getId());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error creating the Quizz : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizz succesfully created by "+ emailU +" with id = " + qId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String delete(@PathVariable("id") int id) {
|
||||||
|
try {
|
||||||
|
Quizz q = qDao.findById(id).get();
|
||||||
|
qDao.delete(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error deleting the quizz " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizz " + id + " succesfully deleted!";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/addQuestion/{id}/{idQ}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String addQuestion(@PathVariable("id") int id, @PathVariable("idQ") int qId) {
|
||||||
|
try {
|
||||||
|
Quizz q = qDao.findById(id).get();
|
||||||
|
Question qt = qtDao.findById(qId).get();
|
||||||
|
q.getQuestions().add(qt);
|
||||||
|
qt.setQuizz(q);
|
||||||
|
qDao.save(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error adding question from the quizz " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Question " + qId + " add in Quizz " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/removeQuestion/{id}/{idQ}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeQuestion(@PathVariable("id") int id, @PathVariable("idQ") int qId) {
|
||||||
|
try {
|
||||||
|
Quizz q = qDao.findById(id).get();
|
||||||
|
Question qt = qtDao.findById(qId).get();
|
||||||
|
q.getQuestions().remove(qt);
|
||||||
|
qt.setQuizz(null);
|
||||||
|
qDao.save(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error removing question from the quizz " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Question remove from Quizz " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
|
||||||
|
public String get(@PathVariable("id") int id){
|
||||||
|
String res = "";
|
||||||
|
try {
|
||||||
|
Quizz q = qDao.findById(id).get();
|
||||||
|
res += "id : " + id + "\n";
|
||||||
|
if(q.getCreateur()!=null){
|
||||||
|
res += "create by : " + q.getCreateur().getId() +
|
||||||
|
" (" + q.getCreateur().getEmail() + ")\n";
|
||||||
|
}
|
||||||
|
List<Session> sessions = q.getSessions();
|
||||||
|
List<Question> questions = q.getQuestions();
|
||||||
|
res += "Sessions :\n";
|
||||||
|
for(Session session : sessions){
|
||||||
|
res += "\tid : " + session.getId()
|
||||||
|
+" , theme : " + session.getTheme()
|
||||||
|
+" , nbUtilisateur : " + session.getUtilisateurs().size()
|
||||||
|
+" , PIN : " + session.getCodePIN()+"\n";
|
||||||
|
}
|
||||||
|
res += "Question :\n";
|
||||||
|
for( int i = 0; i<questions.size(); i++){
|
||||||
|
res+="\tQ"+(i+1)+"\n";
|
||||||
|
res+=questions.get(i).prettyPrinter(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
return "Error get Quizz :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizz : \n" + res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/getAll")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
|
||||||
|
public String getAll() {
|
||||||
|
String res = "";
|
||||||
|
try {
|
||||||
|
List<Quizz> quizzs = qDao.findAll();
|
||||||
|
for (Quizz quizz : quizzs) {
|
||||||
|
res += "id: " + quizz.getId() + " , ";
|
||||||
|
res += " nbQuestion:" + quizz.getQuestions().size() + "]\n";
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error get all Quizz :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizzs : \n" + res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getQuestions/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN', 'USER')")
|
||||||
|
public String getQuestion(@PathVariable("id") int id) {
|
||||||
|
String res = "";
|
||||||
|
try {
|
||||||
|
;
|
||||||
|
Quizz quizz = qDao.findById(id).get();
|
||||||
|
for (Question question : quizz.getQuestions()) {
|
||||||
|
res += "id: " + question.getId() + " , ";
|
||||||
|
res += "enonce: \"" + question.getEnonce() + "\"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error get question of the Quizz :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Questions : \n" + res;
|
||||||
|
}
|
||||||
|
}
|
||||||
191
src/main/java/sample/data/jpa/web/ReponseController.java
Normal file
191
src/main/java/sample/data/jpa/web/ReponseController.java
Normal file
@@ -0,0 +1,191 @@
|
|||||||
|
package sample.data.jpa.web;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Choix;
|
||||||
|
import sample.data.jpa.metier.Reponse;
|
||||||
|
import sample.data.jpa.metier.ReponseCourte;
|
||||||
|
import sample.data.jpa.service.ReponseDao;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/reponse")
|
||||||
|
public class ReponseController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ReponseDao rDao;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Post /reponse/create/choix
|
||||||
|
Post /reponse/create/courte
|
||||||
|
Get /reponse/getAll
|
||||||
|
Get /reponse/get/{id}
|
||||||
|
Delete /reponse/delete/{id}
|
||||||
|
Put /reponse/removeReponse/{id} param : body Jsp, "reponse"
|
||||||
|
Put /reponse/addReponse/{id} param : body Jsp, "reponse"
|
||||||
|
Put /reponse/addChoix/{id} param : body Jsp, "choix"
|
||||||
|
Put /reponse/removeChoix/{id} param : body Jsp, "choix"
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Créer une réponse de type Choix
|
||||||
|
*/
|
||||||
|
@PostMapping("/create/choix")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String createReponseChoix() {
|
||||||
|
try {
|
||||||
|
Choix r = new Choix();
|
||||||
|
rDao.save(r);
|
||||||
|
return "Réponses à choix multiple céée avec l'id : " + r.getId();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la création d'une réponse à choix multiple : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Créer une réponse de type ReponseCourte
|
||||||
|
*/
|
||||||
|
@PostMapping("/create/courte")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String createReponseCourte() {
|
||||||
|
try {
|
||||||
|
ReponseCourte r = new ReponseCourte();
|
||||||
|
rDao.save(r);
|
||||||
|
return "Réponses courte céée ";
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la création d'une réponse courte : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getAll")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getAll() {
|
||||||
|
try {
|
||||||
|
String res = "";
|
||||||
|
List<Reponse> reponses = rDao.findAll();
|
||||||
|
for (Reponse reponse : reponses) {
|
||||||
|
res += "id : " + reponse.getId() + " , " + reponse.toString() + "\n";
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la récupréation de toutes les réponses : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String get(@PathVariable("id") int id) {
|
||||||
|
try {
|
||||||
|
String res = "";
|
||||||
|
Reponse reponse = rDao.findById(id).get();
|
||||||
|
res+="id : " + reponse.getId() + "\n" + reponse.prettyPrinter(1);
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la récupréation de la réponse : "+id+" : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@DeleteMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String delete(@PathVariable("id") int id) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Reponse r = rDao.findById(id).get();
|
||||||
|
rDao.delete(r);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la suppression de la Reponse " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Reponse " + id + " supprimée avec succès";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PutMapping("/addReponse/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String addReponse(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
try {
|
||||||
|
if (body.containsKey("reponse")) {
|
||||||
|
Reponse rep = rDao.findById(id).get();
|
||||||
|
String reponse = body.get("reponse");
|
||||||
|
rep.getReponses().add(reponse);
|
||||||
|
rDao.save(rep);
|
||||||
|
return "Réponse correcte \"" + reponse + "\" ajoutée à la Reponse " + id;
|
||||||
|
} else return "Erreur : mettre \"reponse\" dans le JSOIN";
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de l'ajout de la réponse : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/removeReponse/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeReponses(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
try {
|
||||||
|
Reponse rep = rDao.findById(id).get();
|
||||||
|
String reponse = body.get("reponse");
|
||||||
|
rep.getReponses().remove(reponse);
|
||||||
|
rDao.save(rep);
|
||||||
|
return "Réponses correct \"" + reponse + "\" supprimée de la Reponse " + id;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la suppression de la réponse : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@PutMapping("/addChoix/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String addChoix(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
try {
|
||||||
|
Reponse reponse = rDao.findById(id).get();
|
||||||
|
if (reponse instanceof Choix) {
|
||||||
|
String choix = body.get("choix");
|
||||||
|
((Choix) reponse).getChoix().add(choix);
|
||||||
|
rDao.save(reponse);
|
||||||
|
return "Choix \"" + choix + "\" ajouté à la question " + id;
|
||||||
|
} else return "Erreur : la réponse doit être a choix multiple.";
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de l'ajout du choix : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/removeChoix/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeChoix(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
try {
|
||||||
|
Reponse reponse = rDao.findById(id).get();
|
||||||
|
if (reponse instanceof Choix) {
|
||||||
|
String choix = body.get("choix");
|
||||||
|
((Choix) reponse).getChoix().remove(choix);
|
||||||
|
rDao.save(reponse);
|
||||||
|
return "Choix \"" + choix + "\" supprimé à la question " + id;
|
||||||
|
} else return "Erreur : la réponse doit être a choix multiple.";
|
||||||
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur lors de la suppression du choix : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
205
src/main/java/sample/data/jpa/web/SessionController.java
Normal file
205
src/main/java/sample/data/jpa/web/SessionController.java
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
package sample.data.jpa.web;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Quizz;
|
||||||
|
import sample.data.jpa.metier.Session;
|
||||||
|
import sample.data.jpa.metier.Utilisateur;
|
||||||
|
import sample.data.jpa.service.QuizzDao;
|
||||||
|
import sample.data.jpa.service.SessionDao;
|
||||||
|
import sample.data.jpa.service.UtilisateurDao;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/session")
|
||||||
|
public class SessionController {
|
||||||
|
@Autowired
|
||||||
|
private SessionDao sDao;
|
||||||
|
@Autowired
|
||||||
|
private QuizzDao qDao;
|
||||||
|
@Autowired
|
||||||
|
private UtilisateurDao uDao;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Post /session/create param : body Jsp, "theme"
|
||||||
|
Delete /session/delete/{id}
|
||||||
|
Get /session/getAll
|
||||||
|
Put /session/addQuizz/{id}/{idQ}
|
||||||
|
Put /session/removeQuizz/{id}/{idQ}
|
||||||
|
Put /session/update/{id} param : body Jsp, "theme"
|
||||||
|
Put /session/join/{sessionId}
|
||||||
|
Put /session/leave/{sessionId}
|
||||||
|
*/
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String create(@RequestBody Map<String, String> body) {
|
||||||
|
String sId = "";
|
||||||
|
Session session = new Session();
|
||||||
|
try {
|
||||||
|
session.setTheme(body.getOrDefault("theme", ""));
|
||||||
|
|
||||||
|
int codePIN;
|
||||||
|
if (body.containsKey("codePIN")) {
|
||||||
|
codePIN = Integer.parseInt(body.get("codePIN"));
|
||||||
|
if (sDao.existsByCodePIN(codePIN)) {
|
||||||
|
return "Error: codePIN already exists.";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
do {
|
||||||
|
codePIN = new Random().nextInt(900000) + 100000;
|
||||||
|
} while (sDao.existsByCodePIN(codePIN));
|
||||||
|
}
|
||||||
|
session.setCodePIN(codePIN);
|
||||||
|
sDao.save(session);
|
||||||
|
sId = String.valueOf(session.getId());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error creating the Session : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Session \"" + session.getTheme() + "\" successfully created with id = " + sId + " and codePIN = " + session.getCodePIN();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String delete(@PathVariable("id") int id) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Session q = sDao.findById(id).get();
|
||||||
|
sDao.delete(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error deleting the session " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Session " + id + " succesfully deleted!";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getAll")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getAll() {
|
||||||
|
try {
|
||||||
|
List<Session> sessions = sDao.findAll();
|
||||||
|
String res = "";
|
||||||
|
for (Session session : sessions) {
|
||||||
|
res += "id: " + session.getId() + " , ";
|
||||||
|
res += "theme: \"" + session.getTheme() + "\" , ";
|
||||||
|
res += "nbUtilisateur :" + session.getUtilisateurs().size() + "\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error get all session : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/addQuizz/{id}/{qid}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String addQuizz(@PathVariable("id") int id, @PathVariable("qid") int qId) {
|
||||||
|
try {
|
||||||
|
Session s = sDao.findById(id).get();
|
||||||
|
Quizz q = qDao.findById(qId).get();
|
||||||
|
s.getQuizzs().add(q);
|
||||||
|
q.getSessions().add(s);
|
||||||
|
sDao.save(s);
|
||||||
|
qDao.save(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error adding the quizz from the session : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizz " + qId + " add in Session " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/removeQuizz/{id}/{qid}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeQuizz(@PathVariable("id") int id, @PathVariable("qid") int qId) {
|
||||||
|
try {
|
||||||
|
Session s = sDao.findById(id).get();
|
||||||
|
Quizz q = qDao.findById(qId).get();
|
||||||
|
s.getQuizzs().remove(q);
|
||||||
|
q.getSessions().remove(s);
|
||||||
|
sDao.save(s);
|
||||||
|
qDao.save(q);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error removing the quizz from the session : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Quizz " + qId + " remove from Session " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utiliser un Json pour mettre le String "theme"
|
||||||
|
* l'id se met dans l'url
|
||||||
|
*/
|
||||||
|
@PutMapping("/update/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String updateQuestion(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
Session s;
|
||||||
|
try {
|
||||||
|
s = sDao.findById(id).get();
|
||||||
|
s.setTheme(body.get("theme"));
|
||||||
|
sDao.save(s);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Error updating the Session: " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Session " + id + " succesfully updated! : " + s.getTheme();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/join/{sessionId}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('USER')")
|
||||||
|
public String joinSession(@PathVariable("sessionId") int sessionId, JwtAuthenticationToken auth) {
|
||||||
|
try {
|
||||||
|
String keycloakUserId = auth.getToken().getClaim("sub");
|
||||||
|
Utilisateur u = uDao.findByKeycloakId(keycloakUserId);
|
||||||
|
if (u == null) {
|
||||||
|
return "User not found in database.";
|
||||||
|
}
|
||||||
|
Session s = sDao.findById(sessionId).orElseThrow(() -> new Exception("Session not found"));
|
||||||
|
u.getSessions().add(s);
|
||||||
|
s.getUtilisateurs().add(u);
|
||||||
|
sDao.save(s);
|
||||||
|
uDao.save(u);
|
||||||
|
|
||||||
|
return "User " + u.getName() + " joined session " + sessionId;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant l'ajout de l'utilisateur dans la session : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/leave/{sessionId}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('USER')")
|
||||||
|
public String leaveSession(@PathVariable("sessionId") int sessionId, JwtAuthenticationToken auth) {
|
||||||
|
try {
|
||||||
|
String keycloakUserId = auth.getToken().getClaim("sub");
|
||||||
|
Utilisateur u = uDao.findByKeycloakId(keycloakUserId);
|
||||||
|
if (u == null) {
|
||||||
|
return "User not found in database.";
|
||||||
|
}
|
||||||
|
Session s = sDao.findById(sessionId).orElseThrow(() -> new Exception("Session not found"));
|
||||||
|
u.getSessions().remove(s);
|
||||||
|
s.getUtilisateurs().remove(u);
|
||||||
|
sDao.save(s);
|
||||||
|
uDao.save(u);
|
||||||
|
return "User " + u.getName() + " left session " + sessionId;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la suppression de l'utilisateur de la session : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
167
src/main/java/sample/data/jpa/web/UtilisateurController.java
Normal file
167
src/main/java/sample/data/jpa/web/UtilisateurController.java
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
package sample.data.jpa.web;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import sample.data.jpa.metier.Session;
|
||||||
|
import sample.data.jpa.metier.Utilisateur;
|
||||||
|
import sample.data.jpa.service.SessionDao;
|
||||||
|
import sample.data.jpa.service.UtilisateurDao;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/utilisateur")
|
||||||
|
public class UtilisateurController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UtilisateurDao uDao;
|
||||||
|
@Autowired
|
||||||
|
private SessionDao sDao;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Post /utilisateur/create param : body Jsp, "name", "email", "password"
|
||||||
|
Delete /utilisateur/delete/{id}
|
||||||
|
Get /utilisateur/getAll
|
||||||
|
Get /utilisateur/getSessions
|
||||||
|
Put /utilisateur/addSession/{idUtilisateur}/{idSession}
|
||||||
|
Put /utilisateur/removeSession/{idUtilisateur}/{idSession}
|
||||||
|
Put /utilisateur/update/{id} param : body Jsp, "name", "email", "password"
|
||||||
|
*/
|
||||||
|
|
||||||
|
@PostMapping("/create")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String create(@RequestBody Map<String, String> body, JwtAuthenticationToken auth) {
|
||||||
|
try {
|
||||||
|
if(body.containsKey("name") && body.containsKey("email") && body.containsKey("password")){
|
||||||
|
Utilisateur u = new Utilisateur();
|
||||||
|
String keycloakUserId = auth.getToken().getClaim("sub");
|
||||||
|
u.setName(body.get("name"));
|
||||||
|
u.setEmail(body.get("email"));
|
||||||
|
u.setPassword(body.get("password"));
|
||||||
|
u.setKeycloakId(keycloakUserId);
|
||||||
|
uDao.save(u);
|
||||||
|
String uId = String.valueOf(u.getId());
|
||||||
|
return "Utilisateur \"" + u.getName() + "\" créé avec succès avec l'id = " + uId;
|
||||||
|
} else return "Erreur, besoin de name, email et password dans le JSON";
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur durant la création de l'Utilisateur : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/delete/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String delete(@PathVariable("id") int id) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
uDao.delete(u);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la suppression de l'utilisateur " + id + " :" + ex.toString();
|
||||||
|
}
|
||||||
|
return "Utilisateur " + id + " supprimé avec succès !";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getAll")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getAll() {
|
||||||
|
try {
|
||||||
|
List<Utilisateur> utilisateurs = uDao.findAll();
|
||||||
|
String res = "";
|
||||||
|
for (Utilisateur utilisateur : utilisateurs) {
|
||||||
|
res += "id: " + utilisateur.getId() + " , ";
|
||||||
|
res += "name: " + utilisateur.getName() + " , ";
|
||||||
|
res += "email: \"" + utilisateur.getEmail() + "\"\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la récupération des utilisateurs : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getSessions/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasAnyRole('ADMIN','USER')")
|
||||||
|
public String getSessions(@PathVariable("id") int id){
|
||||||
|
try {
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
String res = "";
|
||||||
|
for(Session s : u.getSessions()){
|
||||||
|
res += "id : "+ s.getId() + " , theme : " + s.getTheme() + "\n";
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la récupération les sessions de l'utilisateur : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/addSession/{id}/{qid}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String addSession(@PathVariable("id") int id, @PathVariable("qid") int sId) {
|
||||||
|
try {
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
Session s = sDao.findById(sId).get();
|
||||||
|
u.getSessions().add(s);
|
||||||
|
s.getUtilisateurs().add(u);
|
||||||
|
sDao.save(s);
|
||||||
|
uDao.save(u);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant l'ajout de l'utilisateur dans la session : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Utilisateur " + id + " ajouté à la Session " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PutMapping("/removeSession/{id}/{qid}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String removeSession(@PathVariable("id") int id, @PathVariable("qid") int sId) {
|
||||||
|
try {
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
Session s = sDao.findById(sId).get();
|
||||||
|
u.getSessions().remove(s);
|
||||||
|
s.getUtilisateurs().remove(u);
|
||||||
|
sDao.save(s);
|
||||||
|
uDao.save(u);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur pendant la suppression de l'utilisateur de la session : " + ex.toString();
|
||||||
|
}
|
||||||
|
return "Utilisateur " + id + " retiré de la Session " + id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@PostMapping("/update/{id}")
|
||||||
|
@ResponseBody
|
||||||
|
@PreAuthorize("hasRole('ADMIN')")
|
||||||
|
public String update(@PathVariable("id") int id, @RequestBody Map<String, String> body) {
|
||||||
|
try {
|
||||||
|
if (body.containsKey("name") && body.containsKey("email") && body.containsKey("password")) {
|
||||||
|
Utilisateur u = uDao.findById(id).get();
|
||||||
|
u.setName(body.get("name"));
|
||||||
|
u.setEmail(body.get("email"));
|
||||||
|
u.setPassword(body.get("password"));
|
||||||
|
uDao.save(u);
|
||||||
|
return "Utilisateur \"" + u.getName() + "\" mis à jour avec succès";
|
||||||
|
} else return "Erreur, besoin de name, email et password dans le JSON";
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return "Erreur durant la mise à jour de de l'Utilisateur : " + ex.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/main/resources/application.properties
Normal file
21
src/main/resources/application.properties
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
server.port=8082
|
||||||
|
|
||||||
|
spring.h2.console.enabled=true
|
||||||
|
spring.h2.console.path=/h2
|
||||||
|
spring.datasource.url=jdbc:h2:mem:testdb
|
||||||
|
spring.datasource.driver-class-name=org.h2.Driver
|
||||||
|
spring.datasource.username=sa
|
||||||
|
spring.datasource.password=
|
||||||
|
spring.sql.init.platform=h2
|
||||||
|
spring.sql.init.mode= always
|
||||||
|
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
|
||||||
|
|
||||||
|
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8080/realms/myspringbootapprealm
|
||||||
|
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://localhost:8080/realms/myspringbootapprealm/protocol/openid-connect/certs
|
||||||
|
|
||||||
|
keycloak.realm: myspringbootapprealm
|
||||||
|
keycloak.auth-server-url: http://localhost:8080/
|
||||||
|
keycloak.resource: myspringbootapp
|
||||||
|
keycloak.credentials.secret: Y7xpKQbFalUFTGUGD9XDBcvawvs3zsWZ
|
||||||
|
keycloak.use-resource-role-mappings: true
|
||||||
|
keycloak.bearer-only: true
|
||||||
14
src/main/resources/templates/admin.html
Normal file
14
src/main/resources/templates/admin.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Admin</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
This is the admin page
|
||||||
|
<br/>
|
||||||
|
Logged user: <span th:if="${user} != null" th:text="${user.name}"></span>
|
||||||
|
<br/>
|
||||||
|
<a href="/logout">logout</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
14
src/main/resources/templates/index.html
Normal file
14
src/main/resources/templates/index.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Index</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
This is the index page.
|
||||||
|
<br/>
|
||||||
|
Logged user: <span th:if="${user} != null" th:text="${user.name}"></span>
|
||||||
|
<br/>
|
||||||
|
<a href="/admin">admin</a>
|
||||||
|
<a href="/logout">logout</a>
|
||||||
|
</body>
|
||||||
15
src/main/resources/templates/indexmain.html
Normal file
15
src/main/resources/templates/indexmain.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Main</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
This is the main page.
|
||||||
|
<br/>
|
||||||
|
<a href="/index">index</a>
|
||||||
|
<br/>
|
||||||
|
<a href="/admin">admin</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
>
|
||||||
14
src/main/resources/templates/logout.html
Normal file
14
src/main/resources/templates/logout.html
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns:th="http://www.thymeleaf.org">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Logout</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
This is the logout page.
|
||||||
|
<br/>
|
||||||
|
Logged user: <span th:if="${user} != null" th:text="${user.name}"></span>
|
||||||
|
<br/>
|
||||||
|
<a href="/">main</a>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012-2016 the original author or authors.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package sample.data.jpa;
|
||||||
|
|
||||||
|
import java.lang.management.ManagementFactory;
|
||||||
|
|
||||||
|
import javax.management.ObjectName;
|
||||||
|
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.ActiveProfiles;
|
||||||
|
import org.springframework.test.context.TestPropertySource;
|
||||||
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
|
import org.springframework.test.web.servlet.MockMvc;
|
||||||
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
|
||||||
|
import org.springframework.web.context.WebApplicationContext;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
|
||||||
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Integration test to run the application.
|
||||||
|
*
|
||||||
|
* @author Oliver Gierke
|
||||||
|
* @author Dave Syer
|
||||||
|
*/
|
||||||
|
@RunWith(SpringRunner.class)
|
||||||
|
@SpringBootTest
|
||||||
|
// Enable JMX so we can test the MBeans (you can't do this in a properties file)
|
||||||
|
@TestPropertySource(properties = { "spring.jmx.enabled:true",
|
||||||
|
"spring.datasource.jmx-enabled:true" })
|
||||||
|
@ActiveProfiles("scratch")
|
||||||
|
// Separate profile for web tests to avoid clashing databases
|
||||||
|
public class SampleDataJpaApplicationTests {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private WebApplicationContext context;
|
||||||
|
|
||||||
|
private MockMvc mvc;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
this.mvc = MockMvcBuilders.webAppContextSetup(this.context).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testHome() throws Exception {
|
||||||
|
|
||||||
|
this.mvc.perform(get("/")).andExpect(status().isOk())
|
||||||
|
.andExpect(content().string("Bath"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testJmx() throws Exception {
|
||||||
|
assertThat(ManagementFactory.getPlatformMBeanServer()
|
||||||
|
.queryMBeans(new ObjectName("jpa.sample:type=ConnectionPool,*"), null))
|
||||||
|
.hasSize(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
2
src/test/resources/application-scratch.properties
Normal file
2
src/test/resources/application-scratch.properties
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
spring.datasource.name=scratchdb
|
||||||
|
spring.jmx.default-domain=jpa.sample
|
||||||
Reference in New Issue
Block a user