diff --git a/kg_gpti_transit_jwt.properties b/kg_gpti_transit_jwt.properties index 248390b..8ba9c0d 100644 --- a/kg_gpti_transit_jwt.properties +++ b/kg_gpti_transit_jwt.properties @@ -14,8 +14,8 @@ spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.max-lifetime=1700000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.connection-timeout=30000 -spring.datasource.hikari.connection-test-query=SELECT now() -spring.datasource.hikari.validation-timeout=60000 +spring.datasource.hikari.connection-test-query=SELECT 1 +spring.datasource.hikari.validation-timeout=5000 private.key=MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQD1GHVopvcvpJyU/ha7+R9IDC6EoZyZKZ14XBGu95ikEUSPkIoxE8n6TbF8Srj95OxrowHhOejtMrUhF+NBJNR59evR9ZT1JO2yo/QvvfA834wiDpNzCDFQbGO5emuN9KoinZIpFSyMtjGNlaj7zf01wYIglSqr3kzpTYlF3zlVlW/6oGECA3swKnz9eiNEMg7WEHCIZx+HureHySSJi4MZLizH4EzAW8geUB7Vi5rJLfg5fPcXkJfOcP6PoSnfHqXkSw2DFEoM+hz3vrS/rj05YlkmTTKarnr+GOAc4IhE36zbSx93BaZ4d59Hsk5CuS4qk/sI9dn7IQYJKuypKJiFAgMBAAECggEBAI2AwoBaLUofYpuOmveJm+rPxaejWrL+2MBdf4QhxMmsgoXUcERnZWwSoQ7eYTGMkoaORQ6QjY8sgHCLxxOcPOPw/GZqv8ZMvMMvb1KE+YdblR8whSabq0UAXw79w8zgXb3AdVsss1zF75QLvNUsFy2K/CLtnAZAQO1Na5yghQyIKjKd8YXSP8Ylk15Nz942jbo71h980Uk3mr8tV/PqJ1x7cs1Z5femhQHNFDsuJMRh6TpPDSqEir3ziZs9jVQMR4pAMm5bCvfcsnOPaltomRymUKOTdvHBVv1LCTWNipQgqNPMitmcWtJnC48j62M5ADtnF1p30VezMQnylLS+3kECgYEA+rXZQdbndKHaROTE1bDAmthxgrOBW5wrzZ7B9Z0zDnrsuOa8bk8Dc0WNGd8/mzKz1t4fAfA7W9c/748erhwUFhBlzpv8COOcEJwWSL4dV0mCLBqMuhmb4yJRYwv2kVEdFvbWPjKRhr7WcnIV7rrbc/jr3kdr/aKSXzxt7J0BaDUCgYEA+kRIb8/0XC6YJL84v8NlkpgaGx7BDGqIsjVYrWAfTWtS01HxT+39QG6T5tT6rgkIN1FBxkvSvvuz2/mwSpAvVktCuZyIHoAutJUuowwwT9yYy0zaLyrhX44zoXZiHmZAHObxo1oYogtH64yhiC3X+uLtScW0g5Z7SFxjDOTFmRECgYEAxVNnwjhhSB0z7FGa0w4hKj79aH/carxKhbZUtvqZeuYpd4az/KZX8txlKF3cdEy923pMMXxhW/HZMrYU0bjr3kndt3ZyMpTi+ve/WlW4RkFnIUtsQ/VwCp+yKyD5WnrbSH3TNnUasVF2+/DrblDH9UmQbA0O5DyWtDqd0kPpHZkCgYEAs95rqWDuoWojkxWUNc67q9aBvMgnu0K+KEbLCyCwnrXp+1NDekzz3WEcD6U23epD624NNfW86+J/bDRSjeR/AShqNnjYJAPAja1CrZDPEDbd4g/EKG5LOKA9X2h0MKEQpzUcqmjQl3ZAJH0Yg4VfW0PJg2IC0ShQRruPvO6XTeECgYA54eQya6sEIpE7aIKXwitRMV3VE8jMP5cQHTLK841pFPKiC2iMQDrgJqjYuMJUdhx2WRhoHQwy76XvLMWzLmD+k2U4DwzSq3APc6r+m4EesUdhsmt8/DFyR29OT0r7OuVVppQbQ+SPHrtNxVrAVuwhpnfW8rTdZRdbPHAnwgs/lg== public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9Rh1aKb3L6SclP4Wu/kfSAwuhKGcmSmdeFwRrveYpBFEj5CKMRPJ+k2xfEq4/eTsa6MB4Tno7TK1IRfjQSTUefXr0fWU9STtsqP0L73wPN+MIg6TcwgxUGxjuXprjfSqIp2SKRUsjLYxjZWo+839NcGCIJUqq95M6U2JRd85VZVv+qBhAgN7MCp8/XojRDIO1hBwiGcfh7q3h8kkiYuDGS4sx+BMwFvIHlAe1YuayS34OXz3F5CXznD+j6Ep3x6l5EsNgxRKDPoc9760v649OWJZJk0ymq56/hjgHOCIRN+s20sfdwWmeHefR7JOQrkuKpP7CPXZ+yEGCSrsqSiYhQIDAQAB diff --git a/kz_istransit_jwt.properties b/kz_istransit_jwt.properties index 8e1b996..34ccd43 100644 --- a/kz_istransit_jwt.properties +++ b/kz_istransit_jwt.properties @@ -3,7 +3,8 @@ server.port=8082 issuer.name=istransit -logging.level.com.zaxxer.hikari=DEBUG +#logging.level.com.zaxxer.hikari=DEBUG +#logging.level.org.springframework=warn spring.datasource.url=jdbc:postgresql://10.101.1.6:5432/transit_2024_09_03?ApplicationName=kz_istransit_jwt spring.datasource.username=postgres @@ -12,19 +13,18 @@ spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.hikari.maximum-pool-size=10 spring.datasource.hikari.minimum-idle=5 -spring.datasource.hikari.max-lifetime=1700000 -spring.datasource.hikari.idle-timeout=600000 +spring.datasource.hikari.max-lifetime=600000 +spring.datasource.hikari.idle-timeout=300000 spring.datasource.hikari.connection-timeout=30000 -spring.datasource.hikari.connection-test-query=SELECT now() -spring.datasource.hikari.validation-timeout=60000 - +spring.datasource.hikari.connection-test-query=SELECT 1 +spring.datasource.hikari.validation-timeout=5000 +spring.datasource.hikari.validation-interval=60000 private.key=MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCsrV60WgOCbFDz7mrr5Ade4wSrKjgB4PX+Y2zzttc87FKILzZswpQv2XLRZXEbkgpAViV99BsKDSd0f46FTynTH3SqbAJ4KfhsVPqfMD2yNjJBJSRyLZ19QAFdyyveRI/b4oQ+dOl0ZhlAUQ5Hfg5G34cE/AyfoVaHRol2ZOpkf5XL90/dPKxPsAaWw+LwgD2PdqzINl1L17EspVUjNiRsclQqkodhzhP/brRhq5S03KKNtPnDhlZJsep67NX8cZQJgil8BnIzGHMqdFF+NBZoLPy/+r4U/Vr6O1oPZ7RK3ontY6fJPHY/bI17KxwQusk8C3tPJNwg2U3mhkJ3mF93AgMBAAECggEAE9nCX11RtfaZv9ESvZdzOXdDnCG4Wo7v+JSZe9LzH2/TdRBoY0xjGLUYu/W7cP3y6757hOVBDoDAnmXjjnOxTTH6iXTtO78nbdy/CvnSvd/5GwAYFoAj8Lgg8BVhL6YWG6MIrN1n0RfDo18uEw3suj0MGoiXMuqrNdXoC5JCV9cajVSDhABw761sNrwBgYCOxk28KrfTRLh6QsQGSf8stLDDwgfImWXJTLzKacFAemNRFuBqp+pQdVuBtorN9rYoGyiswVBTWIA06uUYZqK1uIRLh7wHf2cFARm5rREDwYmG8EHe8JXYeOU2JUF/Rd0V4EQVZHFB4VLwYYumwq2XUQKBgQDcyrmpaA7xjt7ilIV50CtzrY8hAJST2bbdnl/aMm7JI/ZjNFVXbTDHxUen0IvyHmpPS1Z3K8XJ2IR07L7vO3E96OJcYsU2dJ9/HZ5Vg+Q+f3TrscbNRc6Dn6knG9Vr/D/x3pJoyRR7VoWQXs6y87Df5eVtdjmzTTKtY/tmMhEyrQKBgQDINnvwg9vxhhaqflQmNCxGoAkImrYsyGBVlhOy3qbqnMVSQGW8ub/MChpNPrOBTNq6Nb7kK4dzYGSa7lK3vjX+9bc/8vUY69DpV9yZpp370UXTnrKkPUIgrVHiQfjfOXDXeHcpCNQD7E+cDM+DtPtgjtPV966HipFMSvOBmohDMwKBgQDY3Ro9ZeL/qpgLr1vnCOwVBA1ImhxVmIt/5FY7qDuevv778+Q7Khm2rnQyRamfl/ZNii8UgF8WYd/AROVJb3ZMG9lyauVQFn6uyXXCgviF1oUOGCCvcPhl2kW4DyOynCJmvHnMCG1gs9wesLCPnsJFOLb/rBcCoTm8iy7b8yNnRQKBgCeDSTaQb2ndMr/3KphXl51gnCfMkMOJ0ClT8xNMCdknk3HGL83tQsL8A3DXPQn5pvk0/jV9ub+1eGVzP3Pv4CwvRjkis+h1Mce7hVf1oBxAku1O1qa/SDu2uQBUUM+NQI3lwm6gxWb4zkVX6eRuZWYLCheiSBmL6V0LNb+QRfAtAoGBAJ4tM34ovk0Ag/fRjxgEYqo7FcMplBs3nymGV/zS9QQA4gorGq5mBiQX0n8wR68UpKz7u1NXNXc7hJGvP0uHK+/GCQd9i1Csow641TIdMv+4XhQl2/ZO0NuJb/NVB6qJ93WlnhWJP3s1a1zVlRyF3+Zn0D8nbBp+tkCbET0+XGuB public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArK1etFoDgmxQ8+5q6+QHXuMEqyo4AeD1/mNs87bXPOxSiC82bMKUL9ly0WVxG5IKQFYlffQbCg0ndH+OhU8p0x90qmwCeCn4bFT6nzA9sjYyQSUkci2dfUABXcsr3kSP2+KEPnTpdGYZQFEOR34ORt+HBPwMn6FWh0aJdmTqZH+Vy/dP3TysT7AGlsPi8IA9j3asyDZdS9exLKVVIzYkbHJUKpKHYc4T/260YauUtNyijbT5w4ZWSbHqeuzV/HGUCYIpfAZyMxhzKnRRfjQWaCz8v/q+FP1a+jtaD2e0St6J7WOnyTx2P2yNeyscELrJPAt7TyTcINlN5oZCd5hfdwIDAQAB access.time=600 refresh.time=43200 - captcha.key=PPExpv36jk4Vzda3NpYnXLfuHCLYXqaNrxlOH/Jr/1M= captcha.time=600 diff --git a/org_ccalm_jwt.properties b/org_ccalm_jwt.properties index 52e962c..87460cf 100644 --- a/org_ccalm_jwt.properties +++ b/org_ccalm_jwt.properties @@ -2,7 +2,7 @@ spring.application.name=org_ccalm_jwt server.port=8082 issuer.name=ccalm -logging.level.com.zaxxer.hikari=DEBUG +#logging.level.com.zaxxer.hikari=DEBUG spring.datasource.url=jdbc:postgresql://91.201.214.156:5432/CCALM?ApplicationName=org_ccalm_jwt spring.datasource.username=postgres @@ -14,9 +14,10 @@ spring.datasource.hikari.minimum-idle=5 spring.datasource.hikari.max-lifetime=1700000 spring.datasource.hikari.idle-timeout=600000 spring.datasource.hikari.connection-timeout=30000 -spring.datasource.hikari.connection-test-query=SELECT now() -spring.datasource.hikari.validation-timeout=60000 +spring.datasource.hikari.connection-test-query=SELECT 1 +spring.datasource.hikari.validation-timeout=5000 +personal_data.key=8YxGFFOd private.key=MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNgtaCfu5QlhWfU8bJAooLoX+bo/ARsvoWUJf5NodkGOivze5Lqtu5eq6ptT+gVKK+IEsjpmDsFPMCE2CW7xLZfgbtrWmTPd+fiRb2Z/fMudedo166H5WEgS3+TDWKt7WkLA/3kqvIqdBotuL4BENwZj6CIjGNdG01RNsCaDA/vxTkzx9njz6kfgAda/+wbdOJNwjNRgIb9AyedQT5OKvqRXequzrrOKD9wrm1O4nv8lA6WFg5YEMSW7T6WRIeArZsQr1aHv6qkiu47YreApfdFIWHxd9QinA9WrLPYdWXONr7+xyvqS4MHSJh9ZmCvMsc/HcF3RHJgEwgiC8E6hiZAgMBAAECggEAByZOICwaTmNqTSi0+blE5DKyJdAGQhdf6/bR0rG69BiJv9QCPk+rZUCHYxATLpjDMKoe8xaOuKfh7GiQK7AVj8t6ojouOhkk9n/mdJwZWt38Slesq/z9TqbP2tD769+ISjXeOFa58zk1Lu9t5gL/9aEY+54E607pnbjPhb3qL819/7absLbY1y3GKw2Cwd7RfP8nOWj0ViwnalFjfg6YZS1BL5c9NSg41FzZolwPruZ/bBGbc3nMW2khpuK7CtRk1pRJHUNYuVCsaBU4M4sf3tlZQPOdB6eYmQ3xmPtdnHYB13s588KialXKFlAuO4zG0CFa8DfIKsWDv6xTC1cMgQKBgQD6CjJuu715oKob7ohDTfrSppk4PY/kxWhUkKyKVW1Y1jXQOcd4BwVSyH6s7N8pCSWMwWmoF/t/l2kIcAWNZnsbzAQ8TYOhp1THstXMVb6c7JOL3SQC5RjbgW1RWCalh7/4QVE0xYeEL3qv5I2t9215zKR87Z6LIdJkxxAsHgMSbQKBgQDSaOp0kJZPkQH/75ltaI9exczyoaf+5U/OrnqT2lpRwa+5wqUTPWpTFTCDcJdu8OKCgrKPOQ6NACuX4PbIW/jR+70w7nbC46Tx3JdDYxBlm+6MuHUs5RXufFDJyGoN8lJzoPGax3uxY1kxWwSaSIB0sVXV/P3PIE31I5DbarWjXQKBgQCrRyLm4anYUCtWuN4UpK0lcUPR17Hi9ysRioz2sbAWw53XRk0SNlT6MSc9E4GGnaJgOflDUTJRY4lqYzoac1HvZ6CbIkoCCRq1NRbpQu8wlYo4q8JITWDqtE0LBMRsbYId77hN2uWKse9r37cBrVULsxgWD7uj+QYjTI0Se3iFPQJ/SSYwXFXn68F98Hxb2q1/KnOZzMBmpzcRh8kg1EYVIFc1wF7rBMVVMY0sUIXUH72fAcBuU1yCsoJcpXCQWxeeaWIbY+eDYj3CGlOWQtct3CVZyZJXKkR6W27cp0oFlNOp1okddbHkTsc7Ou1prDmIbwk3zi0mD9wrPg4fTijK/QKBgQDrYEWT77dQLPcN3RTVn3Ua2d9aj/IWwC330I4qZq2SFKOaB/olnPA6fLNYToTWO70A2ZlsMtVepdThIeYFidkA7Lj7lTVYFdQQzREsO5908A1YWE4sgMEEdMc7n5xKT85vpkPOjBOLZYQ6JjDeWBMDxnXR9/txwbau4bsq3/QFuQ== public.key=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzYLWgn7uUJYVn1PGyQKKC6F/m6PwEbL6FlCX+TaHZBjor83uS6rbuXquqbU/oFSiviBLI6Zg7BTzAhNglu8S2X4G7a1pkz3fn4kW9mf3zLnXnaNeuh+VhIEt/kw1ire1pCwP95KryKnQaLbi+ARDcGY+giIxjXRtNUTbAmgwP78U5M8fZ48+pH4AHWv/sG3TiTcIzUYCG/QMnnUE+Tir6kV3qrs66zig/cK5tTuJ7/JQOlhYOWBDElu0+lkSHgK2bEK9Wh7+qpIruO2K3gKX3RSFh8XfUIpwPVqyz2HVlzja+/scr6kuDB0iYfWZgrzLHPx3Bd0RyYBMIIgvBOoYmQIDAQAB access.time=600 @@ -36,3 +37,5 @@ url.main=https://ccalm.org/ spring.redis.host=127.0.0.1 spring.redis.port=6379 spring.redis.password=9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== + + diff --git a/org_ccalm_jwt.yml b/org_ccalm_jwt.yml new file mode 100644 index 0000000..3e2037a --- /dev/null +++ b/org_ccalm_jwt.yml @@ -0,0 +1,51 @@ +server: + port: 8082 +issuer: + name: ccalm + +spring: + application: + name: org_ccalm_jwt + datasource: + url: jdbc:postgresql://91.201.214.156:5432/CCALM?ApplicationName=org_ccalm_jwt + username: postgres + password: PasSecrKey1 + driver-class-name: org.postgresql.Driver + hikari: + maximum-pool-size: 10 + minimum-idle: 5 + max-lifetime: 1700000 + idle-timeout: 600000 + connection-timeout: 30000 + connection-test-query: SELECT 1 + validation-timeout: 5000 + redis: + host: 127.0.0.1 + port: 6379 + password: 9F3/NKWeOjd815vkadT2DcgVHf6fEpVQXw== + +mail: + host: smtp.yandex.ru + port: 465 + login: info@ccalm.org + password: fu2lpsoGPGiq1xlRm8ag + +captcha: + key: PPExpv36jk4Vzda3NpYnXLfuHCLYXqaNrxlOH/Jr/1M= + time: 600 + +url: + reset: https://ccalm.org/api/authorization/v02/reset + main: https://ccalm.org/ + +personal_data: + key: 8YxGFFOd + +private: + key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDNgtaCfu5QlhWfU8bJAooLoX+bo/ARsvoWUJf5NodkGOivze5Lqtu5eq6ptT+gVKK+IEsjpmDsFPMCE2CW7xLZfgbtrWmTPd+fiRb2Z/fMudedo166H5WEgS3+TDWKt7WkLA/3kqvIqdBotuL4BENwZj6CIjGNdG01RNsCaDA/vxTkzx9njz6kfgAda/+wbdOJNwjNRgIb9AyedQT5OKvqRXequzrrOKD9wrm1O4nv8lA6WFg5YEMSW7T6WRIeArZsQr1aHv6qkiu47YreApfdFIWHxd9QinA9WrLPYdWXONr7+xyvqS4MHSJh9ZmCvMsc/HcF3RHJgEwgiC8E6hiZAgMBAAECggEAByZOICwaTmNqTSi0+blE5DKyJdAGQhdf6/bR0rG69BiJv9QCPk+rZUCHYxATLpjDMKoe8xaOuKfh7GiQK7AVj8t6ojouOhkk9n/mdJwZWt38Slesq/z9TqbP2tD769+ISjXeOFa58zk1Lu9t5gL/9aEY+54E607pnbjPhb3qL819/7absLbY1y3GKw2Cwd7RfP8nOWj0ViwnalFjfg6YZS1BL5c9NSg41FzZolwPruZ/bBGbc3nMW2khpuK7CtRk1pRJHUNYuVCsaBU4M4sf3tlZQPOdB6eYmQ3xmPtdnHYB13s588KialXKFlAuO4zG0CFa8DfIKsWDv6xTC1cMgQKBgQD6CjJuu715oKob7ohDTfrSppk4PY/kxWhUkKyKVW1Y1jXQOcd4BwVSyH6s7N8pCSWMwWmoF/t/l2kIcAWNZnsbzAQ8TYOhp1THstXMVb6c7JOL3SQC5RjbgW1RWCalh7/4QVE0xYeEL3qv5I2t9215zKR87Z6LIdJkxxAsHgMSbQKBgQDSaOp0kJZPkQH/75ltaI9exczyoaf+5U/OrnqT2lpRwa+5wqUTPWpTFTCDcJdu8OKCgrKPOQ6NACuX4PbIW/jR+70w7nbC46Tx3JdDYxBlm+6MuHUs5RXufFDJyGoN8lJzoPGax3uxY1kxWwSaSIB0sVXV/P3PIE31I5DbarWjXQKBgQCrRyLm4anYUCtWuN4UpK0lcUPR17Hi9ysRioz2sbAWw53XRk0SNlT6MSc9E4GGnaJgOflDUTJRY4lqYzoac1HvZ6CbIkoCCRq1NRbpQu8wlYo4q8JITWDqtE0LBMRsbYId77hN2uWKse9r37cBrVULsxgWD7uj+QYjTI0Se3iFPQJ/SSYwXFXn68F98Hxb2q1/KnOZzMBmpzcRh8kg1EYVIFc1wF7rBMVVMY0sUIXUH72fAcBuU1yCsoJcpXCQWxeeaWIbY+eDYj3CGlOWQtct3CVZyZJXKkR6W27cp0oFlNOp1okddbHkTsc7Ou1prDmIbwk3zi0mD9wrPg4fTijK/QKBgQDrYEWT77dQLPcN3RTVn3Ua2d9aj/IWwC330I4qZq2SFKOaB/olnPA6fLNYToTWO70A2ZlsMtVepdThIeYFidkA7Lj7lTVYFdQQzREsO5908A1YWE4sgMEEdMc7n5xKT85vpkPOjBOLZYQ6JjDeWBMDxnXR9/txwbau4bsq3/QFuQ== +public: + key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzYLWgn7uUJYVn1PGyQKKC6F/m6PwEbL6FlCX+TaHZBjor83uS6rbuXquqbU/oFSiviBLI6Zg7BTzAhNglu8S2X4G7a1pkz3fn4kW9mf3zLnXnaNeuh+VhIEt/kw1ire1pCwP95KryKnQaLbi+ARDcGY+giIxjXRtNUTbAmgwP78U5M8fZ48+pH4AHWv/sG3TiTcIzUYCG/QMnnUE+Tir6kV3qrs66zig/cK5tTuJ7/JQOlhYOWBDElu0+lkSHgK2bEK9Wh7+qpIruO2K3gKX3RSFh8XfUIpwPVqyz2HVlzja+/scr6kuDB0iYfWZgrzLHPx3Bd0RyYBMIIgvBOoYmQIDAQAB +access: + time: 600 +refresh: + time: 43200 diff --git a/src/main/java/org/ccalm/jwt/MainController.java b/src/main/java/org/ccalm/jwt/MainController.java index 5b01968..35352e0 100644 --- a/src/main/java/org/ccalm/jwt/MainController.java +++ b/src/main/java/org/ccalm/jwt/MainController.java @@ -127,19 +127,27 @@ public class MainController implements ServletContextAware { public String createStrJSONError(int code, String message, String setting, String marker) { JSONObject json = new JSONObject(); - json.put("error_code", code); - json.put("error_message", Arrays.asList(message)); - json.put("error_setting", Arrays.asList(setting)); - json.put("error_marker", marker); + try { + json.put("error_code", code); + json.put("error_message", Arrays.asList(message)); + json.put("error_setting", Arrays.asList(setting)); + json.put("error_marker", marker); + } catch (JSONException e) { + return "{}"; + } return json.toString(); } public JSONObject createJSONError(int code, String message, String setting, String marker) { JSONObject json = new JSONObject(); - json.put("error_code", code); - json.put("error_message", Arrays.asList(message)); - json.put("error_setting", Arrays.asList(setting)); - json.put("error_marker", Arrays.asList(setting)); + try { + json.put("error_code", code); + json.put("error_message", Arrays.asList(message)); + json.put("error_setting", Arrays.asList(setting)); + json.put("error_marker", Arrays.asList(setting)); + } catch (JSONException e) { + logger.error(e); + } return json; } @@ -266,27 +274,31 @@ public class MainController implements ServletContextAware { @ResponseBody public String index(Model model,@RequestParam(required=false,name="lng",defaultValue = "1") String language_id) { JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); - json.put("error_marker",(String)null); - String buildDate=""; - //String buildVersion=""; try { - InputStream inputStream = MainController.class.getClassLoader().getResourceAsStream("META-INF/build-info.properties"); - if (inputStream != null) { - Properties properties = new Properties(); - properties.load(inputStream); - buildDate = properties.getProperty("build.time"); - //buildVersion = properties.getProperty("build.version"); + json.put("error_code",0); + json.put("error_message",""); + json.put("error_marker",(String)null); + String buildDate=""; + //String buildVersion=""; + try { + InputStream inputStream = MainController.class.getClassLoader().getResourceAsStream("META-INF/build-info.properties"); + if (inputStream != null) { + Properties properties = new Properties(); + properties.load(inputStream); + buildDate = properties.getProperty("build.time"); + //buildVersion = properties.getProperty("build.version"); + } + } catch (Exception e) { + e.printStackTrace(); } - } catch (Exception e) { - e.printStackTrace(); + json.put("build_date",buildDate); + //json.put("build_version",buildVersion); + json.put("name",application_name); + //json.put("active_connections",dataSource.getHikariPoolMXBean().getActiveConnections()); + //json.put("idle_connections",dataSource.getHikariPoolMXBean().getIdleConnections()); + } catch (JSONException e) { + throw new RuntimeException(e); } - json.put("build_date",buildDate); - //json.put("build_version",buildVersion); - json.put("name",application_name); - //json.put("active_connections",dataSource.getHikariPoolMXBean().getActiveConnections()); - //json.put("idle_connections",dataSource.getHikariPoolMXBean().getIdleConnections()); return json.toString(); } /* @@ -299,13 +311,14 @@ public class MainController implements ServletContextAware { public String get_settings(@CookieValue(value = "jwt_a", defaultValue = "") String jwt_a, @RequestParam(required=false,name="lng",defaultValue = "1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - //json.put("error_message",""); - //json.put("error_marker",(String)null); try{ + json.put("error_code",0); + //json.put("error_message",""); + //json.put("error_marker",(String)null); + if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) { - throw new CustomException(10000, trt.trt("Please_send_a_valid_JWT_token"),null); + throw new CustomException(10000, trt.trt("Please_log_in"),null); } //Проверяю подпись токена Jws claims = null; @@ -355,13 +368,14 @@ public class MainController implements ServletContextAware { public String set_settings(SettingModel setting, @CookieValue(value = "jwt_a", defaultValue = "") String jwt_a, @RequestParam(required=false,name="lng",defaultValue = "1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - //json.put("error_message",""); - //json.put("error_marker",(String)null); try{ + json.put("error_code",0); + //json.put("error_message",""); + //json.put("error_marker",(String)null); + if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) { - throw new CustomException(10000, trt.trt("Please_send_a_valid_JWT_token"),null); + throw new CustomException(10000, trt.trt("Please_log_in"),null); } //Проверяю подпись токена Jws claims = null; @@ -423,56 +437,60 @@ public class MainController implements ServletContextAware { public String access(Model model, @CookieValue(value = "jwt_a", defaultValue = "") String jwt_a,@Nullable @RequestBody ActionName action_name,@CookieValue(value = "lng",defaultValue = "1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); - String result=createStrJSONError(10000,trt.trt("Request_not_processed"), (String)null, (String)null); - if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) - { - result=createStrJSONError(10000,trt.trt("Please_send_a_valid_JWT_token"), (String)null, (String)null); - return result; - } - - //Connection conn = getConnection(); - //Проверяю подпись токена - Jws claims = null; - //SecretKey key_a = new SecretKeySpec(Base64.getDecoder().decode(key_a_txt), "HmacSHA256"); try { - claims = Jwts.parserBuilder() - .setSigningKey(getPublicKey()) //.setSigningKey(key_a) - .build() - .parseClaimsJws(jwt_a); + if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) + { + result=createStrJSONError(10000,trt.trt("Please_log_in"), (String)null, (String)null); + return result; + } + + //Connection conn = getConnection(); + //Проверяю подпись токена + Jws claims = null; + //SecretKey key_a = new SecretKeySpec(Base64.getDecoder().decode(key_a_txt), "HmacSHA256"); + try { + claims = Jwts.parserBuilder() + .setSigningKey(getPublicKey()) //.setSigningKey(key_a) + .build() + .parseClaimsJws(jwt_a); + } catch (Exception e) { + return createStrJSONError(10000, trt.trt("JWT_token_verification_error"),(String)null,(String)null); + } + String sql = """ + select + name + from + main.get_access_list(:user_id) + where + allow=true + and (:action_name::text is null or name ilike '%'|| :action_name::text ||'%') + order by name + """; + + + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("user_id", claims.getBody().get("user_id")); + if(action_name == null) + parameters.addValue("action_name", null); + else + parameters.addValue("action_name", action_name.getActionName()); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + JSONObject json = new JSONObject(); + json.put("error_code",0); + //json.put("error_message",""); + //json.put("error_marker",(String)null); + JSONArray data = new JSONArray(); + for (int i = 0; i < ret.size(); i++) { + data.put((new JSONObject(ret.get(i))).getString("name")); + } + json.put("data",data); + result = json.toString(); } catch (Exception e) { - return createStrJSONError(10000, trt.trt("JWT_token_verification_error"),(String)null,(String)null); + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + result=createStrJSONError(10000,trt.trt("Internal_Server_Error"), (String)null, uuid); } - String sql = """ - select - name - from - main.get_access_list(:user_id) - where - allow=true - and (:action_name::text is null or name ilike '%'|| :action_name::text ||'%') - order by name - """; - - - MapSqlParameterSource parameters = new MapSqlParameterSource(); - parameters.addValue("user_id", claims.getBody().get("user_id")); - if(action_name == null) - parameters.addValue("action_name", null); - else - parameters.addValue("action_name", action_name.getActionName()); - List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); - JSONObject json = new JSONObject(); - json.put("error_code",0); - //json.put("error_message",""); - //json.put("error_marker",(String)null); - JSONArray data = new JSONArray(); - for (int i = 0; i < ret.size(); i++) { - data.put((new JSONObject(ret.get(i))).getString("name")); - } - json.put("data",data); - result = json.toString(); - return result; } @@ -481,9 +499,10 @@ public class MainController implements ServletContextAware { public String captcha(Model model, @RequestBody EmailModel email_model, @RequestParam(required=false,name="lng",defaultValue = "1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try{ + json.put("error_code",0); + json.put("error_message",""); + //Генерю Captcha ImageCaptcha imageCaptcha = new ImageCaptcha.Builder(400, 100) .addContent(new LatinContentProducer(7), @@ -532,9 +551,10 @@ public class MainController implements ServletContextAware { public String create(@RequestBody NewUserModel newUserModel,@RequestParam(required=false,name="lng",defaultValue="1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try{ + json.put("error_code",0); + json.put("error_message",""); + if(newUserModel.getName().length()<3) { throw new CustomException(10000, trt.trt("The_name_field_is_empty"),null); } @@ -665,12 +685,13 @@ public class MainController implements ServletContextAware { public String info(Model model, @CookieValue(value = "jwt_a", defaultValue = "") String jwt_a, @CookieValue(value = "lng",defaultValue="1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try { + json.put("error_code",0); + json.put("error_message",""); + if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) { - throw new CustomException(10000, trt.trt("Please_send_a_valid_JWT_token"),null); + throw new CustomException(10000, trt.trt("Please_log_in"),null); } //Проверяю подпись токена Jws claims = null; @@ -733,9 +754,10 @@ public class MainController implements ServletContextAware { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try { + json.put("error_code",0); + json.put("error_message",""); + if(loginModel.getLogin().isEmpty()) throw new CustomException(10000,trt.trt("The_login_field_is_empty"),null); if(!Tools.isValidEmail(loginModel.getLogin())) @@ -1032,6 +1054,10 @@ public class MainController implements ServletContextAware { java.lang.String uuid = UUID.randomUUID().toString(); logger.error("Error executing SQL query", uuid, ex); throw new CustomException(10000, trt.trt("Error_executing_SQL_query"),uuid); + }catch (Exception e) { + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + throw new CustomException(10000, trt.trt("Internal_Server_Error"),uuid); } Map result = new HashMap<>(); @@ -1047,9 +1073,10 @@ public class MainController implements ServletContextAware { public String newtotp(HttpServletRequest request, @RequestBody LoginModel loginModel, @RequestParam(required=false,name="lng",defaultValue="1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try { + json.put("error_code",0); + json.put("error_message",""); + if(loginModel.getLogin().isEmpty()) throw new CustomException(10000,trt.trt("The_login_field_is_empty"),null); if(!Tools.isValidEmail(loginModel.getLogin())) @@ -1219,14 +1246,14 @@ public class MainController implements ServletContextAware { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try { + json.put("error_code",0); + json.put("error_message",""); if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2 || jwt_r.equals("") || countOccurrences(jwt_r, '.')!=2 ) { logout(response,request); - throw new CustomException(10000, trt.trt("Please_send_a_valid_JWT_token"),null); + throw new CustomException(10000, trt.trt("Please_log_in"),null); } //Разбираю токен без проверки, чтобы выбрать email @@ -1317,50 +1344,53 @@ public class MainController implements ServletContextAware { Translation trt = new Translation(language_id,jdbcTemplate); String result=createHTMLError(1,trt.trt("Request_not_processed")); + try { + int index = token.indexOf("."); + if (index < 0) + return createHTMLError(10000, trt.trt("Please_send_a_valid_token")); - int index = token.indexOf("."); - if(index<0) - return createHTMLError(10000,trt.trt("Please_send_a_valid_token")); + String payload = token.substring(0, index); + String signature1 = token.substring(index + 1); - String payload = token.substring(0, index); - String signature1 = token.substring(index+1); + String signature2 = Tools.generateSignature(captchaKey, payload); + if (!signature1.equals(signature2)) { + return createHTMLError(1, trt.trt("The_signature_did_not_match")); + } - String signature2 = Tools.generateSignature(captchaKey,payload); - if(! signature1.equals(signature2)) - { - return createHTMLError(1,trt.trt("The_signature_did_not_match")); + //расшифровываю + JSONObject jToken = new JSONObject(Tools.decryptText(captchaKey, payload)); + if (jToken == null) + return createHTMLError(10000, trt.trt("Please_send_a_valid_JSON_string_in_your_token")); + if (jToken.getLong("exp") < Instant.now().getEpochSecond()) { + return createHTMLError(10000, trt.trt("Captcha_is_outdated")); + } + if (!Tools.isValidEmail(jToken.getString("email"))) { + return createHTMLError(10000, trt.trt("The_email_field_is_incorrect")); + } + + //Проверяю на то что не нажали много раз на востановление пароля + long id = 0; + String sql = "select id from main._users where del=false and password_new=:password_new and email=:email"; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("password_new", jToken.getString("password")); + parameters.addValue("email", jToken.getString("email")); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (int i = 0; i < ret.size(); i++) { + id = (new JSONObject(ret.get(i))).getLong("id"); + } + if (id == 0) + return createHTMLError(10000, trt.trt("The_password_update_request_has_expired")); + + //Теперь обновляем пароль в базе + sql = "update main._users set password=crypt(password_new, gen_salt('bf')),password_new = null,expiration='1970-01-01' where password_new is not null and email=:email"; + parameters = new MapSqlParameterSource(); + parameters.addValue("email", jToken.getString("email")); + int cnt = jdbcTemplate.update(sql, parameters); + } catch (Exception e) { + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + return createHTMLError(10000,trt.trt("Internal_Server_Error")); } - - //расшифровываю - JSONObject jToken = new JSONObject(Tools.decryptText(captchaKey,payload)); - if(jToken==null) - return createHTMLError(10000,trt.trt("Please_send_a_valid_JSON_string_in_your_token")); - if(jToken.getLong("exp") ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); - for (int i = 0; i < ret.size(); i++) { - id = (new JSONObject(ret.get(i))).getLong("id"); - } - if(id==0) - return createHTMLError(10000, trt.trt("The_password_update_request_has_expired")); - - //Теперь обновляем пароль в базе - sql = "update main._users set password=crypt(password_new, gen_salt('bf')),password_new = null,expiration='1970-01-01' where password_new is not null and email=:email"; - parameters = new MapSqlParameterSource(); - parameters.addValue("email", jToken.getString("email")); - int cnt = jdbcTemplate.update(sql, parameters); - return createHTMLError(0,trt.trt("The_password_has_been_changed_and_you_will_be_redirected_to_the_main_page")); } @@ -1369,91 +1399,96 @@ public class MainController implements ServletContextAware { public String restore(Model model, @RequestBody RestoreModel restore, @RequestParam(required=false,name="lng",defaultValue = "1") String language_id) { Translation trt = new Translation(language_id,jdbcTemplate); - String result=createStrJSONError(10000,trt.trt("Request_not_processed"), (String)null, (String)null); - //Connection conn = getConnection(); + try{ + //Connection conn = getConnection(); - int index = restore.getToken().indexOf("."); - String payload = restore.getToken().substring(0, index); - String signature1 = restore.getToken().substring(index+1); + int index = restore.getToken().indexOf("."); + String payload = restore.getToken().substring(0, index); + String signature1 = restore.getToken().substring(index+1); - System.out.println("signature1: " + signature1); - System.out.println("payload: " + payload); + System.out.println("signature1: " + signature1); + System.out.println("payload: " + payload); - String signature2 = Tools.generateSignature(captchaKey,payload); - if(! signature1.equals(signature2)) - { - result=createStrJSONError(10000,trt.trt("The_signature_did_not_match"), (String)null, (String)null); - } + String signature2 = Tools.generateSignature(captchaKey,payload); + if(! signature1.equals(signature2)) + { + result=createStrJSONError(10000,trt.trt("The_signature_did_not_match"), (String)null, (String)null); + } - System.out.println("signature2: " + signature2); + System.out.println("signature2: " + signature2); - //расшифровываю - JSONObject token = new JSONObject(Tools.decryptText(captchaKey,payload)); + //расшифровываю + JSONObject token = new JSONObject(Tools.decryptText(captchaKey,payload)); - if(token==null) - return createStrJSONError(10000,trt.trt("Please_send_a_valid_JSON_string_in_your_token"), (String)null,(String)null); - if(!restore.getCode().equals(token.getString("code"))){ - return createStrJSONError(10000,trt.trt("The_code_did_not_match"),(String)null,(String)null); - } + if(token==null) + return createStrJSONError(10000,trt.trt("Please_send_a_valid_JSON_string_in_your_token"), (String)null,(String)null); + if(!restore.getCode().equals(token.getString("code"))){ + return createStrJSONError(10000,trt.trt("The_code_did_not_match"),(String)null,(String)null); + } - if(token.getLong("exp") ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); - for (int i = 0; i < ret.size(); i++) { - id = (new JSONObject(ret.get(i))).getLong("id"); - } - if(id==0) - return createStrJSONError(10000, trt.trt("User_with_this_email_was_not_found"),(String)null,(String)null); + //Проверяю есть ли в базе пользователь если есть отправляю ему почту для востановления + long id=0; + String sql = "select id from main._users where del=false and email=:email"; + MapSqlParameterSource parameters = new MapSqlParameterSource(); + parameters.addValue("email", token.getString("email")); + List ret = jdbcTemplate.query(sql, parameters, new DBTools.JsonRowMapper()); + for (int i = 0; i < ret.size(); i++) { + id = (new JSONObject(ret.get(i))).getLong("id"); + } + if(id==0) + return createStrJSONError(10000, trt.trt("User_with_this_email_was_not_found"),(String)null,(String)null); - String password_new = Tools.generatePassword(6); + String password_new = Tools.generatePassword(6); - sql = "update main._users set password_new=:password_new where email=:email"; - parameters = new MapSqlParameterSource(); - parameters.addValue("password_new", password_new); - parameters.addValue("email", token.getString("email")); - int cnt = jdbcTemplate.update(sql, parameters); + sql = "update main._users set password_new=:password_new where email=:email"; + parameters = new MapSqlParameterSource(); + parameters.addValue("password_new", password_new); + parameters.addValue("email", token.getString("email")); + int cnt = jdbcTemplate.update(sql, parameters); - //Создаю новый токен, кодирую, шифрую, подписываю и затем отправляю на почту - JSONObject jTokenNew = new JSONObject(); - jTokenNew.put("exp", Instant.now().getEpochSecond()+(60*60)); //+60 минут - jTokenNew.put("password",password_new); - jTokenNew.put("email",token.getString("email")); - String token_new = jTokenNew.toString(); - token_new = Tools.encryptText(captchaKey,token_new); - token_new = token_new+"."+Tools.generateSignature(captchaKey, token_new); //Подпись для как бы токена + //Создаю новый токен, кодирую, шифрую, подписываю и затем отправляю на почту + JSONObject jTokenNew = new JSONObject(); + jTokenNew.put("exp", Instant.now().getEpochSecond()+(60*60)); //+60 минут + jTokenNew.put("password",password_new); + jTokenNew.put("email",token.getString("email")); + String token_new = jTokenNew.toString(); + token_new = Tools.encryptText(captchaKey,token_new); + token_new = token_new+"."+Tools.generateSignature(captchaKey, token_new); //Подпись для как бы токена - //token_new = token_new.replace("+", "-") - // .replace("/", "_") - // .replace("=", "^"); //Убираем спец символы для передачи через URL - try { - token_new = URLEncoder.encode(token_new, StandardCharsets.UTF_8.toString()); - } catch (UnsupportedEncodingException e) { - return createStrJSONError(10000, trt.trt("Internal_Server_Error"), (String)null, (String)null); - } + //token_new = token_new.replace("+", "-") + // .replace("/", "_") + // .replace("=", "^"); //Убираем спец символы для передачи через URL + try { + token_new = URLEncoder.encode(token_new, StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + return createStrJSONError(10000, trt.trt("Internal_Server_Error"), (String)null, (String)null); + } - //Формирую ссылку для отправки на почту для сброса пароля - String html = ""+trt.trt("Password_recovery")+""; - html += "

