From 470e0002cdff1e65e5c1458e6f7dc5d05aea6e7f Mon Sep 17 00:00:00 2001 From: burnettk Date: Thu, 23 Feb 2023 14:58:14 -0500 Subject: [PATCH 1/2] add test users --- .../realm_exports/spiffworkflow-realm.json | 599 +++++++++++++++++- .../keycloak/test_user_lists/status | 22 + .../src/spiffworkflow_backend/__init__.py | 2 +- .../services/process_instance_processor.py | 4 +- 4 files changed, 589 insertions(+), 38 deletions(-) diff --git a/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json b/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json index 78652bcf..7c06832b 100644 --- a/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json +++ b/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json @@ -483,6 +483,29 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "d959fd73-92b5-43f4-a210-9457c0b89296", + "createdTimestamp" : 1677179613554, + "username" : "app.program-lead", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "app.program-lead@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "191" ] + }, + "credentials" : [ { + "id" : "000ae6fa-5311-4fb2-b421-996e4c28b8bc", + "type" : "password", + "createdDate" : 1677179613588, + "secretData" : "{\"value\":\"Gj1+qvjgYdEBGEntfWmbajQQur0YGatrhvB6+2osF6lpVgMLCfTUWSyP5C8glYk8ky8dHKM2vLiMymkM9teRrw==\",\"salt\":\"Z4QSlVGz+YwsLNWu2Li7Ig==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "27b5bdce-1c02-4249-b8ba-521f9bcae2d3", "createdTimestamp" : 1676302139921, @@ -531,6 +554,144 @@ }, "notBefore" : 0, "groups" : [ ] + }, { + "id" : "5e2a535e-056e-485c-b0af-c49bf0d64106", + "createdTimestamp" : 1677181799609, + "username" : "codex.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "185" ] + }, + "credentials" : [ { + "id" : "a2cf9daf-25d2-4cd2-b932-4706442a8437", + "type" : "password", + "createdDate" : 1677181799644, + "secretData" : "{\"value\":\"UY+PfYh5h48i40Klq0KEPVc0DBUrGRxI70BFcs98MD8R7ORJ5G6rWKA3Dq/5I8btu3CJI4PbFeTS/IopMhB7vQ==\",\"salt\":\"mtx4JqI61nsCni3s26PMJg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "84e8eebf-59ca-466d-8523-2da0aef088ed", + "createdTimestamp" : 1677181799762, + "username" : "codex1.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex1.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "186" ] + }, + "credentials" : [ { + "id" : "cace5730-6cd3-4d19-b0e4-10078fc5024a", + "type" : "password", + "createdDate" : 1677181799797, + "secretData" : "{\"value\":\"QwHtrufirwh38UBlalAikD+dqDo3Bnsp5350OBClcmv7QSlPQ/MqVppRfZXLaseIBbzvnuAjCxmrwtE8ERoy2g==\",\"salt\":\"0LkJgwINFOuVQGvHFp7GVA==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "ffaa3c6f-d6bc-4920-81b8-39d842f57ac5", + "createdTimestamp" : 1677181799898, + "username" : "codex2.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex2.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "187" ] + }, + "credentials" : [ { + "id" : "8c8b872b-86cf-40c8-84a3-f432e0bebee4", + "type" : "password", + "createdDate" : 1677181799933, + "secretData" : "{\"value\":\"IGE1BnNopOP7OJIi5e8AUxT6ZUolat3TkheXZ030xqabu81VdAFYjRKKsrhSf39t9T9ze3d3wHZ0+xI76yxh5Q==\",\"salt\":\"KD8gdrC8seSWEPUJJHKLDw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "7393f1d8-e58c-4b80-8664-6f80931deb7b", + "createdTimestamp" : 1677181800044, + "username" : "codex3.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex3.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "188" ] + }, + "credentials" : [ { + "id" : "ba8252cc-5900-4f5a-8c7e-590b2028ebd0", + "type" : "password", + "createdDate" : 1677181800080, + "secretData" : "{\"value\":\"HrlyO6uWQp615hB9eLdfl5W7ooTw8fZU+jwyFyUsUdIP+HJ2Es4Cu46bJ9Hgdnd7pmuGUma0C/xXR7EGNdvH9w==\",\"salt\":\"XVbQSX3HYRMIqCTyPJmQZw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "a862432c-cf03-4282-b0af-7dff20bfaca6", + "createdTimestamp" : 1677181800213, + "username" : "codex4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "189" ] + }, + "credentials" : [ { + "id" : "43f9f0dd-bae5-4e5b-9c8d-d067e203a1a3", + "type" : "password", + "createdDate" : 1677181800248, + "secretData" : "{\"value\":\"J56SkiE1uYDbA/3k1bFdQzauQG9AYWrR4gZoBTKT/acbOP+p5r0wpZ9BkotDc/R3X9q1KxYx3xU/8BjjZEebwQ==\",\"salt\":\"djpJqi+BXbc2jq+bnthlKw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "b4239cc1-cc70-4224-bd1c-e89e7667dc5a", + "createdTimestamp" : 1677181800350, + "username" : "codex5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "codex5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "190" ] + }, + "credentials" : [ { + "id" : "01585949-5171-4bd6-8193-521c60a1c5b0", + "type" : "password", + "createdDate" : 1677181800384, + "secretData" : "{\"value\":\"VMRw0Z1VZn1vpObUDJu/sKqigkAmdClroJCMNh4msPa8gj13+3KLKrP0xvkFz52PI+3zneb21Mj1FDxlwfzBtg==\",\"salt\":\"+HaiDG8H7DC5XapT0PAARQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "6151b58a-ca4f-44e6-a82a-f13363234555", "createdTimestamp" : 1676302140070, @@ -669,6 +830,29 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "9b7820b2-ad02-431f-a603-2d9b7d4415c8", + "createdTimestamp" : 1677181801624, + "username" : "core6.contributor", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "core6.contributor@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "199" ] + }, + "credentials" : [ { + "id" : "b6cc5352-e173-44e2-a37d-3607b606ab1b", + "type" : "password", + "createdDate" : 1677181801659, + "secretData" : "{\"value\":\"ZIjW8sUAJ5AczMOy+3Jgq82F0hvXqWmcLsmVY88hgVr4rkdjMu0+oOv36OfLFeFNwJrNxQAAots7RGuAyPbZQg==\",\"salt\":\"y6SgpBIdSuEzeJpeFx7/GQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "7b9767ac-24dc-43b0-838f-29e16b4fd14e", "createdTimestamp" : 1675718483773, @@ -752,6 +936,29 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "fae611e8-cde1-4fa1-b653-c6bef8a8c26c", + "createdTimestamp" : 1677181800520, + "username" : "desktop.project-lead", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop.project-lead@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "192" ] + }, + "credentials" : [ { + "id" : "8bc1602b-dceb-4a59-9809-68cb28ff8928", + "type" : "password", + "createdDate" : 1677181800557, + "secretData" : "{\"value\":\"MFB6lcRCnLoXHXMfPDFbDoQSSXmCsZUFetlI+VJVyMieBXesUrBsYC2XrBQX/bg/jI7569Z26ppsh1VtKxrBmw==\",\"salt\":\"f2CuJRGCdmB4QMguj4jMdQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "a71e29a7-678c-4a08-9273-5c8490577c98", "createdTimestamp" : 1676302141251, @@ -772,6 +979,144 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "78e0a909-3634-43f3-80b0-034aa1ddc01d", + "createdTimestamp" : 1677181800708, + "username" : "desktop.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "193" ] + }, + "credentials" : [ { + "id" : "cf167058-268f-42da-94bc-01b35a562f5f", + "type" : "password", + "createdDate" : 1677181800744, + "secretData" : "{\"value\":\"IaSxg2RlpOnwutRGE7QPNVJtmA3klsizOGJq/g+dxAtOYweS1gYlWBFX4EB5zzAfB3gsA3P6gq+2avSK+besNw==\",\"salt\":\"AiM8CxndaAemRW8BQ/r4fw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "38924acc-ac03-4dca-8394-3917121f7509", + "createdTimestamp" : 1677181800877, + "username" : "desktop1.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop1.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "194" ] + }, + "credentials" : [ { + "id" : "204a79e9-6912-4ba9-a0f9-f001ed343242", + "type" : "password", + "createdDate" : 1677181800914, + "secretData" : "{\"value\":\"id13Cma1swB0HDj61wGA7xEIjWN8YKC1qA1WEP4ccV9frIm75xlyBGzwerQg9acNeu1Cltt2m1PDa8pE5ehw+g==\",\"salt\":\"baZl2HLuriksSDppoo/VjA==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "68e45305-dfcc-4ecc-8e62-8d838c46cf56", + "createdTimestamp" : 1677181801035, + "username" : "desktop2.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop2.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "195" ] + }, + "credentials" : [ { + "id" : "586b4314-bfc5-44c0-b1ec-bc8250a546e4", + "type" : "password", + "createdDate" : 1677181801070, + "secretData" : "{\"value\":\"B/7DfIn/ZzJMhzJKZnPQ6oFqQJv/jfRunWDu16TDcfCXXSOlJMmdn2R1yYSSL+hGgDYpaOT86woq0en67uFhnA==\",\"salt\":\"znRgPUHANthkIwXrcOnynQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "8b569875-5265-47bc-b4f9-74764e64fbb9", + "createdTimestamp" : 1677181801182, + "username" : "desktop3.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop3.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "196" ] + }, + "credentials" : [ { + "id" : "b7444657-1937-49c4-b48d-15cd69caec47", + "type" : "password", + "createdDate" : 1677181801216, + "secretData" : "{\"value\":\"iqUzNvgmigp4hgRO4j9rKUvdC/Qa2tLjGJdf5Mf2UieQqBZlqTt0EF/FielwV+D4qYDswcf7Lx9Kyc6sDkOX7g==\",\"salt\":\"113PrU+Thd35/KNKcz1bBg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "0da7c2a9-f41b-4fdf-b54b-d2c425b18994", + "createdTimestamp" : 1677181801321, + "username" : "desktop4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "197" ] + }, + "credentials" : [ { + "id" : "ac8cfe7e-4a46-436d-8a72-8a2a061e803b", + "type" : "password", + "createdDate" : 1677181801357, + "secretData" : "{\"value\":\"AxFY+VsvoLTKflDvg3cRMjXdOZVOHoRAVxlUVR2YktXsadpo2Jl0ixehU/BByIAs/+TKl8ECM/qQdYV7rZ3rHw==\",\"salt\":\"WV5MxscAoBdJEvSs2HzWAg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "c1796e6c-1396-4d11-85c2-409225d0ccba", + "createdTimestamp" : 1677181801479, + "username" : "desktop5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "desktop5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "198" ] + }, + "credentials" : [ { + "id" : "5ca9a203-1a04-4be6-93fe-b98f566a6660", + "type" : "password", + "createdDate" : 1677181801516, + "secretData" : "{\"value\":\"WDBB8FDGzyzsjq+Dl+9NXDK7+/S+9VbRFcEyKPxuKe48JvI00s2ZKXE065VuiUAVMvg2RV1tbgw8m31o13m0wA==\",\"salt\":\"wSyEjFR+uWxSA9dc0SNuwQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "3873c0ba-349c-4bec-8be2-5ced8acd56ec", "createdTimestamp" : 1675718483992, @@ -993,6 +1338,52 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "c4bb6e6d-da8b-4c4f-9b83-fdf8516d6946", + "createdTimestamp" : 1677181798082, + "username" : "infra4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "infra4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "175" ] + }, + "credentials" : [ { + "id" : "c7a26698-8d27-4d8f-a8dd-519f74a6d516", + "type" : "password", + "createdDate" : 1677181798173, + "secretData" : "{\"value\":\"k8GfsfeWZg8wfVikCTew3Pgfs/XmlyRl9duh5pe4obM8E+XzGQfgSgx1T4xEIlr/TYl0Hep9zRxEcEtoYNlz8g==\",\"salt\":\"TH94ZAwlFT9cuKgBtcLPzw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "9f269f95-0a5e-4cad-91d5-7b61ee2c795c", + "createdTimestamp" : 1677181798337, + "username" : "infra5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "infra5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "176" ] + }, + "credentials" : [ { + "id" : "04faad56-de12-4a8f-ad54-0e8ef865b0ef", + "type" : "password", + "createdDate" : 1677181798373, + "secretData" : "{\"value\":\"5VJxVKz0uE0a8tZQMbBVaxcEqfdmJdsAdB6T8t0grY+L4etXZHnLlucKkCtQ9aJy1PcDMLjXu6ETrqoTuLkehA==\",\"salt\":\"a6PypYQwyD2Fv/e2UXzGvg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "b8d0d90e-9a7e-446c-9984-082cb315af8f", "createdTimestamp" : 1675718484095, @@ -1271,6 +1662,52 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "60ba78a0-c346-4967-ad90-89b11d3e5e11", + "createdTimestamp" : 1677181798495, + "username" : "legal4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "legal4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "177" ] + }, + "credentials" : [ { + "id" : "b3efb51c-8dd7-451d-b213-05363588e461", + "type" : "password", + "createdDate" : 1677181798529, + "secretData" : "{\"value\":\"WE9bf/FrGPslQr6NW6Cfq/2U6LLorW8R7PVhIIBqbMC0Ndqqv18wHceyZvLCBUkjiTukPhhUHYYvPCZct0KQjw==\",\"salt\":\"OgtPrHOUoLVNiD8kjVo2fg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "d481687d-8c76-456d-9e0c-d66075380bbd", + "createdTimestamp" : 1677181798643, + "username" : "legal5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "legal5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "178" ] + }, + "credentials" : [ { + "id" : "26804d36-5691-4ee2-8a03-ac0f69045d6a", + "type" : "password", + "createdDate" : 1677181798677, + "secretData" : "{\"value\":\"yAGa86rD7oVWAUjj2IApbBoIK1CevLxXiJQ3UDdHpJLVVDYRkCDF3qel111EqbsGsdOJ1g2cbc4ii2baM57Jog==\",\"salt\":\"2kzSBHUfFi+EHXJTVlnJ7w==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "588e69b9-7534-4073-861d-500475b12b24", "createdTimestamp" : 1675718484566, @@ -1427,8 +1864,8 @@ "notBefore" : 0, "groups" : [ ] }, { - "id" : "2a5d7caa-2c3e-4404-a133-ec220c0307db", - "createdTimestamp" : 1676566095780, + "id" : "6bc87bfb-6288-49df-a0f3-51db4e46201b", + "createdTimestamp" : 1677179612799, "username" : "peopleops.partner2.sme", "enabled" : true, "totp" : false, @@ -1438,10 +1875,10 @@ "spiffworkflow-employeeid" : [ "173" ] }, "credentials" : [ { - "id" : "64fc835c-b693-4fed-ab9f-952cbaadbbfd", + "id" : "c0c57e55-9d34-499f-80a8-0f0cd639e1ed", "type" : "password", - "createdDate" : 1676566095815, - "secretData" : "{\"value\":\"w5nUlwlH1Z46WGhfejPIiRW6OkE9bcjHNCVySUDzMIpkbCm3f78XfuvdGSDeCpJ/FQCJuFo5ciDJ7ExXLyLfnQ==\",\"salt\":\"nz1xSxci+NFsyPZPhFDtZQ==\",\"additionalParameters\":{}}", + "createdDate" : 1677179612835, + "secretData" : "{\"value\":\"xUGT/9b0xVMemt7C30eO/TZfOaf3sO3j/XaADPWV+bXb5yNt0Dc6Ao0KVA0yzrPzCeXVa4C2BlHdXpx4l/nNUw==\",\"salt\":\"7UAhQDr50I44pVegqsm4aw==\",\"additionalParameters\":{}}", "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" } ], "disableableCredentialTypes" : [ ], @@ -1450,8 +1887,8 @@ "notBefore" : 0, "groups" : [ ] }, { - "id" : "2df3aa5e-5e5b-4c4a-b9bc-3a916c651632", - "createdTimestamp" : 1676566095846, + "id" : "f8837814-21dc-475e-9067-41d1da670fff", + "createdTimestamp" : 1677179612959, "username" : "peopleops.partner3.sme", "enabled" : true, "totp" : false, @@ -1461,10 +1898,56 @@ "spiffworkflow-employeeid" : [ "174" ] }, "credentials" : [ { - "id" : "efaaec98-45c7-45cc-b4a4-32708882b72f", + "id" : "d83f8952-b7b7-4860-9af9-b697a84da13a", "type" : "password", - "createdDate" : 1676566095880, - "secretData" : "{\"value\":\"B9M+AGxXUX4/+ce0y6AgFBm4F7phl5+6zToumcfheXglqcag2jr7iqLTtvwVkz3w8x7rmxUrzs7rkJPhK+/Jpg==\",\"salt\":\"rLFkhDJLxRuCNw7PNswlSQ==\",\"additionalParameters\":{}}", + "createdDate" : 1677179612997, + "secretData" : "{\"value\":\"ZBH+k4nUWrpVJoyu4j8nNsYvWMA8fIrS3rxl+Pfi8XUp5QUPxMr2slopxBpdn5rCFxC422rGvE76z59+lsGHFw==\",\"salt\":\"AGjic4GY4x47sB0STHebYw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "44c5d69d-f767-4f11-8d0b-8b6d42cfb1da", + "createdTimestamp" : 1677181799109, + "username" : "peopleops.partner4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "peopleops.partner4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "181" ] + }, + "credentials" : [ { + "id" : "eeb6aa42-0141-4a0e-9135-22e519fe2259", + "type" : "password", + "createdDate" : 1677181799173, + "secretData" : "{\"value\":\"hRXbF8Hv5ZbrLFXr2ceYHva6LV9Nl8R4rWzigTLPkkxKeF87iaifmStRxSWdJv4LZsq4+qwJF3wretnaav6VUw==\",\"salt\":\"ho19cRuxsUuCF5fVo2/fSw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "abed16ea-ffb1-4ca4-a907-206f56d0c6d1", + "createdTimestamp" : 1677181799452, + "username" : "peopleops.partner5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "peopleops.partner5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "182" ] + }, + "credentials" : [ { + "id" : "f07e520a-b3eb-4b1e-95b3-51c64902dd7b", + "type" : "password", + "createdDate" : 1677181799489, + "secretData" : "{\"value\":\"F2Nr7V6xjBFXI8Siw6rLYAN3ToHKkcq8PLU4SI+T7M4Oj6no1Jf9jtT+pqvQV65GNJ9p1F5U023EENnITa6r+g==\",\"salt\":\"oz69O4w8vVKgjtm2hEglmA==\",\"additionalParameters\":{}}", "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" } ], "disableableCredentialTypes" : [ ], @@ -1840,6 +2323,52 @@ "realmRoles" : [ "default-roles-spiffworkflow" ], "notBefore" : 0, "groups" : [ ] + }, { + "id" : "1b2dc2b1-9706-4b69-aba8-088551d56622", + "createdTimestamp" : 1677181798799, + "username" : "security4.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "security4.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "179" ] + }, + "credentials" : [ { + "id" : "4b764d7f-8c3b-4978-93aa-a2dbe0caf71c", + "type" : "password", + "createdDate" : 1677181798833, + "secretData" : "{\"value\":\"kn+VDn4d6qlJBJdhLYuJq4/97vfmZmiL3WXmW1OnhzYYv35splfBEkY12j0R4pxZeZ1OWBR7MJs1kB8AeC9cKQ==\",\"salt\":\"K+0rpb4TJ7J6z0F99AAklA==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] + }, { + "id" : "f76b4ac7-3beb-4465-ad8d-0d4a513782b4", + "createdTimestamp" : 1677181798958, + "username" : "security5.sme", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "email" : "security5.sme@status.im", + "attributes" : { + "spiffworkflow-employeeid" : [ "180" ] + }, + "credentials" : [ { + "id" : "3c5493c3-f689-44b1-ae51-94e7d0dff4a0", + "type" : "password", + "createdDate" : 1677181798992, + "secretData" : "{\"value\":\"7kr/Rt3nzDMDky8SBKOro3+sbpcDe6XBemF2CGN2NrBaNPdR+BlH9cpHPlxaTGTcwYe0TbNJo9xQ3FQu7NUwJg==\",\"salt\":\"W/jkh3VF9L05hyGNzHR9Bw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-spiffworkflow" ], + "notBefore" : 0, + "groups" : [ ] }, { "id" : "b768e3ef-f905-4493-976c-bc3408c04bec", "createdTimestamp" : 1675447832524, @@ -3175,7 +3704,7 @@ "subType" : "authenticated", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "oidc-address-mapper", "oidc-full-name-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper", "oidc-usermodel-property-mapper", "saml-role-list-mapper", "oidc-sha256-pairwise-sub-mapper" ] + "allowed-protocol-mapper-types" : [ "saml-role-list-mapper", "oidc-address-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper" ] } }, { "id" : "d68e938d-dde6-47d9-bdc8-8e8523eb08cd", @@ -3193,7 +3722,7 @@ "subType" : "anonymous", "subComponents" : { }, "config" : { - "allowed-protocol-mapper-types" : [ "oidc-usermodel-attribute-mapper", "saml-user-attribute-mapper", "oidc-address-mapper", "saml-user-property-mapper", "oidc-sha256-pairwise-sub-mapper", "saml-role-list-mapper", "oidc-usermodel-property-mapper", "oidc-full-name-mapper" ] + "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper", "saml-user-attribute-mapper", "saml-user-property-mapper", "oidc-sha256-pairwise-sub-mapper" ] } }, { "id" : "3854361d-3fe5-47fb-9417-a99592e3dc5c", @@ -3283,7 +3812,7 @@ "internationalizationEnabled" : false, "supportedLocales" : [ ], "authenticationFlows" : [ { - "id" : "01b4b17c-bb82-41c3-b5b5-b9aadd21cb23", + "id" : "3b3acde6-e6e2-4105-91f5-be5fbcdbe1a6", "alias" : "Account verification options", "description" : "Method with which to verity the existing account", "providerId" : "basic-flow", @@ -3305,7 +3834,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "57574e2d-3c3d-4286-9fd1-d7f4ab86c6c1", + "id" : "bcae03f5-d26d-4c4c-bfba-a0ae63c50b4f", "alias" : "Authentication Options", "description" : "Authentication options.", "providerId" : "basic-flow", @@ -3334,7 +3863,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "1eb0e67c-2856-475e-8563-5eca431fd9d0", + "id" : "eeb4c36f-1d46-4601-b198-b2281b7988b6", "alias" : "Browser - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -3356,7 +3885,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "ff023867-aad5-4d19-a7da-60904727cd77", + "id" : "22eb750b-07cf-4468-9679-2e66891e85d3", "alias" : "Direct Grant - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -3378,7 +3907,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c4f2f1e4-a32c-4559-9fe3-f88cc6cb63da", + "id" : "e11c702b-a974-4065-91af-cd7d22ff5cad", "alias" : "First broker login - Conditional OTP", "description" : "Flow to determine if the OTP is required for the authentication", "providerId" : "basic-flow", @@ -3400,7 +3929,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "bfb28a5f-98d9-4ce0-ae8d-75a7ba1ad331", + "id" : "0ca7340b-4ffa-43e5-9919-a5a466d35e8c", "alias" : "Handle Existing Account", "description" : "Handle what to do if there is existing account with same email/username like authenticated identity provider", "providerId" : "basic-flow", @@ -3422,7 +3951,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "8b2075bd-9ad7-44c3-9a06-bc60a13beb7a", + "id" : "be74102b-f828-41c7-b82e-1cba0e1f5d4c", "alias" : "Reset - Conditional OTP", "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", "providerId" : "basic-flow", @@ -3444,7 +3973,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "1fdcbed7-e44b-4473-ab7b-25037309660b", + "id" : "31248ca8-5ff7-4080-acd3-b73ac32a4946", "alias" : "User creation or linking", "description" : "Flow for the existing/non-existing user alternatives", "providerId" : "basic-flow", @@ -3467,7 +3996,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "2f6e9208-b0e6-4941-9bd5-8f83ebc25b6c", + "id" : "d992ca09-7a16-4eb3-83d6-e0d7b34c7f67", "alias" : "Verify Existing Account by Re-authentication", "description" : "Reauthentication of existing account", "providerId" : "basic-flow", @@ -3489,7 +4018,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "f059067e-d626-4be3-868f-4c8780318497", + "id" : "63b5c8f8-d888-48cb-9753-c3da613b8e2c", "alias" : "browser", "description" : "browser based authentication", "providerId" : "basic-flow", @@ -3525,7 +4054,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c35098b5-3785-4f52-90e3-39b8f3841f0c", + "id" : "548f86bf-2145-455e-a317-798a8a1aa11f", "alias" : "clients", "description" : "Base authentication for clients", "providerId" : "client-flow", @@ -3561,7 +4090,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "c78934b6-5386-49e7-89e8-9efe1088f5b2", + "id" : "117c7a16-6401-4d88-bbed-1b697e847c22", "alias" : "direct grant", "description" : "OpenID Connect Resource Owner Grant", "providerId" : "basic-flow", @@ -3590,7 +4119,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "7a08791f-0c8b-4e11-a588-f5856b75337b", + "id" : "8e4c44a0-bbc5-4389-b2c6-0504d0e2b6c9", "alias" : "docker auth", "description" : "Used by Docker clients to authenticate against the IDP", "providerId" : "basic-flow", @@ -3605,7 +4134,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "11e93dce-9673-4c99-ae7a-0edaf1c9b7e4", + "id" : "53d0e6cd-9dab-42d6-9e0a-845c3e16ef82", "alias" : "first broker login", "description" : "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", "providerId" : "basic-flow", @@ -3628,7 +4157,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "dbb50df7-ec6e-4a34-97f5-b484f1d8a76c", + "id" : "d7f08bd3-21e7-4adb-b42b-d008e48fef16", "alias" : "forms", "description" : "Username, password, otp and other auth forms.", "providerId" : "basic-flow", @@ -3650,7 +4179,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "d7a3dff9-249b-4811-9f36-b78119a4ce3f", + "id" : "df0f3ad6-2d9e-4af5-9c07-52b7a131b1b1", "alias" : "http challenge", "description" : "An authentication flow based on challenge-response HTTP Authentication Schemes", "providerId" : "basic-flow", @@ -3672,7 +4201,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "ed4891ad-657c-45ac-9388-6c50d191124d", + "id" : "b61e3c4c-3bf3-4e87-8f1d-6c21e12f3814", "alias" : "registration", "description" : "registration flow", "providerId" : "basic-flow", @@ -3688,7 +4217,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "f7c308b0-58de-4ed2-bf69-394144698e5a", + "id" : "170440b9-7b1a-4def-a6cb-f7fb762155b7", "alias" : "registration form", "description" : "registration form", "providerId" : "form-flow", @@ -3724,7 +4253,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "3fb75774-a3a5-4e01-bc4a-4e564451601d", + "id" : "413fb195-73fb-4bac-9903-b9e3d80989c7", "alias" : "reset credentials", "description" : "Reset credentials for a user if they forgot their password or something", "providerId" : "basic-flow", @@ -3760,7 +4289,7 @@ "userSetupAllowed" : false } ] }, { - "id" : "822d5c02-9ab3-4a9b-8fa4-1f020c5ffe08", + "id" : "ff86f15f-09c6-4e9c-b55e-06832c8a7120", "alias" : "saml ecp", "description" : "SAML ECP Profile Authentication Flow", "providerId" : "basic-flow", @@ -3776,13 +4305,13 @@ } ] } ], "authenticatorConfig" : [ { - "id" : "0e613377-2aaa-4fed-bb7d-4dea69d5c340", + "id" : "9942d132-d399-4cda-ae74-b239c6baef83", "alias" : "create unique user config", "config" : { "require.password.update.after.registration" : "false" } }, { - "id" : "ac6b9188-f0ec-48ec-852a-8e3b331b33a6", + "id" : "10569875-a274-4a4a-8cb6-6a9fd32fe3b1", "alias" : "review profile config", "config" : { "update.profile.on.first.login" : "missing" @@ -3877,4 +4406,4 @@ "clientPolicies" : { "policies" : [ ] } -} +} \ No newline at end of file diff --git a/spiffworkflow-backend/keycloak/test_user_lists/status b/spiffworkflow-backend/keycloak/test_user_lists/status index d370b96a..7f6763c0 100644 --- a/spiffworkflow-backend/keycloak/test_user_lists/status +++ b/spiffworkflow-backend/keycloak/test_user_lists/status @@ -2,15 +2,29 @@ email,spiffworkflow-employeeid # admin@spiffworkflow.org amir@status.im app.program.lead@status.im,121 +codex.sme@status.im,185 +codex1.sme@status.im,186 +codex2.sme@status.im,187 +codex3.sme@status.im,188 +codex4.sme@status.im,189 +codex5.sme@status.im,190 core1.contributor@status.im,155 core2.contributor@status.im,156 core3.contributor@status.im,157 core4.contributor@status.im,158 core5.contributor@status.im,159 +core6.contributor@status.im,199 core@status.im,113 dao.project.lead@status.im desktop.program.lead@status.im +desktop.project-lead@status.im,192 desktop.project.lead@status.im +desktop.sme@status.im,193 +desktop1.sme@status.im,194 +desktop2.sme@status.im,195 +desktop3.sme@status.im,196 +desktop4.sme@status.im,197 +desktop5.sme@status.im,198 fin@status.im,118 finance.lead@status.im,128 finance_user1@status.im @@ -20,6 +34,8 @@ infra.sme@status.im,119 infra1.sme@status.im,131 infra2.sme@status.im,132 infra3.sme@status.im,167 +infra4.sme@status.im,175 +infra5.sme@status.im,176 jakub@status.im jarrad@status.im lead@status.im,114 @@ -28,11 +44,15 @@ legal.sme@status.im,125 legal1.sme@status.im,134 legal2.sme@status.im,165 legal3.sme@status.im,166 +legal4.sme@status.im,177 +legal5.sme@status.im,178 manuchehr@status.im,110 peopleops.partner.sme@status.im,148 peopleops.partner1.sme@status.im,149 peopleops.partner2.sme@status.im,173 peopleops.partner3.sme@status.im,174 +peopleops.partner4.sme@status.im,181 +peopleops.partner5.sme@status.im,182 peopleops.partner@status.im,150 peopleops.project-lead@status.im,147 peopleops.talent.sme@status.im,143 @@ -50,4 +70,6 @@ security.sme@status.im,123 security1.sme@status.im,135 security2.sme@status.im,168 security3.sme@status.im,169 +security4.sme@status.im,179 +security5.sme@status.im,180 services.lead@status.im,122 diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py index b043e3e8..117bc41a 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/__init__.py @@ -1,7 +1,7 @@ """__init__.""" import faulthandler -import sys import os +import sys from typing import Any import connexion # type: ignore diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py index bd66a5e7..19b6f4da 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/services/process_instance_processor.py @@ -729,7 +729,7 @@ class ProcessInstanceProcessor: Rerturns: {process_name: [task_1, task_2, ...], ...} """ - bpmn_json = json.loads(self.process_instance_model.bpmn_json or '{}') + bpmn_json = json.loads(self.process_instance_model.bpmn_json or "{}") processes: dict[str, list[str]] = {bpmn_json["spec"]["name"]: []} for task_name, _task_spec in bpmn_json["spec"]["task_specs"].items(): processes[bpmn_json["spec"]["name"]].append(task_name) @@ -801,7 +801,7 @@ class ProcessInstanceProcessor: Also note that subprocess_task_id might in fact be a call activity, because spiff treats call activities like subprocesses in terms of the serialization. """ - bpmn_json = json.loads(self.process_instance_model.bpmn_json or '{}') + bpmn_json = json.loads(self.process_instance_model.bpmn_json or "{}") spiff_task_json = self.get_all_task_specs(bpmn_json) subprocesses_by_child_task_ids = {} From 0897635c5ffcbf90395a274c63df616d126eba41 Mon Sep 17 00:00:00 2001 From: burnettk Date: Thu, 23 Feb 2023 15:01:45 -0500 Subject: [PATCH 2/2] lint --- .../keycloak/realm_exports/spiffworkflow-realm.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json b/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json index 7c06832b..5821841e 100644 --- a/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json +++ b/spiffworkflow-backend/keycloak/realm_exports/spiffworkflow-realm.json @@ -4406,4 +4406,4 @@ "clientPolicies" : { "policies" : [ ] } -} \ No newline at end of file +}