"+trt.trt("To_reset_your_password_click_on_the_link")+":

"; - html += ""+trt.trt("Reset_the_password")+"

"; - html += trt.trt("After_clicking_on_the_link_the_new_password_will_be")+": \"" + password_new + "\""; - html += ""; - try { - EmailUtility.sendEmail(mail_host, mail_port, mail_login, mail_password, token.getString("email"), trt.trt("Password_recovery"), html); - } catch (Exception ex) { + //Формирую ссылку для отправки на почту для сброса пароля + String html = ""+trt.trt("Password_recovery")+""; + html += "

"+trt.trt("To_reset_your_password_click_on_the_link")+":

"; + html += ""+trt.trt("Reset_the_password")+"

"; + html += trt.trt("After_clicking_on_the_link_the_new_password_will_be")+": \"" + password_new + "\""; + html += ""; + try { + EmailUtility.sendEmail(mail_host, mail_port, mail_login, mail_password, token.getString("email"), trt.trt("Password_recovery"), html); + } catch (Exception ex) { + String uuid = UUID.randomUUID().toString(); + logger.error(uuid, ex); + return createStrJSONError(10000,trt.trt("Failed_send_mail_to_s"), token.getString("email"),uuid); + } + } catch (Exception e) { String uuid = UUID.randomUUID().toString(); - logger.error(uuid, ex); - return createStrJSONError(10000,trt.trt("Failed_send_mail_to_s"), token.getString("email"),uuid); + logger.error(uuid,e); + return createStrJSONError(10000,trt.trt("Internal_Server_Error"), (String)null,uuid); } return createStrJSONError(0, trt.trt("A_recovery_link_has_been_sent_to_your_email"),(String)null,(String)null); } @@ -1464,9 +1499,10 @@ public class MainController implements ServletContextAware { Translation trt = new Translation(language_id,jdbcTemplate); JSONObject json = new JSONObject(); - json.put("error_code",0); - json.put("error_message",""); try { + json.put("error_code",0); + json.put("error_message",""); + if(update==null) throw new CustomException(10000,trt.trt("Please_send_a_valid_JSON_string_in_your_request"),null); if(update.getLogin().equals("")) @@ -1547,6 +1583,10 @@ public class MainController implements ServletContextAware { } catch (CustomException e) { json = e.getJson(); + } catch (Exception e) { + String uuid = UUID.randomUUID().toString(); + logger.error(uuid,e); + return createStrJSONError(10000,trt.trt("Internal_Server_Error"), (String)null,uuid); } finally { } return json.toString(); @@ -1560,7 +1600,7 @@ public class MainController implements ServletContextAware { if(jwt_a.equals("") || countOccurrences(jwt_a, '.')!=2) { - return createStrJSONError(10000,trt.trt("Please_send_a_valid_JWT_token"),(String)null,(String)null); + return createStrJSONError(10000,trt.trt("Please_log_in"),(String)null,(String)null); } //Connection conn = getConnection(); //Checking the token signature diff --git a/src/main/java/org/ccalm/jwt/tools/CustomException.java b/src/main/java/org/ccalm/jwt/tools/CustomException.java index 5c7612c..2cfcba7 100644 --- a/src/main/java/org/ccalm/jwt/tools/CustomException.java +++ b/src/main/java/org/ccalm/jwt/tools/CustomException.java @@ -1,11 +1,15 @@ package org.ccalm.jwt.tools; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.json.JSONException; import org.json.JSONObject; import java.util.Arrays; import java.util.List; public class CustomException extends Exception { + private static final Logger logger = LogManager.getLogger(CustomException.class); private int errorCode; private String marker; private List errorMessages; @@ -59,10 +63,14 @@ public class CustomException extends Exception { public JSONObject getJson() { JSONObject json = new JSONObject(); - json.put("error_code", this.getErrorCode()); - json.put("error_message", this.getErrorMessages()); - json.put("error_setting", this.getErrorSettings()); - json.put("error_marker", this.getErrorMarker()); + try { + json.put("error_code", this.getErrorCode()); + json.put("error_message", this.getErrorMessages()); + json.put("error_setting", this.getErrorSettings()); + json.put("error_marker", this.getErrorMarker()); + } catch (JSONException e) { + logger.error("Error", e); + } return json; } } diff --git a/src/main/java/org/ccalm/jwt/tools/Storage.java b/src/main/java/org/ccalm/jwt/tools/Storage.java index 95a2857..22792bb 100644 --- a/src/main/java/org/ccalm/jwt/tools/Storage.java +++ b/src/main/java/org/ccalm/jwt/tools/Storage.java @@ -80,6 +80,8 @@ public class Storage implements AutoCloseable { } } catch (SQLException e) { logger.error("An error occurred", e); + } catch (Exception e) { + logger.error("An error occurred", e); } return result; } diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 99d4074..600f29d 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -25,9 +25,11 @@ - + + + diff --git a/update_password.py b/update_password.py new file mode 100644 index 0000000..f0ceb1d --- /dev/null +++ b/update_password.py @@ -0,0 +1,110 @@ +import psycopg2 +import re +import yaml + +def generate_password(length=8): + # Определяем возможные символы для разных категорий + lower_case = string.ascii_lowercase + upper_case = string.ascii_uppercase + digits = string.digits + special_characters = string.punctuation + + # Гарантируем, что в пароле будет хотя бы один символ каждого типа + password = [ + secrets.choice(lower_case), # строчная буква + secrets.choice(upper_case), # заглавная буква + secrets.choice(digits), # цифра + secrets.choice(special_characters) # спецсимвол + ] + + # Заполняем оставшиеся символы случайными из всех категорий + all_characters = lower_case + upper_case + digits + special_characters + password += [secrets.choice(all_characters) for _ in range(length - 4)] + + # Перемешиваем полученные символы + secrets.SystemRandom().shuffle(password) + + # Собираем строку из символов и возвращаем + return ''.join(password) + +# Функция для чтения конфигурации из YAML файла +def get_configurations(properties_file): + with open(properties_file, 'r') as file: + config = yaml.safe_load(file) # Чтение YAML файла + + # Извлекаем данные из конфигурации + db_url = config.get('spring', {}).get('datasource', {}).get('url', '') + db_user = config.get('spring', {}).get('datasource', {}).get('username', '') + current_password = config.get('spring', {}).get('datasource', {}).get('password', '') + + # Разбираем URL для получения host, port, и dbname + match = re.match(r'jdbc:postgresql://([^:]+):(\d+)/([^?]+)', db_url) + if match: + db_host = match.group(1) + db_port = match.group(2) + db_name = match.group(3) + else: + raise ValueError("Database URL is invalid in the properties file.") + + return db_host, db_port, db_name, db_user, current_password + +# Функция для обновления пароля в файле конфигурации +def update_password_in_file(properties_file, current_password, new_password): + with open(properties_file, 'r') as file: + content = file.read() + + # Заменяем старый пароль на новый + updated_content = re.sub(rf'spring.datasource.password={current_password}', f'spring.datasource.password={new_password}', content) + + with open(properties_file, 'w') as file: + file.write(updated_content) + +# Основная функция для смены пароля в PostgreSQL +def change_postgresql_password(db_host, db_port, db_name, db_user, current_password, new_password): + try: + # Подключаемся к PostgreSQL с использованием старого пароля + conn = psycopg2.connect( + dbname=db_name, + user=db_user, + password=current_password, + host=db_host, + port=db_port + ) + conn.autocommit = True + + # Создаем курсор для выполнения SQL-запроса + cursor = conn.cursor() + + # Запрос для изменения пароля пользователя + cursor.execute(f"ALTER USER {db_user} WITH PASSWORD '{new_password}';") + + cursor.close() + conn.close() + + print(f"Password for user {db_user} successfully changed.") + except Exception as e: + print(f"Error changing password in PostgreSQL: {e}") + return False + return True + +# Главная логика скрипта +def main(): + # Путь к файлу конфигурации Spring Boot + properties_file = "application.yml" + + # Получаем данные из файла конфигурации + db_host, db_port, db_name, db_user, current_password = get_configurations(properties_file) + + # Новый пароль + new_password = generate_password() # Укажите новый пароль здесь + + # Меняем пароль в PostgreSQL + if change_postgresql_password(db_host, db_port, db_name, db_user, current_password, new_password): + # Обновляем пароль в файле конфигурации + update_password_in_file(properties_file, current_password, new_password) + print(f"Password updated successfully in {properties_file}.") + else: + print("Password change failed.") + +if __name__ == "__main__": + main()