Compare commits

...

51 Commits

Author SHA1 Message Date
868398e13d JK 2025-10-28 20:49:41 +07:00
da92bc04d1 JK 2025-10-28 20:35:30 +07:00
5115272eba JK 2025-10-28 20:29:01 +07:00
bfd76cca85 JK 2025-10-28 20:25:54 +07:00
1fdb849818 JK 2025-10-28 20:11:04 +07:00
de550c12ec JK 2025-10-28 18:33:31 +07:00
1e13301dad JK 2025-10-28 18:28:53 +07:00
7d60224421 JK 2025-10-28 16:40:17 +07:00
af82dcd41e JK & Update test 2025-10-28 16:21:26 +07:00
be1b491c80 JK 2025-10-28 15:49:52 +07:00
0d6b498cd2 JK 2025-10-28 15:44:29 +07:00
af0ac14aca JK 2025-10-28 15:42:29 +07:00
0674e0b782 JK 2025-10-28 15:37:14 +07:00
3ff7f9d60a JK 2025-10-28 14:03:00 +07:00
f30aea63bf JK 2025-10-28 13:57:03 +07:00
8979615809 JK 2025-10-28 13:54:54 +07:00
666622efb6 JK 2025-10-28 13:18:40 +07:00
f962a76419 JK 2025-10-28 13:16:53 +07:00
c4659b5caa JK 2025-10-28 13:07:28 +07:00
a01cb08985 JK 2025-10-28 00:49:59 +07:00
d408523931 JK 2025-10-28 00:36:10 +07:00
66afb7174c JK 2025-10-28 00:27:55 +07:00
b89f8d9ea8 JK 2025-10-27 23:25:17 +07:00
a96e4c8644 JK 2025-10-27 23:18:38 +07:00
fef65d1cf8 JK 2025-10-27 23:01:50 +07:00
2f161ab232 JK 2025-10-27 22:59:05 +07:00
0a1a34a3d0 New JK 2025-10-27 22:47:50 +07:00
21a8d56a56 JK 2025-10-27 22:03:46 +07:00
80c22cb914 JK 2025-10-27 21:57:21 +07:00
efb448970a New JK 2025-10-27 21:48:23 +07:00
161394e3a1 JK 2025-10-27 10:26:11 +07:00
1bbf44559a JK 2025-10-25 22:55:20 +07:00
f6502ba50e JK 2025-10-25 22:47:24 +07:00
5b0a74c614 JK 2025-10-25 22:26:12 +07:00
a9b837a962 JK 2025-10-25 22:25:21 +07:00
fa4dadc8ba JK 2025-10-25 21:52:18 +07:00
4fe54e8bc7 JK 2025-10-24 22:04:07 +07:00
9c38937e02 JK 2025-10-21 15:27:54 +07:00
20933ec47c JK 2025-10-21 12:53:09 +07:00
0a831496f9 JK 2025-10-21 12:44:33 +07:00
2c5c9ea7d0 JK 2025-10-21 12:32:06 +07:00
7d4eb20aa9 JK 2025-10-21 12:20:07 +07:00
23eb4b7b4a JK 2025-10-21 12:12:52 +07:00
7ade39e07f Update JK 2025-10-21 11:58:26 +07:00
753319a08b Update JK 2025-10-21 11:54:44 +07:00
5df9aede66 Update JK 2025-10-21 08:35:51 +07:00
b02408abc0 Update JK 2025-10-21 08:16:01 +07:00
dfefde15d3 Update JK, Test configure 2025-10-21 08:09:21 +07:00
ef87a18c78 Update JK 2025-10-21 08:03:24 +07:00
7a01e8f36e Update JK 2025-10-21 00:30:32 +07:00
3e0eaa142b Update Jenkinsfile to local 2025-10-21 00:08:03 +07:00
25 changed files with 901 additions and 10604 deletions

View File

@ -1,35 +0,0 @@
/workspaces/AS400API/Auth/AuthPolicies.cs
/workspaces/AS400API/Auth/DemoUser.cs
/workspaces/AS400API/Auth/DemoUserStore.cs
/workspaces/AS400API/Auth/LoginRequest.cs
/workspaces/AS400API/Auth/LoginResponse.cs
/workspaces/AS400API/Auth/PasswordHasher.cs
/workspaces/AS400API/Auth/Roles.cs
/workspaces/AS400API/Auth/TokenService.cs
/workspaces/AS400API/Configuration/JwtOptions.cs
/workspaces/AS400API/Configuration/OdbcOptions.cs
/workspaces/AS400API/Endpoints/As400Endpoints.cs
/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs
/workspaces/AS400API/Endpoints/AuthEndpoints.cs
/workspaces/AS400API/Endpoints/SystemEndpoints.cs
/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs
/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs
/workspaces/AS400API/Program.cs
/workspaces/AS400API/obj/Debug/net9.0/AS400API.GlobalUsings.g.cs
/workspaces/AS400API/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs
/workspaces/AS400API/obj/Debug/net9.0/AS400API.AssemblyInfo.cs
/workspaces/AS400API/obj/Debug/net9.0/AS400API.MvcApplicationPartsAssemblyInfo.cs
/workspaces/AS400API/appsettings.json
/workspaces/AS400API/.dockerignore
/workspaces/AS400API/docker-compose.yml
/workspaces/AS400API/docker/odbc/odbc.ini
/workspaces/AS400API/docker/odbc/odbcinst.ini
/workspaces/AS400API/Dockerfile
/workspaces/AS400API/drivers/ibm-iaccess-1.1.0.28-1.0.x86_64.rpm
/workspaces/AS400API/Logs/as400-api-20251001.log
/workspaces/AS400API/Logs/as400-api-20251002.log
/workspaces/AS400API/Logs/as400-api-20251003.log
/workspaces/AS400API/Logs/as400-api-20251004.log
/workspaces/AS400API/README.md
/workspaces/AS400API/scripts/run-sonar.sh
/workspaces/AS400API/scripts/test-databases.sh

View File

@ -1,410 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RuleSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
<Rules AnalyzerId="SonarScannerFor.NET" RuleNamespace="SonarScannerFor.NET">
<Rule Id="DuplicatedBlocks" Action="None" />
<Rule Id="FailedUnitTests" Action="None" />
<Rule Id="SkippedUnitTests" Action="None" />
<Rule Id="InsufficientBranchCoverage" Action="None" />
<Rule Id="InsufficientCommentDensity" Action="None" />
<Rule Id="InsufficientLineCoverage" Action="None" />
<Rule Id="S2225" Action="None" />
<Rule Id="S2346" Action="None" />
<Rule Id="S2223" Action="None" />
<Rule Id="S2344" Action="None" />
<Rule Id="S2589" Action="None" />
<Rule Id="S3433" Action="None" />
<Rule Id="S1134" Action="None" />
<Rule Id="S1135" Action="None" />
<Rule Id="S2345" Action="None" />
<Rule Id="S4524" Action="None" />
<Rule Id="S2342" Action="None" />
<Rule Id="S3431" Action="None" />
<Rule Id="S2221" Action="None" />
<Rule Id="S2222" Action="None" />
<Rule Id="S2228" Action="None" />
<Rule Id="S2583" Action="None" />
<Rule Id="S1147" Action="None" />
<Rule Id="S2115" Action="None" />
<Rule Id="S2357" Action="None" />
<Rule Id="S3447" Action="None" />
<Rule Id="S2234" Action="None" />
<Rule Id="S2479" Action="None" />
<Rule Id="S3444" Action="None" />
<Rule Id="S3445" Action="None" />
<Rule Id="S1144" Action="None" />
<Rule Id="S1264" Action="None" />
<Rule Id="S2114" Action="None" />
<Rule Id="S3442" Action="None" />
<Rule Id="S3440" Action="None" />
<Rule Id="S3441" Action="None" />
<Rule Id="S3443" Action="None" />
<Rule Id="S881" Action="None" />
<Rule Id="S3329" Action="None" />
<Rule Id="S3449" Action="None" />
<Rule Id="S3655" Action="None" />
<Rule Id="S3776" Action="None" />
<Rule Id="S2325" Action="None" />
<Rule Id="S2688" Action="None" />
<Rule Id="S3897" Action="None" />
<Rule Id="S3898" Action="None" />
<Rule Id="S1110" Action="None" />
<Rule Id="S2201" Action="None" />
<Rule Id="S3532" Action="None" />
<Rule Id="S4502" Action="None" />
<Rule Id="S1118" Action="None" />
<Rule Id="S2328" Action="None" />
<Rule Id="S2681" Action="None" />
<Rule Id="S1117" Action="None" />
<Rule Id="S2326" Action="None" />
<Rule Id="S3415" Action="None" />
<Rule Id="S4507" Action="None" />
<Rule Id="S1116" Action="None" />
<Rule Id="S1479" Action="None" />
<Rule Id="S2327" Action="None" />
<Rule Id="S2699" Action="None" />
<Rule Id="S1125" Action="None" />
<Rule Id="S2333" Action="None" />
<Rule Id="S2696" Action="None" />
<Rule Id="S4635" Action="None" />
<Rule Id="S1121" Action="None" />
<Rule Id="S1123" Action="None" />
<Rule Id="S1244" Action="None" />
<Rule Id="S2219" Action="None" />
<Rule Id="S2330" Action="None" />
<Rule Id="S2339" Action="None" />
<Rule Id="S2692" Action="None" />
<Rule Id="S1006" Action="None" />
<Rule Id="S1128" Action="None" />
<Rule Id="S1481" Action="None" />
<Rule Id="S3427" Action="None" />
<Rule Id="S2148" Action="None" />
<Rule Id="S3237" Action="None" />
<Rule Id="S3358" Action="None" />
<Rule Id="S3598" Action="None" />
<Rule Id="S3235" Action="None" />
<Rule Id="S3236" Action="None" />
<Rule Id="S5773" Action="None" />
<Rule Id="S2386" Action="None" />
<Rule Id="S3234" Action="None" />
<Rule Id="S3597" Action="None" />
<Rule Id="S4200" Action="None" />
<Rule Id="S2387" Action="None" />
<Rule Id="S3353" Action="None" />
<Rule Id="S4201" Action="None" />
<Rule Id="S4564" Action="None" />
<Rule Id="S1172" Action="None" />
<Rule Id="S4457" Action="None" />
<Rule Id="S5659" Action="None" />
<Rule Id="S3249" Action="None" />
<Rule Id="S4214" Action="None" />
<Rule Id="S4456" Action="None" />
<Rule Id="S3005" Action="None" />
<Rule Id="S3246" Action="None" />
<Rule Id="S3247" Action="None" />
<Rule Id="S4211" Action="None" />
<Rule Id="S5547" Action="None" />
<Rule Id="S1067" Action="None" />
<Rule Id="S3244" Action="None" />
<Rule Id="S3366" Action="None" />
<Rule Id="S5542" Action="None" />
<Rule Id="S1066" Action="None" />
<Rule Id="S1186" Action="None" />
<Rule Id="S2156" Action="None" />
<Rule Id="S3242" Action="None" />
<Rule Id="S4210" Action="None" />
<Rule Id="S1185" Action="None" />
<Rule Id="S2275" Action="None" />
<Rule Id="S3240" Action="None" />
<Rule Id="S3241" Action="None" />
<Rule Id="S4212" Action="None" />
<Rule Id="S2368" Action="None" />
<Rule Id="S3215" Action="None" />
<Rule Id="S3457" Action="None" />
<Rule Id="S4423" Action="None" />
<Rule Id="S4787" Action="None" />
<Rule Id="S1155" Action="None" />
<Rule Id="S2245" Action="None" />
<Rule Id="S3216" Action="None" />
<Rule Id="S3456" Action="None" />
<Rule Id="S3458" Action="None" />
<Rule Id="S4426" Action="None" />
<Rule Id="S2123" Action="None" />
<Rule Id="S2365" Action="None" />
<Rule Id="S2486" Action="None" />
<Rule Id="S3453" Action="None" />
<Rule Id="S3330" Action="None" />
<Rule Id="S3451" Action="None" />
<Rule Id="S5753" Action="None" />
<Rule Id="S3217" Action="None" />
<Rule Id="S3459" Action="None" />
<Rule Id="S4428" Action="None" />
<Rule Id="S4784" Action="None" />
<Rule Id="S1151" Action="None" />
<Rule Id="S2360" Action="None" />
<Rule Id="S3218" Action="None" />
<Rule Id="S927" Action="None" />
<Rule Id="S2259" Action="None" />
<Rule Id="S3450" Action="None" />
<Rule Id="S5766" Action="None" />
<Rule Id="S1048" Action="None" />
<Rule Id="S1168" Action="None" />
<Rule Id="S2257" Action="None" />
<Rule Id="S3466" Action="None" />
<Rule Id="S2376" Action="None" />
<Rule Id="S3343" Action="None" />
<Rule Id="S3346" Action="None" />
<Rule Id="S3464" Action="None" />
<Rule Id="S2252" Action="None" />
<Rule Id="S2255" Action="None" />
<Rule Id="S3220" Action="None" />
<Rule Id="S4433" Action="None" />
<Rule Id="S1163" Action="None" />
<Rule Id="S4790" Action="None" />
<Rule Id="S818" Action="None" />
<Rule Id="S2251" Action="None" />
<Rule Id="S2372" Action="None" />
<Rule Id="S4792" Action="None" />
<Rule Id="S1659" Action="None" />
<Rule Id="S2743" Action="None" />
<Rule Id="S3717" Action="None" />
<Rule Id="S1656" Action="None" />
<Rule Id="S3956" Action="None" />
<Rule Id="S907" Action="None" />
<Rule Id="S2995" Action="None" />
<Rule Id="S3600" Action="None" />
<Rule Id="S3963" Action="None" />
<Rule Id="S1301" Action="None" />
<Rule Id="S2996" Action="None" />
<Rule Id="S3962" Action="None" />
<Rule Id="S1309" Action="None" />
<Rule Id="S1541" Action="None" />
<Rule Id="S2757" Action="None" />
<Rule Id="S4818" Action="None" />
<Rule Id="S2755" Action="None" />
<Rule Id="S2997" Action="None" />
<Rule Id="S3604" Action="None" />
<Rule Id="S3967" Action="None" />
<Rule Id="S1751" Action="None" />
<Rule Id="S1994" Action="None" />
<Rule Id="S3603" Action="None" />
<Rule Id="S3966" Action="None" />
<Rule Id="S1643" Action="None" />
<Rule Id="S1871" Action="None" />
<Rule Id="S3937" Action="None" />
<Rule Id="S1764" Action="None" />
<Rule Id="S2737" Action="None" />
<Rule Id="S2971" Action="None" />
<Rule Id="S3949" Action="None" />
<Rule Id="S1698" Action="None" />
<Rule Id="S2612" Action="None" />
<Rule Id="S2857" Action="None" />
<Rule Id="S3996" Action="None" />
<Rule Id="S2302" Action="None" />
<Rule Id="S3875" Action="None" />
<Rule Id="S3997" Action="None" />
<Rule Id="S1696" Action="None" />
<Rule Id="S3876" Action="None" />
<Rule Id="S3994" Action="None" />
<Rule Id="S3995" Action="None" />
<Rule Id="S1210" Action="None" />
<Rule Id="S3871" Action="None" />
<Rule Id="S3874" Action="None" />
<Rule Id="S3992" Action="None" />
<Rule Id="S1451" Action="None" />
<Rule Id="S1694" Action="None" />
<Rule Id="S3872" Action="None" />
<Rule Id="S3993" Action="None" />
<Rule Id="S1450" Action="None" />
<Rule Id="S2306" Action="None" />
<Rule Id="S3877" Action="None" />
<Rule Id="S3990" Action="None" />
<Rule Id="S1104" Action="None" />
<Rule Id="S1215" Action="None" />
<Rule Id="S1699" Action="None" />
<Rule Id="S3998" Action="None" />
<Rule Id="S2674" Action="None" />
<Rule Id="S3400" Action="None" />
<Rule Id="S3884" Action="None" />
<Rule Id="S3887" Action="None" />
<Rule Id="S2551" Action="None" />
<Rule Id="S3880" Action="None" />
<Rule Id="S3885" Action="None" />
<Rule Id="S1109" Action="None" />
<Rule Id="S1227" Action="None" />
<Rule Id="S2436" Action="None" />
<Rule Id="S3881" Action="None" />
<Rule Id="S1226" Action="None" />
<Rule Id="S2437" Action="None" />
<Rule Id="S3889" Action="None" />
<Rule Id="S1313" Action="None" />
<Rule Id="S3610" Action="None" />
<Rule Id="S3972" Action="None" />
<Rule Id="S3973" Action="None" />
<Rule Id="S2760" Action="None" />
<Rule Id="S2761" Action="None" />
<Rule Id="S3971" Action="None" />
<Rule Id="S3984" Action="None" />
<Rule Id="S4823" Action="None" />
<Rule Id="S4829" Action="None" />
<Rule Id="S4830" Action="None" />
<Rule Id="S1200" Action="None" />
<Rule Id="S3981" Action="None" />
<Rule Id="S1449" Action="None" />
<Rule Id="S1206" Action="None" />
<Rule Id="S3626" Action="None" />
<Rule Id="S3869" Action="None" />
<Rule Id="S4834" Action="None" />
<Rule Id="S1821" Action="None" />
<Rule Id="S1940" Action="None" />
<Rule Id="S1944" Action="None" />
<Rule Id="S1905" Action="None" />
<Rule Id="S1939" Action="None" />
<Rule Id="S4069" Action="None" />
<Rule Id="S5034" Action="None" />
<Rule Id="S4060" Action="None" />
<Rule Id="S4061" Action="None" />
<Rule Id="S5042" Action="None" />
<Rule Id="S1854" Action="None" />
<Rule Id="S1858" Action="None" />
<Rule Id="S2701" Action="None" />
<Rule Id="S4070" Action="None" />
<Rule Id="S2952" Action="None" />
<Rule Id="S3908" Action="None" />
<Rule Id="S3909" Action="None" />
<Rule Id="S1862" Action="None" />
<Rule Id="S3927" Action="None" />
<Rule Id="S3928" Action="None" />
<Rule Id="S2955" Action="None" />
<Rule Id="S3925" Action="None" />
<Rule Id="S3926" Action="None" />
<Rule Id="S131" Action="None" />
<Rule Id="S2953" Action="None" />
<Rule Id="S3923" Action="None" />
<Rule Id="S125" Action="None" />
<Rule Id="S127" Action="None" />
<Rule Id="S134" Action="None" />
<Rule Id="S126" Action="None" />
<Rule Id="S1607" Action="None" />
<Rule Id="S1848" Action="None" />
<Rule Id="S2930" Action="None" />
<Rule Id="S3903" Action="None" />
<Rule Id="S3904" Action="None" />
<Rule Id="S3906" Action="None" />
<Rule Id="S2931" Action="None" />
<Rule Id="S2933" Action="None" />
<Rule Id="S2934" Action="None" />
<Rule Id="S3902" Action="None" />
<Rule Id="S138" Action="None" />
<Rule Id="S3900" Action="None" />
<Rule Id="S4005" Action="None" />
<Rule Id="S6422" Action="None" />
<Rule Id="S110" Action="None" />
<Rule Id="S2068" Action="None" />
<Rule Id="S4004" Action="None" />
<Rule Id="S5332" Action="None" />
<Rule Id="S6421" Action="None" />
<Rule Id="S112" Action="None" />
<Rule Id="S2187" Action="None" />
<Rule Id="S4487" Action="None" />
<Rule Id="S6424" Action="None" />
<Rule Id="S3397" Action="None" />
<Rule Id="S4002" Action="None" />
<Rule Id="S6423" Action="None" />
<Rule Id="S103" Action="None" />
<Rule Id="S2184" Action="None" />
<Rule Id="S4000" Action="None" />
<Rule Id="S104" Action="None" />
<Rule Id="S105" Action="None" />
<Rule Id="S5693" Action="None" />
<Rule Id="S6420" Action="None" />
<Rule Id="S106" Action="None" />
<Rule Id="S107" Action="None" />
<Rule Id="S2183" Action="None" />
<Rule Id="S108" Action="None" />
<Rule Id="S109" Action="None" />
<Rule Id="S4018" Action="None" />
<Rule Id="S4019" Action="None" />
<Rule Id="S3169" Action="None" />
<Rule Id="S4016" Action="None" />
<Rule Id="S4017" Action="None" />
<Rule Id="S121" Action="None" />
<Rule Id="S3168" Action="None" />
<Rule Id="S4015" Action="None" />
<Rule Id="S122" Action="None" />
<Rule Id="S2197" Action="None" />
<Rule Id="S4136" Action="None" />
<Rule Id="S113" Action="None" />
<Rule Id="S2077" Action="None" />
<Rule Id="S2190" Action="None" />
<Rule Id="S4226" Action="None" />
<Rule Id="S1199" Action="None" />
<Rule Id="S3257" Action="None" />
<Rule Id="S3376" Action="None" />
<Rule Id="S4225" Action="None" />
<Rule Id="S1075" Action="None" />
<Rule Id="S3011" Action="None" />
<Rule Id="S3253" Action="None" />
<Rule Id="S3256" Action="None" />
<Rule Id="S3254" Action="None" />
<Rule Id="S4581" Action="None" />
<Rule Id="S4586" Action="None" />
<Rule Id="S3010" Action="None" />
<Rule Id="S3251" Action="None" />
<Rule Id="S4220" Action="None" />
<Rule Id="S4462" Action="None" />
<Rule Id="S1192" Action="None" />
<Rule Id="S4583" Action="None" />
<Rule Id="S5443" Action="None" />
<Rule Id="S2178" Action="None" />
<Rule Id="S3264" Action="None" />
<Rule Id="S3267" Action="None" />
<Rule Id="S101" Action="None" />
<Rule Id="S5445" Action="None" />
<Rule Id="S100" Action="None" />
<Rule Id="S3262" Action="None" />
<Rule Id="S3265" Action="None" />
<Rule Id="S6419" Action="None" />
<Rule Id="S2053" Action="None" />
<Rule Id="S2292" Action="None" />
<Rule Id="S3263" Action="None" />
<Rule Id="S3260" Action="None" />
<Rule Id="S3261" Action="None" />
<Rule Id="S2290" Action="None" />
<Rule Id="S2291" Action="None" />
<Rule Id="S4047" Action="None" />
<Rule Id="S4049" Action="None" />
<Rule Id="S4040" Action="None" />
<Rule Id="S4041" Action="None" />
<Rule Id="S4058" Action="None" />
<Rule Id="S4059" Action="None" />
<Rule Id="S4055" Action="None" />
<Rule Id="S4056" Action="None" />
<Rule Id="S4057" Action="None" />
<Rule Id="S4050" Action="None" />
<Rule Id="S4052" Action="None" />
<Rule Id="S6354" Action="None" />
<Rule Id="S3059" Action="None" />
<Rule Id="S4027" Action="None" />
<Rule Id="S6444" Action="None" />
<Rule Id="S4023" Action="None" />
<Rule Id="S4025" Action="None" />
<Rule Id="S4026" Action="None" />
<Rule Id="S4144" Action="None" />
<Rule Id="S4022" Action="None" />
<Rule Id="S4143" Action="None" />
<Rule Id="S4261" Action="None" />
<Rule Id="S3052" Action="None" />
<Rule Id="S3172" Action="None" />
<Rule Id="S4159" Action="None" />
<Rule Id="S4260" Action="None" />
<Rule Id="S4036" Action="None" />
<Rule Id="S4039" Action="None" />
<Rule Id="S4277" Action="None" />
<Rule Id="S4035" Action="None" />
<Rule Id="S4158" Action="None" />
<Rule Id="S4275" Action="None" />
<Rule Id="S2092" Action="None" />
<Rule Id="S3060" Action="None" />
<Rule Id="S5122" Action="None" />
</Rules>
</RuleSet>

View File

@ -1,410 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RuleSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
<Rules AnalyzerId="SonarScannerFor.NET" RuleNamespace="SonarScannerFor.NET">
<Rule Id="DuplicatedBlocks" Action="None" />
<Rule Id="FailedUnitTests" Action="None" />
<Rule Id="SkippedUnitTests" Action="None" />
<Rule Id="InsufficientBranchCoverage" Action="None" />
<Rule Id="InsufficientCommentDensity" Action="None" />
<Rule Id="InsufficientLineCoverage" Action="None" />
<Rule Id="S2225" Action="Warning" />
<Rule Id="S2346" Action="Warning" />
<Rule Id="S2223" Action="Warning" />
<Rule Id="S2344" Action="Warning" />
<Rule Id="S2589" Action="Warning" />
<Rule Id="S3433" Action="Warning" />
<Rule Id="S1134" Action="Warning" />
<Rule Id="S1135" Action="Warning" />
<Rule Id="S2345" Action="Warning" />
<Rule Id="S4524" Action="Warning" />
<Rule Id="S2342" Action="Warning" />
<Rule Id="S3431" Action="None" />
<Rule Id="S2221" Action="None" />
<Rule Id="S2222" Action="Warning" />
<Rule Id="S2228" Action="None" />
<Rule Id="S2583" Action="Warning" />
<Rule Id="S1147" Action="None" />
<Rule Id="S2115" Action="Warning" />
<Rule Id="S2357" Action="None" />
<Rule Id="S3447" Action="Warning" />
<Rule Id="S2234" Action="Warning" />
<Rule Id="S2479" Action="Warning" />
<Rule Id="S3444" Action="Warning" />
<Rule Id="S3445" Action="Warning" />
<Rule Id="S1144" Action="Warning" />
<Rule Id="S1264" Action="Warning" />
<Rule Id="S2114" Action="Warning" />
<Rule Id="S3442" Action="Warning" />
<Rule Id="S3440" Action="Warning" />
<Rule Id="S3441" Action="None" />
<Rule Id="S3443" Action="Warning" />
<Rule Id="S881" Action="None" />
<Rule Id="S3329" Action="Warning" />
<Rule Id="S3449" Action="Warning" />
<Rule Id="S3655" Action="Warning" />
<Rule Id="S3776" Action="Warning" />
<Rule Id="S2325" Action="None" />
<Rule Id="S2688" Action="Warning" />
<Rule Id="S3897" Action="Warning" />
<Rule Id="S3898" Action="None" />
<Rule Id="S1110" Action="Warning" />
<Rule Id="S2201" Action="Warning" />
<Rule Id="S3532" Action="None" />
<Rule Id="S4502" Action="Warning" />
<Rule Id="S1118" Action="Warning" />
<Rule Id="S2328" Action="Warning" />
<Rule Id="S2681" Action="Warning" />
<Rule Id="S1117" Action="Warning" />
<Rule Id="S2326" Action="Warning" />
<Rule Id="S3415" Action="Warning" />
<Rule Id="S4507" Action="Warning" />
<Rule Id="S1116" Action="Warning" />
<Rule Id="S1479" Action="Warning" />
<Rule Id="S2327" Action="None" />
<Rule Id="S2699" Action="Warning" />
<Rule Id="S1125" Action="Warning" />
<Rule Id="S2333" Action="None" />
<Rule Id="S2696" Action="Warning" />
<Rule Id="S4635" Action="Warning" />
<Rule Id="S1121" Action="Warning" />
<Rule Id="S1123" Action="Warning" />
<Rule Id="S1244" Action="None" />
<Rule Id="S2219" Action="Warning" />
<Rule Id="S2330" Action="None" />
<Rule Id="S2339" Action="None" />
<Rule Id="S2692" Action="Warning" />
<Rule Id="S1006" Action="Warning" />
<Rule Id="S1128" Action="None" />
<Rule Id="S1481" Action="Warning" />
<Rule Id="S3427" Action="Warning" />
<Rule Id="S2148" Action="None" />
<Rule Id="S3237" Action="Warning" />
<Rule Id="S3358" Action="Warning" />
<Rule Id="S3598" Action="Warning" />
<Rule Id="S3235" Action="None" />
<Rule Id="S3236" Action="Warning" />
<Rule Id="S5773" Action="Warning" />
<Rule Id="S2386" Action="Warning" />
<Rule Id="S3234" Action="None" />
<Rule Id="S3597" Action="Warning" />
<Rule Id="S4200" Action="Warning" />
<Rule Id="S2387" Action="None" />
<Rule Id="S3353" Action="None" />
<Rule Id="S4201" Action="Warning" />
<Rule Id="S4564" Action="None" />
<Rule Id="S1172" Action="Warning" />
<Rule Id="S4457" Action="Warning" />
<Rule Id="S5659" Action="Warning" />
<Rule Id="S3249" Action="Warning" />
<Rule Id="S4214" Action="None" />
<Rule Id="S4456" Action="Warning" />
<Rule Id="S3005" Action="Warning" />
<Rule Id="S3246" Action="Warning" />
<Rule Id="S3247" Action="Warning" />
<Rule Id="S4211" Action="Warning" />
<Rule Id="S5547" Action="Warning" />
<Rule Id="S1067" Action="None" />
<Rule Id="S3244" Action="Warning" />
<Rule Id="S3366" Action="None" />
<Rule Id="S5542" Action="Warning" />
<Rule Id="S1066" Action="Warning" />
<Rule Id="S1186" Action="Warning" />
<Rule Id="S2156" Action="None" />
<Rule Id="S3242" Action="None" />
<Rule Id="S4210" Action="Warning" />
<Rule Id="S1185" Action="Warning" />
<Rule Id="S2275" Action="Warning" />
<Rule Id="S3240" Action="None" />
<Rule Id="S3241" Action="Warning" />
<Rule Id="S4212" Action="None" />
<Rule Id="S2368" Action="Warning" />
<Rule Id="S3215" Action="None" />
<Rule Id="S3457" Action="Warning" />
<Rule Id="S4423" Action="Warning" />
<Rule Id="S4787" Action="None" />
<Rule Id="S1155" Action="Warning" />
<Rule Id="S2245" Action="Warning" />
<Rule Id="S3216" Action="None" />
<Rule Id="S3456" Action="Warning" />
<Rule Id="S3458" Action="Warning" />
<Rule Id="S4426" Action="Warning" />
<Rule Id="S2123" Action="Warning" />
<Rule Id="S2365" Action="Warning" />
<Rule Id="S2486" Action="Warning" />
<Rule Id="S3453" Action="Warning" />
<Rule Id="S3330" Action="Warning" />
<Rule Id="S3451" Action="Warning" />
<Rule Id="S5753" Action="Warning" />
<Rule Id="S3217" Action="Warning" />
<Rule Id="S3459" Action="Warning" />
<Rule Id="S4428" Action="Warning" />
<Rule Id="S4784" Action="None" />
<Rule Id="S1151" Action="None" />
<Rule Id="S2360" Action="None" />
<Rule Id="S3218" Action="Warning" />
<Rule Id="S927" Action="Warning" />
<Rule Id="S2259" Action="Warning" />
<Rule Id="S3450" Action="Warning" />
<Rule Id="S5766" Action="Warning" />
<Rule Id="S1048" Action="Warning" />
<Rule Id="S1168" Action="Warning" />
<Rule Id="S2257" Action="Warning" />
<Rule Id="S3466" Action="Warning" />
<Rule Id="S2376" Action="Warning" />
<Rule Id="S3343" Action="Warning" />
<Rule Id="S3346" Action="Warning" />
<Rule Id="S3464" Action="Warning" />
<Rule Id="S2252" Action="Warning" />
<Rule Id="S2255" Action="None" />
<Rule Id="S3220" Action="Warning" />
<Rule Id="S4433" Action="Warning" />
<Rule Id="S1163" Action="Warning" />
<Rule Id="S4790" Action="Warning" />
<Rule Id="S818" Action="Warning" />
<Rule Id="S2251" Action="Warning" />
<Rule Id="S2372" Action="Warning" />
<Rule Id="S4792" Action="Warning" />
<Rule Id="S1659" Action="None" />
<Rule Id="S2743" Action="Warning" />
<Rule Id="S3717" Action="None" />
<Rule Id="S1656" Action="Warning" />
<Rule Id="S3956" Action="None" />
<Rule Id="S907" Action="Warning" />
<Rule Id="S2995" Action="Warning" />
<Rule Id="S3600" Action="Warning" />
<Rule Id="S3963" Action="Warning" />
<Rule Id="S1301" Action="None" />
<Rule Id="S2996" Action="Warning" />
<Rule Id="S3962" Action="None" />
<Rule Id="S1309" Action="None" />
<Rule Id="S1541" Action="None" />
<Rule Id="S2757" Action="Warning" />
<Rule Id="S4818" Action="None" />
<Rule Id="S2755" Action="Warning" />
<Rule Id="S2997" Action="Warning" />
<Rule Id="S3604" Action="Warning" />
<Rule Id="S3967" Action="None" />
<Rule Id="S1751" Action="Warning" />
<Rule Id="S1994" Action="None" />
<Rule Id="S3603" Action="Warning" />
<Rule Id="S3966" Action="Warning" />
<Rule Id="S1643" Action="Warning" />
<Rule Id="S1871" Action="Warning" />
<Rule Id="S3937" Action="None" />
<Rule Id="S1764" Action="Warning" />
<Rule Id="S2737" Action="Warning" />
<Rule Id="S2971" Action="Warning" />
<Rule Id="S3949" Action="None" />
<Rule Id="S1698" Action="None" />
<Rule Id="S2612" Action="Warning" />
<Rule Id="S2857" Action="Warning" />
<Rule Id="S3996" Action="None" />
<Rule Id="S2302" Action="None" />
<Rule Id="S3875" Action="Warning" />
<Rule Id="S3997" Action="None" />
<Rule Id="S1696" Action="None" />
<Rule Id="S3876" Action="None" />
<Rule Id="S3994" Action="None" />
<Rule Id="S3995" Action="None" />
<Rule Id="S1210" Action="Warning" />
<Rule Id="S3871" Action="Warning" />
<Rule Id="S3874" Action="None" />
<Rule Id="S3992" Action="None" />
<Rule Id="S1451" Action="None" />
<Rule Id="S1694" Action="None" />
<Rule Id="S3872" Action="None" />
<Rule Id="S3993" Action="None" />
<Rule Id="S1450" Action="Warning" />
<Rule Id="S2306" Action="Warning" />
<Rule Id="S3877" Action="Warning" />
<Rule Id="S3990" Action="None" />
<Rule Id="S1104" Action="Warning" />
<Rule Id="S1215" Action="Warning" />
<Rule Id="S1699" Action="Warning" />
<Rule Id="S3998" Action="Warning" />
<Rule Id="S2674" Action="None" />
<Rule Id="S3400" Action="Warning" />
<Rule Id="S3884" Action="Warning" />
<Rule Id="S3887" Action="Warning" />
<Rule Id="S2551" Action="Warning" />
<Rule Id="S3880" Action="None" />
<Rule Id="S3885" Action="Warning" />
<Rule Id="S1109" Action="None" />
<Rule Id="S1227" Action="None" />
<Rule Id="S2436" Action="Warning" />
<Rule Id="S3881" Action="Warning" />
<Rule Id="S1226" Action="None" />
<Rule Id="S2437" Action="Warning" />
<Rule Id="S3889" Action="Warning" />
<Rule Id="S1313" Action="Warning" />
<Rule Id="S3610" Action="Warning" />
<Rule Id="S3972" Action="Warning" />
<Rule Id="S3973" Action="Warning" />
<Rule Id="S2760" Action="None" />
<Rule Id="S2761" Action="Warning" />
<Rule Id="S3971" Action="Warning" />
<Rule Id="S3984" Action="Warning" />
<Rule Id="S4823" Action="None" />
<Rule Id="S4829" Action="None" />
<Rule Id="S4830" Action="Warning" />
<Rule Id="S1200" Action="None" />
<Rule Id="S3981" Action="Warning" />
<Rule Id="S1449" Action="None" />
<Rule Id="S1206" Action="Warning" />
<Rule Id="S3626" Action="Warning" />
<Rule Id="S3869" Action="Warning" />
<Rule Id="S4834" Action="None" />
<Rule Id="S1821" Action="None" />
<Rule Id="S1940" Action="Warning" />
<Rule Id="S1944" Action="Warning" />
<Rule Id="S1905" Action="Warning" />
<Rule Id="S1939" Action="Warning" />
<Rule Id="S4069" Action="None" />
<Rule Id="S5034" Action="Warning" />
<Rule Id="S4060" Action="None" />
<Rule Id="S4061" Action="Warning" />
<Rule Id="S5042" Action="Warning" />
<Rule Id="S1854" Action="Warning" />
<Rule Id="S1858" Action="None" />
<Rule Id="S2701" Action="None" />
<Rule Id="S4070" Action="Warning" />
<Rule Id="S2952" Action="None" />
<Rule Id="S3908" Action="None" />
<Rule Id="S3909" Action="None" />
<Rule Id="S1862" Action="Warning" />
<Rule Id="S3927" Action="Warning" />
<Rule Id="S3928" Action="Warning" />
<Rule Id="S2955" Action="None" />
<Rule Id="S3925" Action="Warning" />
<Rule Id="S3926" Action="Warning" />
<Rule Id="S131" Action="None" />
<Rule Id="S2953" Action="Warning" />
<Rule Id="S3923" Action="Warning" />
<Rule Id="S125" Action="Warning" />
<Rule Id="S127" Action="None" />
<Rule Id="S134" Action="None" />
<Rule Id="S126" Action="None" />
<Rule Id="S1607" Action="Warning" />
<Rule Id="S1848" Action="Warning" />
<Rule Id="S2930" Action="Warning" />
<Rule Id="S3903" Action="Warning" />
<Rule Id="S3904" Action="Warning" />
<Rule Id="S3906" Action="None" />
<Rule Id="S2931" Action="None" />
<Rule Id="S2933" Action="Warning" />
<Rule Id="S2934" Action="Warning" />
<Rule Id="S3902" Action="None" />
<Rule Id="S138" Action="None" />
<Rule Id="S3900" Action="None" />
<Rule Id="S4005" Action="None" />
<Rule Id="S6422" Action="Warning" />
<Rule Id="S110" Action="Warning" />
<Rule Id="S2068" Action="Warning" />
<Rule Id="S4004" Action="None" />
<Rule Id="S5332" Action="Warning" />
<Rule Id="S6421" Action="None" />
<Rule Id="S112" Action="Warning" />
<Rule Id="S2187" Action="Warning" />
<Rule Id="S4487" Action="Warning" />
<Rule Id="S6424" Action="Warning" />
<Rule Id="S3397" Action="Warning" />
<Rule Id="S4002" Action="None" />
<Rule Id="S6423" Action="None" />
<Rule Id="S103" Action="None" />
<Rule Id="S2184" Action="Warning" />
<Rule Id="S4000" Action="None" />
<Rule Id="S104" Action="None" />
<Rule Id="S105" Action="None" />
<Rule Id="S5693" Action="Warning" />
<Rule Id="S6420" Action="Warning" />
<Rule Id="S106" Action="None" />
<Rule Id="S107" Action="Warning" />
<Rule Id="S2183" Action="Warning" />
<Rule Id="S108" Action="Warning" />
<Rule Id="S109" Action="None" />
<Rule Id="S4018" Action="None" />
<Rule Id="S4019" Action="Warning" />
<Rule Id="S3169" Action="Warning" />
<Rule Id="S4016" Action="None" />
<Rule Id="S4017" Action="None" />
<Rule Id="S121" Action="None" />
<Rule Id="S3168" Action="Warning" />
<Rule Id="S4015" Action="Warning" />
<Rule Id="S122" Action="None" />
<Rule Id="S2197" Action="None" />
<Rule Id="S4136" Action="Warning" />
<Rule Id="S113" Action="None" />
<Rule Id="S2077" Action="Warning" />
<Rule Id="S2190" Action="Warning" />
<Rule Id="S4226" Action="None" />
<Rule Id="S1199" Action="Warning" />
<Rule Id="S3257" Action="None" />
<Rule Id="S3376" Action="Warning" />
<Rule Id="S4225" Action="None" />
<Rule Id="S1075" Action="Warning" />
<Rule Id="S3011" Action="Warning" />
<Rule Id="S3253" Action="None" />
<Rule Id="S3256" Action="Warning" />
<Rule Id="S3254" Action="None" />
<Rule Id="S4581" Action="Warning" />
<Rule Id="S4586" Action="Warning" />
<Rule Id="S3010" Action="Warning" />
<Rule Id="S3251" Action="Warning" />
<Rule Id="S4220" Action="Warning" />
<Rule Id="S4462" Action="None" />
<Rule Id="S1192" Action="None" />
<Rule Id="S4583" Action="Warning" />
<Rule Id="S5443" Action="Warning" />
<Rule Id="S2178" Action="Warning" />
<Rule Id="S3264" Action="Warning" />
<Rule Id="S3267" Action="Warning" />
<Rule Id="S101" Action="Warning" />
<Rule Id="S5445" Action="Warning" />
<Rule Id="S100" Action="None" />
<Rule Id="S3262" Action="Warning" />
<Rule Id="S3265" Action="Warning" />
<Rule Id="S6419" Action="Warning" />
<Rule Id="S2053" Action="Warning" />
<Rule Id="S2292" Action="Warning" />
<Rule Id="S3263" Action="Warning" />
<Rule Id="S3260" Action="Warning" />
<Rule Id="S3261" Action="Warning" />
<Rule Id="S2290" Action="Warning" />
<Rule Id="S2291" Action="Warning" />
<Rule Id="S4047" Action="None" />
<Rule Id="S4049" Action="None" />
<Rule Id="S4040" Action="None" />
<Rule Id="S4041" Action="None" />
<Rule Id="S4058" Action="None" />
<Rule Id="S4059" Action="None" />
<Rule Id="S4055" Action="None" />
<Rule Id="S4056" Action="None" />
<Rule Id="S4057" Action="None" />
<Rule Id="S4050" Action="None" />
<Rule Id="S4052" Action="None" />
<Rule Id="S6354" Action="None" />
<Rule Id="S3059" Action="None" />
<Rule Id="S4027" Action="None" />
<Rule Id="S6444" Action="Warning" />
<Rule Id="S4023" Action="None" />
<Rule Id="S4025" Action="None" />
<Rule Id="S4026" Action="None" />
<Rule Id="S4144" Action="Warning" />
<Rule Id="S4022" Action="None" />
<Rule Id="S4143" Action="Warning" />
<Rule Id="S4261" Action="None" />
<Rule Id="S3052" Action="None" />
<Rule Id="S3172" Action="Warning" />
<Rule Id="S4159" Action="Warning" />
<Rule Id="S4260" Action="Warning" />
<Rule Id="S4036" Action="Warning" />
<Rule Id="S4039" Action="None" />
<Rule Id="S4277" Action="Warning" />
<Rule Id="S4035" Action="Warning" />
<Rule Id="S4158" Action="Warning" />
<Rule Id="S4275" Action="Warning" />
<Rule Id="S2092" Action="Warning" />
<Rule Id="S3060" Action="Warning" />
<Rule Id="S5122" Action="Warning" />
</Rules>
</RuleSet>

View File

@ -1,184 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RuleSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
<Rules AnalyzerId="SonarScannerFor.NET" RuleNamespace="SonarScannerFor.NET">
<Rule Id="S1654" Action="None" />
<Rule Id="S2225" Action="None" />
<Rule Id="S1135" Action="None" />
<Rule Id="S2344" Action="None" />
<Rule Id="S2346" Action="None" />
<Rule Id="S2347" Action="None" />
<Rule Id="S1134" Action="None" />
<Rule Id="S2342" Action="None" />
<Rule Id="S2345" Action="None" />
<Rule Id="S3431" Action="None" />
<Rule Id="S2068" Action="None" />
<Rule Id="S2222" Action="None" />
<Rule Id="S2343" Action="None" />
<Rule Id="S6146" Action="None" />
<Rule Id="S112" Action="None" />
<Rule Id="S1659" Action="None" />
<Rule Id="S2340" Action="None" />
<Rule Id="S1656" Action="None" />
<Rule Id="S2348" Action="None" />
<Rule Id="S2349" Action="None" />
<Rule Id="S907" Action="None" />
<Rule Id="S103" Action="None" />
<Rule Id="S105" Action="None" />
<Rule Id="S6145" Action="None" />
<Rule Id="S5693" Action="None" />
<Rule Id="S104" Action="None" />
<Rule Id="S107" Action="None" />
<Rule Id="S108" Action="None" />
<Rule Id="S1147" Action="None" />
<Rule Id="S1301" Action="None" />
<Rule Id="S1940" Action="None" />
<Rule Id="S2357" Action="None" />
<Rule Id="S2358" Action="None" />
<Rule Id="S1542" Action="None" />
<Rule Id="S2234" Action="None" />
<Rule Id="S2355" Action="None" />
<Rule Id="S122" Action="None" />
<Rule Id="S1541" Action="None" />
<Rule Id="S2353" Action="None" />
<Rule Id="S2354" Action="None" />
<Rule Id="S4136" Action="None" />
<Rule Id="S2077" Action="None" />
<Rule Id="S2352" Action="None" />
<Rule Id="S4818" Action="None" />
<Rule Id="S1821" Action="None" />
<Rule Id="S2359" Action="None" />
<Rule Id="S2757" Action="None" />
<Rule Id="S3449" Action="None" />
<Rule Id="S114" Action="None" />
<Rule Id="S117" Action="None" />
<Rule Id="S3603" Action="None" />
<Rule Id="S3776" Action="None" />
<Rule Id="S1110" Action="None" />
<Rule Id="S1751" Action="None" />
<Rule Id="S1871" Action="None" />
<Rule Id="S4225" Action="None" />
<Rule Id="S1075" Action="None" />
<Rule Id="S1197" Action="None" />
<Rule Id="S3011" Action="None" />
<Rule Id="S4586" Action="None" />
<Rule Id="S1479" Action="None" />
<Rule Id="S4507" Action="None" />
<Rule Id="S4581" Action="None" />
<Rule Id="S1192" Action="None" />
<Rule Id="S1643" Action="None" />
<Rule Id="S4060" Action="None" />
<Rule Id="S4583" Action="None" />
<Rule Id="S1123" Action="None" />
<Rule Id="S1125" Action="None" />
<Rule Id="S1764" Action="None" />
<Rule Id="S101" Action="None" />
<Rule Id="S2178" Action="None" />
<Rule Id="S5443" Action="None" />
<Rule Id="S5445" Action="None" />
<Rule Id="S2339" Action="None" />
<Rule Id="S2692" Action="None" />
<Rule Id="S2737" Action="None" />
<Rule Id="S3385" Action="None" />
<Rule Id="S1481" Action="None" />
<Rule Id="S1645" Action="None" />
<Rule Id="S2612" Action="None" />
<Rule Id="S2302" Action="None" />
<Rule Id="S3358" Action="None" />
<Rule Id="S5042" Action="None" />
<Rule Id="S2387" Action="None" />
<Rule Id="S3598" Action="None" />
<Rule Id="S3871" Action="None" />
<Rule Id="S3992" Action="None" />
<Rule Id="S1451" Action="None" />
<Rule Id="S2429" Action="None" />
<Rule Id="S3990" Action="None" />
<Rule Id="S4201" Action="None" />
<Rule Id="S1172" Action="None" />
<Rule Id="S2304" Action="None" />
<Rule Id="S3998" Action="None" />
<Rule Id="S5659" Action="None" />
<Rule Id="S1862" Action="None" />
<Rule Id="S2951" Action="None" />
<Rule Id="S5944" Action="None" />
<Rule Id="S1067" Action="None" />
<Rule Id="S3884" Action="None" />
<Rule Id="S5547" Action="None" />
<Rule Id="S1066" Action="None" />
<Rule Id="S2551" Action="None" />
<Rule Id="S4210" Action="None" />
<Rule Id="S5542" Action="None" />
<Rule Id="S1186" Action="None" />
<Rule Id="S3923" Action="None" />
<Rule Id="S3926" Action="None" />
<Rule Id="S3927" Action="None" />
<Rule Id="S1226" Action="None" />
<Rule Id="S2437" Action="None" />
<Rule Id="S3889" Action="None" />
<Rule Id="S1313" Action="None" />
<Rule Id="S2368" Action="None" />
<Rule Id="S4787" Action="None" />
<Rule Id="S6354" Action="None" />
<Rule Id="S2366" Action="None" />
<Rule Id="S2367" Action="None" />
<Rule Id="S2369" Action="None" />
<Rule Id="S4423" Action="None" />
<Rule Id="S1155" Action="None" />
<Rule Id="S2364" Action="None" />
<Rule Id="S4025" Action="None" />
<Rule Id="S6444" Action="None" />
<Rule Id="S131" Action="None" />
<Rule Id="S2761" Action="None" />
<Rule Id="S3453" Action="None" />
<Rule Id="S2362" Action="None" />
<Rule Id="S2365" Action="None" />
<Rule Id="S4144" Action="None" />
<Rule Id="S5753" Action="None" />
<Rule Id="S134" Action="None" />
<Rule Id="S2363" Action="None" />
<Rule Id="S4784" Action="None" />
<Rule Id="S4829" Action="None" />
<Rule Id="S1151" Action="None" />
<Rule Id="S4428" Action="None" />
<Rule Id="S4823" Action="None" />
<Rule Id="S927" Action="None" />
<Rule Id="S126" Action="None" />
<Rule Id="S2360" Action="None" />
<Rule Id="S4143" Action="None" />
<Rule Id="S4260" Action="None" />
<Rule Id="S1048" Action="None" />
<Rule Id="S2259" Action="None" />
<Rule Id="S4159" Action="None" />
<Rule Id="S4830" Action="None" />
<Rule Id="S2257" Action="None" />
<Rule Id="S2375" Action="None" />
<Rule Id="S3466" Action="None" />
<Rule Id="S4036" Action="None" />
<Rule Id="S3464" Action="None" />
<Rule Id="S3860" Action="None" />
<Rule Id="S3981" Action="None" />
<Rule Id="S4277" Action="None" />
<Rule Id="S2255" Action="None" />
<Rule Id="S2373" Action="None" />
<Rule Id="S2374" Action="None" />
<Rule Id="S2376" Action="None" />
<Rule Id="S1163" Action="None" />
<Rule Id="S3903" Action="None" />
<Rule Id="S3904" Action="None" />
<Rule Id="S4834" Action="None" />
<Rule Id="S2372" Action="None" />
<Rule Id="S3866" Action="None" />
<Rule Id="S3869" Action="None" />
<Rule Id="S4790" Action="None" />
<Rule Id="S138" Action="None" />
<Rule Id="S2370" Action="None" />
<Rule Id="S4275" Action="None" />
<Rule Id="S4792" Action="None" />
<Rule Id="S139" Action="None" />
<Rule Id="DuplicatedBlocks" Action="None" />
<Rule Id="FailedUnitTests" Action="None" />
<Rule Id="SkippedUnitTests" Action="None" />
<Rule Id="InsufficientBranchCoverage" Action="None" />
<Rule Id="InsufficientCommentDensity" Action="None" />
<Rule Id="InsufficientLineCoverage" Action="None" />
</Rules>
</RuleSet>

View File

@ -1,184 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RuleSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Rules for SonarQube" Description="This rule set was automatically generated from SonarQube" ToolsVersion="14.0">
<Rules AnalyzerId="SonarScannerFor.NET" RuleNamespace="SonarScannerFor.NET">
<Rule Id="S1654" Action="Warning" />
<Rule Id="S2225" Action="Warning" />
<Rule Id="S1135" Action="Warning" />
<Rule Id="S2344" Action="Warning" />
<Rule Id="S2346" Action="Warning" />
<Rule Id="S2347" Action="Warning" />
<Rule Id="S1134" Action="Warning" />
<Rule Id="S2342" Action="Warning" />
<Rule Id="S2345" Action="Warning" />
<Rule Id="S3431" Action="None" />
<Rule Id="S2068" Action="Warning" />
<Rule Id="S2222" Action="Warning" />
<Rule Id="S2343" Action="None" />
<Rule Id="S6146" Action="Warning" />
<Rule Id="S112" Action="Warning" />
<Rule Id="S1659" Action="None" />
<Rule Id="S2340" Action="Warning" />
<Rule Id="S1656" Action="Warning" />
<Rule Id="S2348" Action="None" />
<Rule Id="S2349" Action="Warning" />
<Rule Id="S907" Action="Warning" />
<Rule Id="S103" Action="None" />
<Rule Id="S105" Action="None" />
<Rule Id="S6145" Action="Warning" />
<Rule Id="S5693" Action="Warning" />
<Rule Id="S104" Action="None" />
<Rule Id="S107" Action="Warning" />
<Rule Id="S108" Action="Warning" />
<Rule Id="S1147" Action="None" />
<Rule Id="S1301" Action="None" />
<Rule Id="S1940" Action="Warning" />
<Rule Id="S2357" Action="None" />
<Rule Id="S2358" Action="Warning" />
<Rule Id="S1542" Action="Warning" />
<Rule Id="S2234" Action="Warning" />
<Rule Id="S2355" Action="Warning" />
<Rule Id="S122" Action="None" />
<Rule Id="S1541" Action="None" />
<Rule Id="S2353" Action="None" />
<Rule Id="S2354" Action="None" />
<Rule Id="S4136" Action="Warning" />
<Rule Id="S2077" Action="Warning" />
<Rule Id="S2352" Action="Warning" />
<Rule Id="S4818" Action="None" />
<Rule Id="S1821" Action="None" />
<Rule Id="S2359" Action="Warning" />
<Rule Id="S2757" Action="Warning" />
<Rule Id="S3449" Action="Warning" />
<Rule Id="S114" Action="Warning" />
<Rule Id="S117" Action="Warning" />
<Rule Id="S3603" Action="Warning" />
<Rule Id="S3776" Action="Warning" />
<Rule Id="S1110" Action="Warning" />
<Rule Id="S1751" Action="Warning" />
<Rule Id="S1871" Action="Warning" />
<Rule Id="S4225" Action="None" />
<Rule Id="S1075" Action="Warning" />
<Rule Id="S1197" Action="Warning" />
<Rule Id="S3011" Action="Warning" />
<Rule Id="S4586" Action="Warning" />
<Rule Id="S1479" Action="Warning" />
<Rule Id="S4507" Action="Warning" />
<Rule Id="S4581" Action="Warning" />
<Rule Id="S1192" Action="None" />
<Rule Id="S1643" Action="Warning" />
<Rule Id="S4060" Action="None" />
<Rule Id="S4583" Action="Warning" />
<Rule Id="S1123" Action="Warning" />
<Rule Id="S1125" Action="Warning" />
<Rule Id="S1764" Action="Warning" />
<Rule Id="S101" Action="Warning" />
<Rule Id="S2178" Action="Warning" />
<Rule Id="S5443" Action="Warning" />
<Rule Id="S5445" Action="Warning" />
<Rule Id="S2339" Action="None" />
<Rule Id="S2692" Action="Warning" />
<Rule Id="S2737" Action="Warning" />
<Rule Id="S3385" Action="Warning" />
<Rule Id="S1481" Action="Warning" />
<Rule Id="S1645" Action="Warning" />
<Rule Id="S2612" Action="Warning" />
<Rule Id="S2302" Action="None" />
<Rule Id="S3358" Action="Warning" />
<Rule Id="S5042" Action="Warning" />
<Rule Id="S2387" Action="Warning" />
<Rule Id="S3598" Action="Warning" />
<Rule Id="S3871" Action="Warning" />
<Rule Id="S3992" Action="None" />
<Rule Id="S1451" Action="None" />
<Rule Id="S2429" Action="None" />
<Rule Id="S3990" Action="None" />
<Rule Id="S4201" Action="Warning" />
<Rule Id="S1172" Action="Warning" />
<Rule Id="S2304" Action="Warning" />
<Rule Id="S3998" Action="Warning" />
<Rule Id="S5659" Action="Warning" />
<Rule Id="S1862" Action="Warning" />
<Rule Id="S2951" Action="Warning" />
<Rule Id="S5944" Action="Warning" />
<Rule Id="S1067" Action="None" />
<Rule Id="S3884" Action="Warning" />
<Rule Id="S5547" Action="Warning" />
<Rule Id="S1066" Action="Warning" />
<Rule Id="S2551" Action="Warning" />
<Rule Id="S4210" Action="Warning" />
<Rule Id="S5542" Action="Warning" />
<Rule Id="S1186" Action="Warning" />
<Rule Id="S3923" Action="Warning" />
<Rule Id="S3926" Action="Warning" />
<Rule Id="S3927" Action="Warning" />
<Rule Id="S1226" Action="None" />
<Rule Id="S2437" Action="Warning" />
<Rule Id="S3889" Action="Warning" />
<Rule Id="S1313" Action="Warning" />
<Rule Id="S2368" Action="Warning" />
<Rule Id="S4787" Action="None" />
<Rule Id="S6354" Action="None" />
<Rule Id="S2366" Action="None" />
<Rule Id="S2367" Action="None" />
<Rule Id="S2369" Action="None" />
<Rule Id="S4423" Action="Warning" />
<Rule Id="S1155" Action="Warning" />
<Rule Id="S2364" Action="None" />
<Rule Id="S4025" Action="None" />
<Rule Id="S6444" Action="Warning" />
<Rule Id="S131" Action="None" />
<Rule Id="S2761" Action="Warning" />
<Rule Id="S3453" Action="Warning" />
<Rule Id="S2362" Action="None" />
<Rule Id="S2365" Action="Warning" />
<Rule Id="S4144" Action="Warning" />
<Rule Id="S5753" Action="Warning" />
<Rule Id="S134" Action="None" />
<Rule Id="S2363" Action="None" />
<Rule Id="S4784" Action="None" />
<Rule Id="S4829" Action="None" />
<Rule Id="S1151" Action="None" />
<Rule Id="S4428" Action="Warning" />
<Rule Id="S4823" Action="None" />
<Rule Id="S927" Action="Warning" />
<Rule Id="S126" Action="None" />
<Rule Id="S2360" Action="None" />
<Rule Id="S4143" Action="Warning" />
<Rule Id="S4260" Action="Warning" />
<Rule Id="S1048" Action="Warning" />
<Rule Id="S2259" Action="Warning" />
<Rule Id="S4159" Action="Warning" />
<Rule Id="S4830" Action="Warning" />
<Rule Id="S2257" Action="Warning" />
<Rule Id="S2375" Action="Warning" />
<Rule Id="S3466" Action="Warning" />
<Rule Id="S4036" Action="Warning" />
<Rule Id="S3464" Action="Warning" />
<Rule Id="S3860" Action="None" />
<Rule Id="S3981" Action="Warning" />
<Rule Id="S4277" Action="Warning" />
<Rule Id="S2255" Action="None" />
<Rule Id="S2373" Action="None" />
<Rule Id="S2374" Action="None" />
<Rule Id="S2376" Action="Warning" />
<Rule Id="S1163" Action="Warning" />
<Rule Id="S3903" Action="Warning" />
<Rule Id="S3904" Action="Warning" />
<Rule Id="S4834" Action="None" />
<Rule Id="S2372" Action="Warning" />
<Rule Id="S3866" Action="None" />
<Rule Id="S3869" Action="Warning" />
<Rule Id="S4790" Action="Warning" />
<Rule Id="S138" Action="None" />
<Rule Id="S2370" Action="None" />
<Rule Id="S4275" Action="Warning" />
<Rule Id="S4792" Action="Warning" />
<Rule Id="S139" Action="None" />
<Rule Id="DuplicatedBlocks" Action="None" />
<Rule Id="FailedUnitTests" Action="None" />
<Rule Id="SkippedUnitTests" Action="None" />
<Rule Id="InsufficientBranchCoverage" Action="None" />
<Rule Id="InsufficientCommentDensity" Action="None" />
<Rule Id="InsufficientLineCoverage" Action="None" />
</Rules>
</RuleSet>

View File

@ -1,172 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<AnalysisConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1">
<SonarConfigDir>/workspaces/AS400API/.sonarqube/conf</SonarConfigDir>
<SonarOutputDir>/workspaces/AS400API/.sonarqube/out</SonarOutputDir>
<SonarBinDir>/workspaces/AS400API/.sonarqube/bin</SonarBinDir>
<SonarScannerWorkingDirectory>/workspaces/AS400API</SonarScannerWorkingDirectory>
<UseSonarScannerCli>false</UseSonarScannerCli>
<ScanAllAnalysis>true</ScanAllAnalysis>
<HasBeginStepCommandLineCredentials>true</HasBeginStepCommandLineCredentials>
<HasBeginStepCommandLineTruststorePassword>false</HasBeginStepCommandLineTruststorePassword>
<SonarQubeHostUrl>http://host.docker.internal:9000</SonarQubeHostUrl>
<SonarQubeVersion>9.9.8.100196</SonarQubeVersion>
<SonarProjectKey>as400api</SonarProjectKey>
<SonarProjectName>AS400API</SonarProjectName>
<AdditionalConfig>
<ConfigSetting Id="BuildUri" />
<ConfigSetting Id="TfsUri" />
<ConfigSetting Id="VsCoverageConverterToolPath" />
<ConfigSetting Id="UnchangedFilesPath" />
<ConfigSetting Id="sonar.pullrequest.cache.basepath" Value="/workspaces/AS400API" />
<ConfigSetting Id="settings.file.path" Value="/root/.dotnet/tools/.store/dotnet-sonarscanner/10.4.1/dotnet-sonarscanner/10.4.1/tools/netcoreapp3.1/any/SonarQube.Analysis.xml" />
</AdditionalConfig>
<ServerSettings>
<Property Name="sonaranalyzer-cs.nuget.packageVersion">8.51.0.59060</Property>
<Property Name="sonar.cs.ignoreHeaderComments">true</Property>
<Property Name="sonar.typescript.file.suffixes">.ts,.tsx,.cts,.mts</Property>
<Property Name="email.fromName">SonarQube</Property>
<Property Name="sonar.python.xunit.skipDetails">false</Property>
<Property Name="sonar.auth.saml.signature.enabled">false</Property>
<Property Name="sonar.go.exclusions">**/vendor/**</Property>
<Property Name="sonar.terraform.file.suffixes">.tf</Property>
<Property Name="sonar.forceAuthentication">true</Property>
<Property Name="sonar.notifications.delay">60</Property>
<Property Name="sonaranalyzer-cs.ruleNamespace">SonarAnalyzer.CSharp</Property>
<Property Name="sonar.cs.analyzeGeneratedCode">false</Property>
<Property Name="sonar.builtInQualityProfiles.disableNotificationOnUpdate">false</Property>
<Property Name="sonar.css.file.suffixes">.css,.less,.scss</Property>
<Property Name="sonar.html.file.suffixes">.html,.xhtml,.cshtml,.vbhtml,.aspx,.ascx,.rhtml,.erb,.shtm,.shtml,.cmp,.twig</Property>
<Property Name="sonar.auth.gitlab.enabled">false</Property>
<Property Name="sonar.cpd.cross_project">false</Property>
<Property Name="sonar.vbnet.ignoreHeaderComments">true</Property>
<Property Name="sonar.auth.github.groupsSync">false</Property>
<Property Name="sonar.scala.file.suffixes">.scala</Property>
<Property Name="sonar.cloudformation.activate">true</Property>
<Property Name="sonaranalyzer-vbnet.ruleNamespace">SonarAnalyzer.VisualBasic</Property>
<Property Name="sonar.cloudformation.file.identifier">AWSTemplateFormatVersion</Property>
<Property Name="sonar.javascript.ignoreHeaderComments">true</Property>
<Property Name="sonar.dbcleaner.daysBeforeDeletingClosedIssues">30</Property>
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByMonth">52</Property>
<Property Name="sonar.lf.gravatarServerUrl">https://secure.gravatar.com/avatar/{EMAIL_MD5}.jpg?s={SIZE}&amp;d=identicon</Property>
<Property Name="sonar.notifications.runningDelayBeforeReportingStatus">600</Property>
<Property Name="sonar.jsp.file.suffixes">.jsp,.jspf,.jspx</Property>
<Property Name="sonar.javascript.maxFileSize">1000</Property>
<Property Name="sonar.javascript.environments">amd,applescript,atomtest,browser,commonjs,couch,embertest,flow,greasemonkey,jasmine,jest,jquery,meteor,mocha,mongo,nashorn,node,phantomjs,prototypejs,protractor,qunit,rhino,serviceworker,shared-node-browser,shelljs,webextensions,worker,wsh,yui</Property>
<Property Name="sonar.scm.disabled">false</Property>
<Property Name="sonar.ruby.exclusions">**/vendor/**</Property>
<Property Name="sonar.auth.saml.enabled">false</Property>
<Property Name="sonar.vbnet.file.suffixes">.vb</Property>
<Property Name="sonar.technicalDebt.developmentCost">30</Property>
<Property Name="sonar.validateWebhooks">true</Property>
<Property Name="sonar.python.file.suffixes">py</Property>
<Property Name="sonar.cs.file.suffixes">.cs</Property>
<Property Name="sonar.allowPermissionManagementForProjectAdmins">true</Property>
<Property Name="sonaranalyzer-vbnet.staticResourceName">SonarAnalyzer-8.51.0.59060.zip</Property>
<Property Name="sonar.java.file.suffixes">.java,.jav</Property>
<Property Name="sonar.kotlin.file.suffixes">.kt</Property>
<Property Name="sonar.php.file.suffixes">php,php3,php4,php5,phtml,inc</Property>
<Property Name="sonar.xml.file.suffixes">.xml,.xsd,.xsl</Property>
<Property Name="sonar.dbcleaner.weeksBeforeDeletingAllSnapshots">260</Property>
<Property Name="sonar.updatecenter.cache.ttl">3600000</Property>
<Property Name="sonar.auth.bitbucket.allowUsersToSignUp">true</Property>
<Property Name="sonar.auth.github.enabled">false</Property>
<Property Name="sonar.python.coverage.reportPaths">coverage-reports/*coverage-*.xml</Property>
<Property Name="sonaranalyzer-vbnet.nuget.packageVersion">8.51.0.59060</Property>
<Property Name="sonar.go.file.suffixes">.go</Property>
<Property Name="sonar.auth.saml.applicationId">sonarqube</Property>
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyAnalysesWithVersion">104</Property>
<Property Name="sonar.qualitygate.ignoreSmallChanges">true</Property>
<Property Name="sonar.php.exclusions">**/vendor/**</Property>
<Property Name="sonar.vbnet.roslyn.ignoreIssues">false</Property>
<Property Name="sonar.flex.file.suffixes">as</Property>
<Property Name="sonar.filesize.limit">20</Property>
<Property Name="sonar.auth.gitlab.groupsSync">false</Property>
<Property Name="sonar.auth.github.apiUrl">https://api.github.com/</Property>
<Property Name="sonar.ruby.file.suffixes">.rb</Property>
<Property Name="sonar.auth.github.allowUsersToSignUp">true</Property>
<Property Name="sonar.python.xunit.reportPath">xunit-reports/xunit-result-*.xml</Property>
<Property Name="sonar.javascript.globals">angular,goog,google,OenLayers,d3,dojo,dojox,dijit,Backbone,moment,casper,_,sap</Property>
<Property Name="sonar.dbcleaner.hoursBeforeKeepingOnlyOneSnapshotByDay">24</Property>
<Property Name="sonar.yaml.file.suffixes">.yaml,.yml</Property>
<Property Name="sonar.auth.bitbucket.enabled">false</Property>
<Property Name="sonar.terraform.activate">true</Property>
<Property Name="sonar.auth.github.webUrl">https://github.com/</Property>
<Property Name="sonaranalyzer-vbnet.nuget.packageId">SonarAnalyzer.VisualBasic</Property>
<Property Name="email.from">noreply@nowhere</Property>
<Property Name="sonaranalyzer-vbnet.pluginVersion">8.51.0.59060</Property>
<Property Name="sonar.dbcleaner.weeksBeforeKeepingOnlyOneSnapshotByWeek">4</Property>
<Property Name="sonaranalyzer-vbnet.analyzerId">SonarAnalyzer.VisualBasic</Property>
<Property Name="email.prefix">[SONARQUBE]</Property>
<Property Name="sonar.cs.roslyn.ignoreIssues">false</Property>
<Property Name="sonaranalyzer-cs.pluginKey">csharp</Property>
<Property Name="sonar.kubernetes.activate">true</Property>
<Property Name="sonar.json.file.suffixes">.json</Property>
<Property Name="sonar.auth.saml.providerName">SAML</Property>
<Property Name="sonar.ruby.coverage.reportPaths">coverage/.resultset.json</Property>
<Property Name="sonaranalyzer-cs.staticResourceName">SonarAnalyzer-8.51.0.59060.zip</Property>
<Property Name="sonar.auth.gitlab.allowUsersToSignUp">true</Property>
<Property Name="sonar.projectCreation.mainBranchName">main</Property>
<Property Name="sonaranalyzer-cs.nuget.packageId">SonarAnalyzer.CSharp</Property>
<Property Name="sonar.authenticator.downcase">false</Property>
<Property Name="sonaranalyzer-cs.analyzerId">SonarAnalyzer.CSharp</Property>
<Property Name="sonar.technicalDebt.ratingGrid">0.05,0.1,0.2,0.5</Property>
<Property Name="sonar.lf.enableGravatar">false</Property>
<Property Name="sonar.docker.activate">true</Property>
<Property Name="sonaranalyzer-cs.pluginVersion">8.51.0.59060</Property>
<Property Name="sonar.developerAggregatedInfo.disabled">false</Property>
<Property Name="sonar.javascript.file.suffixes">.js,.jsx,.cjs,.mjs,.vue</Property>
<Property Name="sonar.vbnet.analyzeGeneratedCode">false</Property>
<Property Name="sonar.plugins.risk.consent">NOT_ACCEPTED</Property>
<Property Name="sonar.auth.gitlab.url">https://gitlab.com</Property>
<Property Name="sonaranalyzer-vbnet.pluginKey">vbnet</Property>
<Property Name="sonar.updatecenter.url">https://update.sonarsource.org/update-center.properties</Property>
<Property Name="sonar.core.id">147B411E-AZmtNwrV3lb8QGbhu0SU</Property>
<Property Name="sonar.core.startTime">10/4/2025 3:17:58AM</Property>
</ServerSettings>
<LocalSettings>
<Property Name="sonar.host.url">http://host.docker.internal:9000</Property>
<Property Name="sonar.cs.opencover.reportsPaths">**/coverage.opencover.xml</Property>
<Property Name="sonar.exclusions">**/bin/**,**/obj/**,**/coverage.opencover.xml</Property>
</LocalSettings>
<ScannerOptsSettings />
<AnalyzersSettings>
<AnalyzerSettings>
<Language>cs</Language>
<RulesetPath>/workspaces/AS400API/.sonarqube/conf/Sonar-cs.ruleset</RulesetPath>
<DeactivatedRulesetPath>/workspaces/AS400API/.sonarqube/conf/Sonar-cs-none.ruleset</DeactivatedRulesetPath>
<AnalyzerPlugins>
<AnalyzerPlugin Key="csharp" Version="8.51.0.59060" StaticResourceName="SonarAnalyzer-8.51.0.59060.zip">
<AssemblyPaths>
<Path>/tmp/.sonarqube/resources/0/SonarAnalyzer.CFG.dll</Path>
<Path>/tmp/.sonarqube/resources/0/Google.Protobuf.dll</Path>
<Path>/tmp/.sonarqube/resources/0/SonarAnalyzer.CSharp.dll</Path>
<Path>/tmp/.sonarqube/resources/0/SonarAnalyzer.dll</Path>
<Path>/tmp/.sonarqube/resources/0/THIRD-PARTY-NOTICES.txt</Path>
</AssemblyPaths>
</AnalyzerPlugin>
</AnalyzerPlugins>
<AdditionalFilePaths>
<Path>/workspaces/AS400API/.sonarqube/conf/cs/SonarLint.xml</Path>
</AdditionalFilePaths>
</AnalyzerSettings>
<AnalyzerSettings>
<Language>vbnet</Language>
<RulesetPath>/workspaces/AS400API/.sonarqube/conf/Sonar-vbnet.ruleset</RulesetPath>
<DeactivatedRulesetPath>/workspaces/AS400API/.sonarqube/conf/Sonar-vbnet-none.ruleset</DeactivatedRulesetPath>
<AnalyzerPlugins>
<AnalyzerPlugin Key="vbnet" Version="8.51.0.59060" StaticResourceName="SonarAnalyzer-8.51.0.59060.zip">
<AssemblyPaths>
<Path>/tmp/.sonarqube/resources/1/SonarAnalyzer.CFG.dll</Path>
<Path>/tmp/.sonarqube/resources/1/SonarAnalyzer.VisualBasic.dll</Path>
<Path>/tmp/.sonarqube/resources/1/Google.Protobuf.dll</Path>
<Path>/tmp/.sonarqube/resources/1/SonarAnalyzer.dll</Path>
<Path>/tmp/.sonarqube/resources/1/THIRD-PARTY-NOTICES.txt</Path>
</AssemblyPaths>
</AnalyzerPlugin>
</AnalyzerPlugins>
<AdditionalFilePaths>
<Path>/workspaces/AS400API/.sonarqube/conf/vbnet/SonarLint.xml</Path>
</AdditionalFilePaths>
</AnalyzerSettings>
</AnalyzersSettings>
</AnalysisConfig>

View File

@ -1,869 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<AnalysisInput>
<Settings>
<Setting>
<Key>sonar.cs.opencover.reportsPaths</Key>
<Value>**/coverage.opencover.xml</Value>
</Setting>
<Setting>
<Key>sonar.cs.ignoreHeaderComments</Key>
<Value>true</Value>
</Setting>
<Setting>
<Key>sonar.cs.analyzeGeneratedCode</Key>
<Value>false</Value>
</Setting>
<Setting>
<Key>sonar.cs.file.suffixes</Key>
<Value>.cs</Value>
</Setting>
<Setting>
<Key>sonar.cs.roslyn.ignoreIssues</Key>
<Value>false</Value>
</Setting>
</Settings>
<Rules>
<Rule>
<Key>S2225</Key>
</Rule>
<Rule>
<Key>S2346</Key>
</Rule>
<Rule>
<Key>S2223</Key>
</Rule>
<Rule>
<Key>S2344</Key>
</Rule>
<Rule>
<Key>S2589</Key>
</Rule>
<Rule>
<Key>S3433</Key>
</Rule>
<Rule>
<Key>S1134</Key>
</Rule>
<Rule>
<Key>S1135</Key>
</Rule>
<Rule>
<Key>S2345</Key>
</Rule>
<Rule>
<Key>S4524</Key>
</Rule>
<Rule>
<Key>S2342</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
<Parameter>
<Key>flagsAttributeFormat</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2222</Key>
</Rule>
<Rule>
<Key>S2583</Key>
</Rule>
<Rule>
<Key>S2115</Key>
</Rule>
<Rule>
<Key>S3447</Key>
</Rule>
<Rule>
<Key>S2234</Key>
</Rule>
<Rule>
<Key>S2479</Key>
</Rule>
<Rule>
<Key>S3444</Key>
</Rule>
<Rule>
<Key>S3445</Key>
</Rule>
<Rule>
<Key>S1144</Key>
</Rule>
<Rule>
<Key>S1264</Key>
</Rule>
<Rule>
<Key>S2114</Key>
</Rule>
<Rule>
<Key>S3442</Key>
</Rule>
<Rule>
<Key>S3440</Key>
</Rule>
<Rule>
<Key>S3443</Key>
</Rule>
<Rule>
<Key>S3329</Key>
</Rule>
<Rule>
<Key>S3449</Key>
</Rule>
<Rule>
<Key>S3655</Key>
</Rule>
<Rule>
<Key>S3776</Key>
<Parameters>
<Parameter>
<Key>propertyThreshold</Key>
<Value>3</Value>
</Parameter>
<Parameter>
<Key>threshold</Key>
<Value>15</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2688</Key>
</Rule>
<Rule>
<Key>S3897</Key>
</Rule>
<Rule>
<Key>S1110</Key>
</Rule>
<Rule>
<Key>S2201</Key>
</Rule>
<Rule>
<Key>S4502</Key>
</Rule>
<Rule>
<Key>S1118</Key>
</Rule>
<Rule>
<Key>S2328</Key>
</Rule>
<Rule>
<Key>S2681</Key>
</Rule>
<Rule>
<Key>S1117</Key>
</Rule>
<Rule>
<Key>S2326</Key>
</Rule>
<Rule>
<Key>S3415</Key>
</Rule>
<Rule>
<Key>S4507</Key>
</Rule>
<Rule>
<Key>S1116</Key>
</Rule>
<Rule>
<Key>S1479</Key>
<Parameters>
<Parameter>
<Key>maximum</Key>
<Value>30</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2699</Key>
</Rule>
<Rule>
<Key>S1125</Key>
</Rule>
<Rule>
<Key>S2696</Key>
</Rule>
<Rule>
<Key>S4635</Key>
</Rule>
<Rule>
<Key>S1121</Key>
</Rule>
<Rule>
<Key>S1123</Key>
</Rule>
<Rule>
<Key>S2219</Key>
</Rule>
<Rule>
<Key>S2692</Key>
</Rule>
<Rule>
<Key>S1006</Key>
</Rule>
<Rule>
<Key>S1481</Key>
</Rule>
<Rule>
<Key>S3427</Key>
</Rule>
<Rule>
<Key>S3237</Key>
</Rule>
<Rule>
<Key>S3358</Key>
</Rule>
<Rule>
<Key>S3598</Key>
</Rule>
<Rule>
<Key>S3236</Key>
</Rule>
<Rule>
<Key>S5773</Key>
</Rule>
<Rule>
<Key>S2386</Key>
</Rule>
<Rule>
<Key>S3597</Key>
</Rule>
<Rule>
<Key>S4200</Key>
</Rule>
<Rule>
<Key>S4201</Key>
</Rule>
<Rule>
<Key>S1172</Key>
</Rule>
<Rule>
<Key>S4457</Key>
</Rule>
<Rule>
<Key>S5659</Key>
</Rule>
<Rule>
<Key>S3249</Key>
</Rule>
<Rule>
<Key>S4456</Key>
</Rule>
<Rule>
<Key>S3005</Key>
</Rule>
<Rule>
<Key>S3246</Key>
</Rule>
<Rule>
<Key>S3247</Key>
</Rule>
<Rule>
<Key>S4211</Key>
</Rule>
<Rule>
<Key>S5547</Key>
</Rule>
<Rule>
<Key>S3244</Key>
</Rule>
<Rule>
<Key>S5542</Key>
</Rule>
<Rule>
<Key>S1066</Key>
</Rule>
<Rule>
<Key>S1186</Key>
</Rule>
<Rule>
<Key>S4210</Key>
</Rule>
<Rule>
<Key>S1185</Key>
</Rule>
<Rule>
<Key>S2275</Key>
</Rule>
<Rule>
<Key>S3241</Key>
</Rule>
<Rule>
<Key>S2368</Key>
</Rule>
<Rule>
<Key>S3457</Key>
</Rule>
<Rule>
<Key>S4423</Key>
</Rule>
<Rule>
<Key>S1155</Key>
</Rule>
<Rule>
<Key>S2245</Key>
</Rule>
<Rule>
<Key>S3456</Key>
</Rule>
<Rule>
<Key>S3458</Key>
</Rule>
<Rule>
<Key>S4426</Key>
</Rule>
<Rule>
<Key>S2123</Key>
</Rule>
<Rule>
<Key>S2365</Key>
</Rule>
<Rule>
<Key>S2486</Key>
</Rule>
<Rule>
<Key>S3453</Key>
</Rule>
<Rule>
<Key>S3330</Key>
</Rule>
<Rule>
<Key>S3451</Key>
</Rule>
<Rule>
<Key>S5753</Key>
</Rule>
<Rule>
<Key>S3217</Key>
</Rule>
<Rule>
<Key>S3459</Key>
</Rule>
<Rule>
<Key>S4428</Key>
</Rule>
<Rule>
<Key>S3218</Key>
</Rule>
<Rule>
<Key>S927</Key>
</Rule>
<Rule>
<Key>S2259</Key>
</Rule>
<Rule>
<Key>S3450</Key>
</Rule>
<Rule>
<Key>S5766</Key>
</Rule>
<Rule>
<Key>S1048</Key>
</Rule>
<Rule>
<Key>S1168</Key>
</Rule>
<Rule>
<Key>S2257</Key>
</Rule>
<Rule>
<Key>S3466</Key>
</Rule>
<Rule>
<Key>S2376</Key>
</Rule>
<Rule>
<Key>S3343</Key>
</Rule>
<Rule>
<Key>S3346</Key>
</Rule>
<Rule>
<Key>S3464</Key>
</Rule>
<Rule>
<Key>S2252</Key>
</Rule>
<Rule>
<Key>S3220</Key>
</Rule>
<Rule>
<Key>S4433</Key>
</Rule>
<Rule>
<Key>S1163</Key>
</Rule>
<Rule>
<Key>S4790</Key>
</Rule>
<Rule>
<Key>S818</Key>
</Rule>
<Rule>
<Key>S2251</Key>
</Rule>
<Rule>
<Key>S2372</Key>
</Rule>
<Rule>
<Key>S4792</Key>
</Rule>
<Rule>
<Key>S2743</Key>
</Rule>
<Rule>
<Key>S1656</Key>
</Rule>
<Rule>
<Key>S907</Key>
</Rule>
<Rule>
<Key>S2995</Key>
</Rule>
<Rule>
<Key>S3600</Key>
</Rule>
<Rule>
<Key>S3963</Key>
</Rule>
<Rule>
<Key>S2996</Key>
</Rule>
<Rule>
<Key>S2757</Key>
</Rule>
<Rule>
<Key>S2755</Key>
</Rule>
<Rule>
<Key>S2997</Key>
</Rule>
<Rule>
<Key>S3604</Key>
</Rule>
<Rule>
<Key>S1751</Key>
</Rule>
<Rule>
<Key>S3603</Key>
</Rule>
<Rule>
<Key>S3966</Key>
</Rule>
<Rule>
<Key>S1643</Key>
</Rule>
<Rule>
<Key>S1871</Key>
</Rule>
<Rule>
<Key>S1764</Key>
</Rule>
<Rule>
<Key>S2737</Key>
</Rule>
<Rule>
<Key>S2971</Key>
</Rule>
<Rule>
<Key>S2612</Key>
</Rule>
<Rule>
<Key>S2857</Key>
</Rule>
<Rule>
<Key>S3875</Key>
</Rule>
<Rule>
<Key>S1210</Key>
</Rule>
<Rule>
<Key>S3871</Key>
</Rule>
<Rule>
<Key>S1450</Key>
</Rule>
<Rule>
<Key>S2306</Key>
</Rule>
<Rule>
<Key>S3877</Key>
</Rule>
<Rule>
<Key>S1104</Key>
</Rule>
<Rule>
<Key>S1215</Key>
</Rule>
<Rule>
<Key>S1699</Key>
</Rule>
<Rule>
<Key>S3998</Key>
</Rule>
<Rule>
<Key>S3400</Key>
</Rule>
<Rule>
<Key>S3884</Key>
</Rule>
<Rule>
<Key>S3887</Key>
</Rule>
<Rule>
<Key>S2551</Key>
</Rule>
<Rule>
<Key>S3885</Key>
</Rule>
<Rule>
<Key>S2436</Key>
<Parameters>
<Parameter>
<Key>maxMethod</Key>
<Value>3</Value>
</Parameter>
<Parameter>
<Key>max</Key>
<Value>2</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S3881</Key>
</Rule>
<Rule>
<Key>S2437</Key>
</Rule>
<Rule>
<Key>S3889</Key>
</Rule>
<Rule>
<Key>S1313</Key>
</Rule>
<Rule>
<Key>S3610</Key>
</Rule>
<Rule>
<Key>S3972</Key>
</Rule>
<Rule>
<Key>S3973</Key>
</Rule>
<Rule>
<Key>S2761</Key>
</Rule>
<Rule>
<Key>S3971</Key>
</Rule>
<Rule>
<Key>S3984</Key>
</Rule>
<Rule>
<Key>S4830</Key>
</Rule>
<Rule>
<Key>S3981</Key>
</Rule>
<Rule>
<Key>S1206</Key>
</Rule>
<Rule>
<Key>S3626</Key>
</Rule>
<Rule>
<Key>S3869</Key>
</Rule>
<Rule>
<Key>S1940</Key>
</Rule>
<Rule>
<Key>S1944</Key>
</Rule>
<Rule>
<Key>S1905</Key>
</Rule>
<Rule>
<Key>S1939</Key>
</Rule>
<Rule>
<Key>S5034</Key>
</Rule>
<Rule>
<Key>S4061</Key>
</Rule>
<Rule>
<Key>S5042</Key>
</Rule>
<Rule>
<Key>S1854</Key>
</Rule>
<Rule>
<Key>S4070</Key>
</Rule>
<Rule>
<Key>S1862</Key>
</Rule>
<Rule>
<Key>S3927</Key>
</Rule>
<Rule>
<Key>S3928</Key>
</Rule>
<Rule>
<Key>S3925</Key>
</Rule>
<Rule>
<Key>S3926</Key>
</Rule>
<Rule>
<Key>S2953</Key>
</Rule>
<Rule>
<Key>S3923</Key>
</Rule>
<Rule>
<Key>S125</Key>
</Rule>
<Rule>
<Key>S1607</Key>
</Rule>
<Rule>
<Key>S1848</Key>
</Rule>
<Rule>
<Key>S2930</Key>
</Rule>
<Rule>
<Key>S3903</Key>
</Rule>
<Rule>
<Key>S3904</Key>
</Rule>
<Rule>
<Key>S2933</Key>
</Rule>
<Rule>
<Key>S2934</Key>
</Rule>
<Rule>
<Key>S6422</Key>
</Rule>
<Rule>
<Key>S110</Key>
<Parameters>
<Parameter>
<Key>max</Key>
<Value>5</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2068</Key>
<Parameters>
<Parameter>
<Key>credentialWords</Key>
<Value>password, passwd, pwd, passphrase</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S5332</Key>
</Rule>
<Rule>
<Key>S112</Key>
</Rule>
<Rule>
<Key>S2187</Key>
</Rule>
<Rule>
<Key>S4487</Key>
</Rule>
<Rule>
<Key>S6424</Key>
</Rule>
<Rule>
<Key>S3397</Key>
</Rule>
<Rule>
<Key>S2184</Key>
</Rule>
<Rule>
<Key>S5693</Key>
<Parameters>
<Parameter>
<Key>fileUploadSizeLimit</Key>
<Value>8000000</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S6420</Key>
</Rule>
<Rule>
<Key>S107</Key>
<Parameters>
<Parameter>
<Key>max</Key>
<Value>7</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2183</Key>
</Rule>
<Rule>
<Key>S108</Key>
</Rule>
<Rule>
<Key>S4019</Key>
</Rule>
<Rule>
<Key>S3169</Key>
</Rule>
<Rule>
<Key>S3168</Key>
</Rule>
<Rule>
<Key>S4015</Key>
</Rule>
<Rule>
<Key>S4136</Key>
</Rule>
<Rule>
<Key>S2077</Key>
</Rule>
<Rule>
<Key>S2190</Key>
</Rule>
<Rule>
<Key>S1199</Key>
</Rule>
<Rule>
<Key>S3376</Key>
</Rule>
<Rule>
<Key>S1075</Key>
</Rule>
<Rule>
<Key>S3011</Key>
</Rule>
<Rule>
<Key>S3256</Key>
</Rule>
<Rule>
<Key>S4581</Key>
</Rule>
<Rule>
<Key>S4586</Key>
</Rule>
<Rule>
<Key>S3010</Key>
</Rule>
<Rule>
<Key>S3251</Key>
</Rule>
<Rule>
<Key>S4220</Key>
</Rule>
<Rule>
<Key>S4583</Key>
</Rule>
<Rule>
<Key>S5443</Key>
</Rule>
<Rule>
<Key>S2178</Key>
</Rule>
<Rule>
<Key>S3264</Key>
</Rule>
<Rule>
<Key>S3267</Key>
</Rule>
<Rule>
<Key>S101</Key>
</Rule>
<Rule>
<Key>S5445</Key>
</Rule>
<Rule>
<Key>S3262</Key>
</Rule>
<Rule>
<Key>S3265</Key>
</Rule>
<Rule>
<Key>S6419</Key>
</Rule>
<Rule>
<Key>S2053</Key>
</Rule>
<Rule>
<Key>S2292</Key>
</Rule>
<Rule>
<Key>S3263</Key>
</Rule>
<Rule>
<Key>S3260</Key>
</Rule>
<Rule>
<Key>S3261</Key>
</Rule>
<Rule>
<Key>S2290</Key>
</Rule>
<Rule>
<Key>S2291</Key>
</Rule>
<Rule>
<Key>S6444</Key>
</Rule>
<Rule>
<Key>S4144</Key>
</Rule>
<Rule>
<Key>S4143</Key>
</Rule>
<Rule>
<Key>S3172</Key>
</Rule>
<Rule>
<Key>S4159</Key>
</Rule>
<Rule>
<Key>S4260</Key>
</Rule>
<Rule>
<Key>S4036</Key>
</Rule>
<Rule>
<Key>S4277</Key>
</Rule>
<Rule>
<Key>S4035</Key>
</Rule>
<Rule>
<Key>S4158</Key>
</Rule>
<Rule>
<Key>S4275</Key>
</Rule>
<Rule>
<Key>S2092</Key>
</Rule>
<Rule>
<Key>S3060</Key>
</Rule>
<Rule>
<Key>S5122</Key>
</Rule>
</Rules>
<Files>
</Files>
</AnalysisInput>

View File

@ -1,477 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<AnalysisInput>
<Settings>
<Setting>
<Key>sonar.vbnet.ignoreHeaderComments</Key>
<Value>true</Value>
</Setting>
<Setting>
<Key>sonar.vbnet.file.suffixes</Key>
<Value>.vb</Value>
</Setting>
<Setting>
<Key>sonar.vbnet.roslyn.ignoreIssues</Key>
<Value>false</Value>
</Setting>
<Setting>
<Key>sonar.vbnet.analyzeGeneratedCode</Key>
<Value>false</Value>
</Setting>
</Settings>
<Rules>
<Rule>
<Key>S1654</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2225</Key>
</Rule>
<Rule>
<Key>S1135</Key>
</Rule>
<Rule>
<Key>S2344</Key>
</Rule>
<Rule>
<Key>S2346</Key>
</Rule>
<Rule>
<Key>S2347</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^(([a-z][a-z0-9]*)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?_)?([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S1134</Key>
</Rule>
<Rule>
<Key>S2342</Key>
<Parameters>
<Parameter>
<Key>flagsAttributeFormat</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?s$</Value>
</Parameter>
<Parameter>
<Key>format</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2345</Key>
</Rule>
<Rule>
<Key>S2068</Key>
<Parameters>
<Parameter>
<Key>credentialWords</Key>
<Value>password, passwd, pwd, passphrase</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2222</Key>
</Rule>
<Rule>
<Key>S6146</Key>
</Rule>
<Rule>
<Key>S112</Key>
</Rule>
<Rule>
<Key>S2340</Key>
</Rule>
<Rule>
<Key>S1656</Key>
</Rule>
<Rule>
<Key>S2349</Key>
</Rule>
<Rule>
<Key>S907</Key>
</Rule>
<Rule>
<Key>S6145</Key>
</Rule>
<Rule>
<Key>S5693</Key>
<Parameters>
<Parameter>
<Key>fileUploadSizeLimit</Key>
<Value>8000000</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S107</Key>
<Parameters>
<Parameter>
<Key>max</Key>
<Value>7</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S108</Key>
</Rule>
<Rule>
<Key>S1940</Key>
</Rule>
<Rule>
<Key>S2358</Key>
</Rule>
<Rule>
<Key>S1542</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2234</Key>
</Rule>
<Rule>
<Key>S2355</Key>
</Rule>
<Rule>
<Key>S4136</Key>
</Rule>
<Rule>
<Key>S2077</Key>
</Rule>
<Rule>
<Key>S2352</Key>
</Rule>
<Rule>
<Key>S2359</Key>
</Rule>
<Rule>
<Key>S2757</Key>
</Rule>
<Rule>
<Key>S3449</Key>
</Rule>
<Rule>
<Key>S114</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^I([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S117</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^[a-z][a-z0-9]*([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S3603</Key>
</Rule>
<Rule>
<Key>S3776</Key>
<Parameters>
<Parameter>
<Key>propertyThreshold</Key>
<Value>3</Value>
</Parameter>
<Parameter>
<Key>threshold</Key>
<Value>15</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S1110</Key>
</Rule>
<Rule>
<Key>S1751</Key>
</Rule>
<Rule>
<Key>S1871</Key>
</Rule>
<Rule>
<Key>S1075</Key>
</Rule>
<Rule>
<Key>S1197</Key>
</Rule>
<Rule>
<Key>S3011</Key>
</Rule>
<Rule>
<Key>S4586</Key>
</Rule>
<Rule>
<Key>S1479</Key>
<Parameters>
<Parameter>
<Key>maximum</Key>
<Value>30</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S4507</Key>
</Rule>
<Rule>
<Key>S4581</Key>
</Rule>
<Rule>
<Key>S1643</Key>
</Rule>
<Rule>
<Key>S4583</Key>
</Rule>
<Rule>
<Key>S1123</Key>
</Rule>
<Rule>
<Key>S1125</Key>
</Rule>
<Rule>
<Key>S1764</Key>
</Rule>
<Rule>
<Key>S101</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S2178</Key>
</Rule>
<Rule>
<Key>S5443</Key>
</Rule>
<Rule>
<Key>S5445</Key>
</Rule>
<Rule>
<Key>S2692</Key>
</Rule>
<Rule>
<Key>S2737</Key>
</Rule>
<Rule>
<Key>S3385</Key>
</Rule>
<Rule>
<Key>S1481</Key>
</Rule>
<Rule>
<Key>S1645</Key>
</Rule>
<Rule>
<Key>S2612</Key>
</Rule>
<Rule>
<Key>S3358</Key>
</Rule>
<Rule>
<Key>S5042</Key>
</Rule>
<Rule>
<Key>S2387</Key>
</Rule>
<Rule>
<Key>S3598</Key>
</Rule>
<Rule>
<Key>S3871</Key>
</Rule>
<Rule>
<Key>S4201</Key>
</Rule>
<Rule>
<Key>S1172</Key>
</Rule>
<Rule>
<Key>S2304</Key>
<Parameters>
<Parameter>
<Key>format</Key>
<Value>^([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?(\.([A-Z]{1,3}[a-z0-9]+)*([A-Z]{2})?)*$</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S3998</Key>
</Rule>
<Rule>
<Key>S5659</Key>
</Rule>
<Rule>
<Key>S1862</Key>
</Rule>
<Rule>
<Key>S2951</Key>
</Rule>
<Rule>
<Key>S5944</Key>
</Rule>
<Rule>
<Key>S3884</Key>
</Rule>
<Rule>
<Key>S5547</Key>
</Rule>
<Rule>
<Key>S1066</Key>
</Rule>
<Rule>
<Key>S2551</Key>
</Rule>
<Rule>
<Key>S4210</Key>
</Rule>
<Rule>
<Key>S5542</Key>
</Rule>
<Rule>
<Key>S1186</Key>
</Rule>
<Rule>
<Key>S3923</Key>
</Rule>
<Rule>
<Key>S3926</Key>
</Rule>
<Rule>
<Key>S3927</Key>
</Rule>
<Rule>
<Key>S2437</Key>
</Rule>
<Rule>
<Key>S3889</Key>
</Rule>
<Rule>
<Key>S1313</Key>
</Rule>
<Rule>
<Key>S2368</Key>
</Rule>
<Rule>
<Key>S4423</Key>
</Rule>
<Rule>
<Key>S1155</Key>
</Rule>
<Rule>
<Key>S6444</Key>
</Rule>
<Rule>
<Key>S2761</Key>
</Rule>
<Rule>
<Key>S3453</Key>
</Rule>
<Rule>
<Key>S2365</Key>
</Rule>
<Rule>
<Key>S4144</Key>
</Rule>
<Rule>
<Key>S5753</Key>
</Rule>
<Rule>
<Key>S4428</Key>
</Rule>
<Rule>
<Key>S927</Key>
</Rule>
<Rule>
<Key>S4143</Key>
</Rule>
<Rule>
<Key>S4260</Key>
</Rule>
<Rule>
<Key>S1048</Key>
</Rule>
<Rule>
<Key>S2259</Key>
</Rule>
<Rule>
<Key>S4159</Key>
</Rule>
<Rule>
<Key>S4830</Key>
</Rule>
<Rule>
<Key>S2257</Key>
</Rule>
<Rule>
<Key>S2375</Key>
<Parameters>
<Parameter>
<Key>minimumSeriesLength</Key>
<Value>6</Value>
</Parameter>
</Parameters>
</Rule>
<Rule>
<Key>S3466</Key>
</Rule>
<Rule>
<Key>S4036</Key>
</Rule>
<Rule>
<Key>S3464</Key>
</Rule>
<Rule>
<Key>S3981</Key>
</Rule>
<Rule>
<Key>S4277</Key>
</Rule>
<Rule>
<Key>S2376</Key>
</Rule>
<Rule>
<Key>S1163</Key>
</Rule>
<Rule>
<Key>S3903</Key>
</Rule>
<Rule>
<Key>S3904</Key>
</Rule>
<Rule>
<Key>S2372</Key>
</Rule>
<Rule>
<Key>S3869</Key>
</Rule>
<Rule>
<Key>S4790</Key>
</Rule>
<Rule>
<Key>S4275</Key>
</Rule>
<Rule>
<Key>S4792</Key>
</Rule>
</Rules>
<Files>
</Files>
</AnalysisInput>

View File

@ -1,6 +0,0 @@
projectKey=as400api
serverUrl=http://host.docker.internal:9000
serverVersion=9.9.8.100196
dashboardUrl=http://host.docker.internal:9000/dashboard?id=as400api
ceTaskId=AZmtj01mSkXasGRcHif1
ceTaskUrl=http://host.docker.internal:9000/api/ce/task?id=AZmtj01mSkXasGRcHif1

View File

@ -1,625 +0,0 @@
{
"$schema": "http://json.schemastore.org/sarif-1.0.0",
"version": "1.0.0",
"runs": [
{
"tool": {
"name": "Microsoft (R) Visual C# Compiler",
"version": "4.14.0.0",
"fileVersion": "4.14.0-3.25413.5 (b828a8df)",
"semanticVersion": "4.14.0",
"language": "en-US"
},
"results": [
{
"ruleId": "S125",
"level": "warning",
"message": "Remove this commented out code.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 147,
"startColumn": 17,
"endLine": 147,
"endColumn": 97
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S125",
"level": "warning",
"message": "Remove this commented out code.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Program.cs",
"region": {
"startLine": 11,
"startColumn": 1,
"endLine": 11,
"endColumn": 53
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S2068",
"level": "warning",
"message": "\"password\" detected here, make sure this is not a hard-coded credential.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/appsettings.json",
"region": {
"startLine": 6,
"startColumn": 18,
"endLine": 6,
"endColumn": 24
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S1144",
"level": "warning",
"message": "Remove the unused private field 'LibraryNamePattern'.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 152,
"startColumn": 5,
"endLine": 152,
"endColumn": 125
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S101",
"level": "warning",
"message": "Rename class 'ORDUAGEndpoint' to match pascal case naming rules, consider using 'OrduagEndpoint'.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 15,
"startColumn": 21,
"endLine": 15,
"endColumn": 35
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S6444",
"level": "warning",
"message": "Pass a timeout to limit the execution time.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 152,
"startColumn": 56,
"endLine": 152,
"endColumn": 124
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "SYSLIB1045",
"level": "note",
"message": "Use 'GeneratedRegexAttribute' to generate the regular expression implementation at compile-time.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 152,
"startColumn": 56,
"endLine": 152,
"endColumn": 124
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "S3776",
"level": "warning",
"message": "Refactor this method to reduce its Cognitive Complexity from 20 to the 15 allowed.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 16,
"startColumn": 37,
"endLine": 16,
"endColumn": 54
}
}
}
],
"relatedLocations": [
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 24,
"startColumn": 17,
"endLine": 24,
"endColumn": 19
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 36,
"startColumn": 13,
"endLine": 36,
"endColumn": 18
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 59,
"startColumn": 13,
"endLine": 59,
"endColumn": 18
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 74,
"startColumn": 17,
"endLine": 74,
"endColumn": 19
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 92,
"startColumn": 13,
"endLine": 92,
"endColumn": 18
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 107,
"startColumn": 17,
"endLine": 107,
"endColumn": 19
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 107,
"startColumn": 60,
"endLine": 107,
"endColumn": 62
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 135,
"startColumn": 21,
"endLine": 135,
"endColumn": 26
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 138,
"startColumn": 25,
"endLine": 138,
"endColumn": 28
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/As400Endpoints.cs",
"region": {
"startLine": 154,
"startColumn": 13,
"endLine": 154,
"endColumn": 18
}
}
}
],
"properties": {
"warningLevel": 1,
"customProperties": {
"0": "+2 (incl 1 for nesting)",
"1": "+2 (incl 1 for nesting)",
"2": "+2 (incl 1 for nesting)",
"3": "+2 (incl 1 for nesting)",
"4": "+2 (incl 1 for nesting)",
"5": "+2 (incl 1 for nesting)",
"6": "+1",
"7": "+2 (incl 1 for nesting)",
"8": "+3 (incl 2 for nesting)",
"9": "+2 (incl 1 for nesting)"
}
}
},
{
"ruleId": "S3776",
"level": "warning",
"message": "Refactor this method to reduce its Cognitive Complexity from 19 to the 15 allowed.",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 154,
"startColumn": 37,
"endLine": 154,
"endColumn": 55
}
}
}
],
"relatedLocations": [
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 167,
"startColumn": 21,
"endLine": 167,
"endColumn": 23
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 177,
"startColumn": 21,
"endLine": 177,
"endColumn": 23
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 192,
"startColumn": 21,
"endLine": 192,
"endColumn": 23
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 198,
"startColumn": 21,
"endLine": 198,
"endColumn": 23
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 204,
"startColumn": 21,
"endLine": 204,
"endColumn": 23
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 219,
"startColumn": 21,
"endLine": 219,
"endColumn": 28
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 229,
"startColumn": 25,
"endLine": 229,
"endColumn": 30
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 232,
"startColumn": 29,
"endLine": 232,
"endColumn": 32
}
}
},
{
"physicalLocation": {
"uri": "file:///workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",
"region": {
"startLine": 254,
"startColumn": 17,
"endLine": 254,
"endColumn": 22
}
}
}
],
"properties": {
"warningLevel": 1,
"customProperties": {
"0": "+2 (incl 1 for nesting)",
"1": "+2 (incl 1 for nesting)",
"2": "+2 (incl 1 for nesting)",
"3": "+2 (incl 1 for nesting)",
"4": "+2 (incl 1 for nesting)",
"5": "+2 (incl 1 for nesting)",
"6": "+2 (incl 1 for nesting)",
"7": "+3 (incl 2 for nesting)",
"8": "+2 (incl 1 for nesting)"
}
}
},
{
"ruleId": "ASP0025",
"level": "note",
"message": "Use AddAuthorizationBuilder to register authorization services and construct policies",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Program.cs",
"region": {
"startLine": 100,
"startColumn": 1,
"endLine": 106,
"endColumn": 3
}
}
}
],
"properties": {
"warningLevel": 1
}
},
{
"ruleId": "CA1861",
"level": "note",
"message": "Prefer 'static readonly' fields over constant array arguments if the called method is called repeatedly and is not mutating the passed array",
"locations": [
{
"resultFile": {
"uri": "file:///workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs",
"region": {
"startLine": 48,
"startColumn": 20,
"endLine": 48,
"endColumn": 43
}
}
}
],
"properties": {
"warningLevel": 1,
"customProperties": {
"paramName": "separator"
}
}
}
],
"rules": {
"ASP0025": {
"id": "ASP0025",
"shortDescription": "Use AddAuthorizationBuilder",
"defaultLevel": "note",
"helpUri": "https://aka.ms/aspnet/analyzers",
"properties": {
"category": "Usage",
"isEnabledByDefault": true
}
},
"CA1861": {
"id": "CA1861",
"shortDescription": "Avoid constant arrays as arguments",
"fullDescription": "Constant arrays passed as arguments are not reused when called repeatedly, which implies a new array is created each time. Consider extracting them to 'static readonly' fields to improve performance if the passed array is not mutated within the called method.",
"defaultLevel": "note",
"helpUri": "https://learn.microsoft.com/dotnet/fundamentals/code-analysis/quality-rules/ca1861",
"properties": {
"category": "Performance",
"isEnabledByDefault": true,
"tags": [
"Telemetry",
"EnabledRuleInAggressiveMode"
]
}
},
"S101": {
"id": "S101",
"shortDescription": "Types should be named in PascalCase",
"fullDescription": "Shared naming conventions allow teams to collaborate efficiently. This rule checks whether or not type names are using PascalCase. To reduce noise, two consecutive upper case characters are allowed unless they form the whole type name. So, MyXClass is compliant, but XC on its own is not.",
"defaultLevel": "warning",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-101",
"properties": {
"category": "Minor Code Smell",
"isEnabledByDefault": true,
"tags": [
"C#",
"MainSourceScope",
"TestSourceScope",
"SonarWay"
]
}
},
"S1144": {
"id": "S1144",
"shortDescription": "Unused private types or members should be removed",
"fullDescription": "private or internal types or private members that are never executed or referenced are dead code: unnecessary, inoperative code that should be removed. Cleaning out dead code decreases the size of the maintained codebase, making it easier to understand the program and preventing bugs from being introduced.",
"defaultLevel": "note",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-1144",
"properties": {
"category": "Major Code Smell",
"isEnabledByDefault": true,
"tags": [
"C#",
"MainSourceScope",
"TestSourceScope",
"SonarWay",
"Unnecessary"
]
}
},
"S125": {
"id": "S125",
"shortDescription": "Sections of code should not be commented out",
"fullDescription": "Programmers should not comment out code as it bloats programs and reduces readability.",
"defaultLevel": "warning",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-125",
"properties": {
"category": "Major Code Smell",
"isEnabledByDefault": true,
"tags": [
"C#",
"MainSourceScope",
"TestSourceScope",
"SonarWay"
]
}
},
"S2068": {
"id": "S2068",
"shortDescription": "Hard-coded credentials are security-sensitive",
"fullDescription": "Because it is easy to extract strings from an application source code or binary, credentials should not be hard-coded. This is particularly true for applications that are distributed or that are open-source.",
"defaultLevel": "warning",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-2068",
"properties": {
"category": "Blocker Security Hotspot",
"isEnabledByDefault": true,
"tags": [
"C#",
"MainSourceScope",
"SonarWay"
]
}
},
"S3776": {
"id": "S3776",
"shortDescription": "Cognitive Complexity of methods should not be too high",
"fullDescription": "Cognitive Complexity is a measure of how hard the control flow of a method is to understand. Methods with high Cognitive Complexity will be difficult to maintain.",
"defaultLevel": "warning",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-3776",
"properties": {
"category": "Critical Code Smell",
"isEnabledByDefault": false,
"tags": [
"C#",
"MainSourceScope",
"TestSourceScope",
"SonarWay"
]
}
},
"S6444": {
"id": "S6444",
"shortDescription": "Not specifying a timeout for regular expressions is security-sensitive",
"fullDescription": "Not specifying a timeout for regular expressions can lead to a Denial-of-Service attack. Pass a timeout when using System.Text.RegularExpressions to process untrusted input because a malicious user might craft a value for which the evaluation lasts excessively long.",
"defaultLevel": "warning",
"helpUri": "https://rules.sonarsource.com/csharp/RSPEC-6444",
"properties": {
"category": "Major Security Hotspot",
"isEnabledByDefault": true,
"tags": [
"C#",
"MainSourceScope",
"SonarWay"
]
}
},
"SYSLIB1045": {
"id": "SYSLIB1045",
"shortDescription": "Convert to 'GeneratedRegexAttribute'.",
"defaultLevel": "note",
"helpUri": "https://learn.microsoft.com/dotnet/fundamentals/syslib-diagnostics/syslib1045",
"properties": {
"category": "Performance",
"isEnabledByDefault": true
}
}
}
}
]
}

View File

@ -1,30 +0,0 @@
5
)/workspaces/AS400API/Auth/AuthPolicies.csrH
%/workspaces/AS400API/Auth/DemoUser.cs 8r

]
*/workspaces/AS400API/Auth/DemoUserStore.cs 8r  !"  1
)/workspaces/AS400API/Auth/LoginRequest.csr3
*/workspaces/AS400API/Auth/LoginResponse.csrX
+/workspaces/AS400API/Auth/PasswordHasher.cs 8r
.
"/workspaces/AS400API/Auth/Roles.csrn
)/workspaces/AS400API/Auth/TokenService.cs 8r(  "#$%'()*+,./0x "$()+.[
0/workspaces/AS400API/Configuration/JwtOptions.cs 8 r
xp
1/workspaces/AS400API/Configuration/OdbcOptions.cs 8j r
 !"#$%&x  !"#$Ç
0/workspaces/AS400API/Endpoints/As400Endpoints.csD 8 j 
 !"#$%&'()*+,-/0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUWXYZ[\]^_`abcefghijklmnoqrstuvwyz|}~€<01>ˆŠŒ<01><01><01>˜šœ<01>žŸ¡£¤¥xN !"&'*/146789=>ADFIJLMWXYZ^_begjkmnyz|}~€<01>ŠŒ<01>˜œ<01>£«
6/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs5 8j
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<01>ƒˆŠŒ<01>Ž<01><01>˜šœ<01>žŸ ¡¢£¤¦§¨©ª«­®°±²³´¸¹º»¼¾ÀÁÂÃÄÆÇÈÉÊÌÍÎÏÐÒÓÕÖØÙÛÜÝÞßàâãäåæçèéêëìîïðòóôõö÷øùûüýþÿ<02>ƒˆŠŒŽ<02>xh˜œ¡¤¦§©ª­®±³¹º»¼ÀÂÃÆÈÉÌÎÏÒÓÕÖØÙÛÝÞßãåçèêëîòôõö÷ûü<02>z
//workspaces/AS400API/Endpoints/AuthEndpoints.cs 8 r*  !"#%&'()*+,./0x!"#%'().u
1/workspaces/AS400API/Endpoints/SystemEndpoints.cs 8r&
!"#$%&')*+x !%)³
;/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs 8rK
 !"#%&()*+,-/01245679:;<=>?ABDEFGHIJKLNOPQRSUVWx !"%*,/01469<>AEFIKNOQUo
;/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs 8r
x
Û
/workspaces/AS400API/Program.csQ8j *„rj  !#$%&'(+,-/012345689:;<=>?@ABCDEGHIJKLMNOPQSTUVWXYZ[\]^_`abdefghijlnopqrtvwy{|}~<>x;  !#$%'+,-/02<=BGHJMNOPQSTUWZ\`dfghilnpqtvwy{|}~<>

View File

@ -1,448 +0,0 @@
O
)/workspaces/AS400API/Auth/AuthPolicies.cs
 
 '

%/workspaces/AS400API/Auth/DemoUser.cs
 
 #   
, 8

 #
A M   #
k p   
    
 

 
    
' ,   à
*/workspaces/AS400API/Auth/DemoUserStore.cs
 !
  2 8    
 /
7 ? #
- 1$ (
 #
- 1( ,; ?
: B &
 & " %
. 6   $
? G7 ?
e j  2 7
   & *
   , 0O
)/workspaces/AS400API/Auth/LoginRequest.cs
 !
) 1
: Bh
*/workspaces/AS400API/Auth/LoginResponse.cs
 "
* 5
; D
M V
t y÷
+/workspaces/AS400API/Auth/PasswordHasher.cs
 "
   2 :


 f mo v
   Z dc m
  - 9
  A I- 5
 7 ;J N
 ' 0
 
% -1 9
6 @3 =
I S1 ;
 ; D
 D Q
 7 BH
"/workspaces/AS400API/Auth/Roles.cs
 
 
 £
)/workspaces/AS400API/Auth/TokenService.cs
   <
   ( < D(( )) ++0 8
- :.. 
# * 
 (
' +- 1! %"" !
 ,, 2
 $$ ** 
'' ..( -¤
0/workspaces/AS400API/Configuration/JwtOptions.cs
 
 #


 
   
   & )I L
   ) &
 ©
1/workspaces/AS400API/Configuration/OdbcOptions.cs
 
  
   #' 7X h


 ' +? C
   ' /C K
   ' -  D J
 !!' 0!!J S
 ""' 3""Q ]
 ## 
 $
  "Z
 : ?. 32 7  0 5!!3 8""6 ;## $$
0/workspaces/AS400API/Endpoints/As400Endpoints.cs
 "
$ 5>
M R // DD ee 
££ (
6 9. 1Y \2 5
J N " &
_ l &2
   !! && 
    $
   !!O X""" +
//B F44 66% )
//W d11 &
11 88 == 
55 %665 =
66 77 '
77 88H Q99" +2
DD7 BJJ. 9WWD OXXk v^^Z e
DDS WII WW$ (
DDh uFF &(
FF LL XX ^^ 
PP %WW4 <
WW XX] cYY &
YY ZZ" +6
ee@ Kkk. 9}}) 4
f q
œœT _8
eeT ]kkX a
<08><10>' 0
s |
œœa j
een rjj yy* .
eeƒ <20>gg &,
gg mm 
 
œœ 
qq %zz& .L
yy 'zz ||' .~~ 
% ,
 
0 7
|| $}} ~~' 7$
 "
<08><10> 
' 50
 
<08><10> 
W ^
 '<
! '
! '
ŠŠ, 2
ŒŒ &
ŒŒ5 ;$
 
ŒŒ 
<08><10>$ '<
ŠŠ! "
ŠŠ( )
ŠŠ? @
ŒŒ/ 0
ŒŒO P
 
˜˜" +
/ 3
7 ;ä
6/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs
 "
% 0
ºº= H
˜˜" 4
šš$ 6$
ššN S
œœ 
 œ
<08><10>+ 0
¦¦ $
©©X ]
­­# (
ÀÀ3 8
ÃÃ, 1
ÆÆ3 8
ÉÉ, 1
ÌÌ3 8
ÏÏ, 1
õõ 
öö 
÷÷ $
žž #
¤¤ 
ØØ. 2
ŸŸ ,
¡¡ *0
¡¡ 
©© 
òò 
 <
¦¦ 
§§ 
ªª 
°°, 0
øø H
­­ 
®® 
®®* 2
°°8 @
ÖÖ( 0
ùù $
°° "
±± "
& 0
 
ÕÕ( .
¸¸ "
¹¹ 
ºº 
»» 
¼¼ 
ÂÂ "
ÈÈ "
ÎÎ "
ÒÒ 
ÓÓ 
ÙÙ* 4
ººP V
ººa gT
¾¾ '
ÃÃ '
ÉÉ '
ÏÏ '
ÕÕ #
ÖÖ #
ÛÛ* 9<
ØØ$ +
ÙÙ 
ÝÝ( /
ßß 
ãã4 ;$
ÝÝ %
ÞÞ !
ßß/ 80
ââ 
îî 
ôô 
ûû$ (<
ãã% +
åå% +
èè0 6
êê, 2
ëë$ *$
çç #
ëë #
îî% (<
èè% &
èè, -
èèC D
êêF G
ëë3 4
êê$ )
ëë9 >
ûû !
üü& /
ûû0 4
ûû8 <
ŠŠ #
<08><10> *0
ŒŒ !
ÀÀ9 C
ÃÃ2 <
õõ (0
ŽŽ "
ÆÆ9 D
ÉÉ2 =
öö )0
<08><10> 
ÌÌ9 B
ÏÏ2 ;
÷÷ '$
 
¦¦% )
©©^ b
 
­­) 1¶
//workspaces/AS400API/Endpoints/AuthEndpoints.cs
   !
  $ 4(
  L Q %% .. <
J Q = Dl s7 >E L
a j &! *
y … *
 œ= G2
  ? C7 ;s w
 0 ;(
%%6 :'' ''2 6(( 
'' ))$ ,
(( )). 3
((= >((B C<>
1/workspaces/AS400API/Endpoints/SystemEndpoints.cs
   #
  ( 8
  T W    
$ 6
N S )) 
9 =  $
  ) ,
   "
 S TÇ
;/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs
 (


< S


n r   
3 7 !
/ D
f l "
 "" %% 
!! "" 
(( %!!E P2
((- 2**! &,, // 66 F
// 44 99 ;; "EE FF $HH "
11 11 2
;; << >> AA) 0AA7 >2
DD EE
NN QQ UU (
FF FF FF- .HH# $2
HH II NN, 3OO QQ !‰
;/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs
 (
 ,(
? E

   %(
K R

 #$ +6 =
   
 ' "(
 & 2  õ
/workspaces/AS400API/Program.cs
     + 6v
     ++ // 00 MM NN OO PP QQ SS dd ll

  '
" *
, ? n
 . 2     !! ## "$$ "%% "MM "NNC G:
++ ,,
--A KOO (ZZ $\\ &
-- ^^ )(
00 &22 GG HH (
88 GG" 0GG? MJJ

NN+ ,
UU WW 
dd" )ff hh 
ff4 :gg 
hh1 7ii \
ll nn pp qq tt vv ww yy {{
<08><10> *
{{ || }} ~~  

File diff suppressed because it is too large Load Diff

View File

@ -1,437 +0,0 @@
Ý
)/workspaces/AS400API/Auth/AuthPolicies.cs
 
        
     * ; 
     ' 5<>
%/workspaces/AS400API/Auth/DemoUser.cs
 
 
        
     % + : @ O b c i 
     
   ! $ 
   ! $ 
    % / 2²
*/workspaces/AS400API/Auth/DemoUserStore.cs
 
 
 
 
       !                &   ( 0   
                &   ( 0   2 @   # * , 6 8 ; @ E M R   & 0 2 < > A F K 
     0 6 % ( ) ,     
   $ , 3 9         ' - 8 > I \ ] c    )            
)/workspaces/AS400API/Auth/LoginRequest.cs
 
       ! " ( 3 9À
*/workspaces/AS400API/Auth/LoginResponse.cs
 
 
       " # ) 7 : F L X k l rÃ
+/workspaces/AS400API/Auth/PasswordHasher.cs
 
 
 
 
       "               ! # 

  

  

  

 "               # *   
            &   : @    (    % = M     3 : 
      $ / 5 B H        ) F V    !   
"/workspaces/AS400API/Auth/Roles.cs
 
        
      ' 
     # -<2D>
)/workspaces/AS400API/Auth/TokenService.cs
 
 
 
 
 
 
 
  
                                , = @ 
    " 
    &   ! $ % 7    $ % -          #    '    ' - 1     ""  ""  ""  $$  $$  $$! + ''  ''  '' ( ++  .. ¼
0/workspaces/AS400API/Configuration/JwtOptions.cs
 
 
 
        
     & + 


 

  

  

 # 

) 3   
           " %   + =   
               & I   
       , /   1 4   : < 
   
   . 6 P R      / 0  
 * +      / 0 k‡
1/workspaces/AS400API/Configuration/OdbcOptions.cs
 
 
 
        
     ! $   
       & )   + . 


 

  

  

 "   
        !   # &        Z   
     ! $ 
    " $ ' - 0 
   " % ' * 0 7 
      " ( , 
    @    $ < O T n        #     # % % &       
   D F F W i j 
   8 : : > D E 
   < > > B L M   
       : <   < C   K L !!
 !!  !!= ? !!? I !!T U ""
 ""  ""@ B ""B P ""^ _ ##
 ## - $$  $$  $$ ë
0/workspaces/AS400API/Endpoints/As400Endpoints.cs
 
 
 
 
 
 
 
 
  



  
       " 
    # 6 : ; L  & ( - / 5 ; I P ^   4 H         & _    " . 1 < ` & W h i    !     !!& M ""  ""  $$  $$  &&$ 9 ''  ''  ''' ) '') 7 ''C D ** * ++ Q ,,  --  // * //, 1 //3 A //H V 11  114 L 22  44  55  55  55( x 66  66 $ 77  88& F 99  99  ;;  ;;  ==$ C >>  >>  >>' ) >>) A >>M N AA * BB K DD ' DD) . DD0 6 DDD R DDY g FF  FF4 I GG  II  JJ  JJ  LL& _ MM  MM " MM. 1 MM< h PP  PP  PU(  WW  WW # WW> A XX& [ YY  ZZ  ZZ  \\  \\  ^^$ X __  __  __' ) __) @ __L M bb * cc I ee 0 ee2 7 ee9 ? eeM S ee_ m  eet  gg  gg4 Q hh  jj  kk  kk  kk> D mm& x nn  nn " nn. 1 nn< z qq  qq  qw(  yy  yy  yy  || 
 
 
 !
" &
' 2
3 9
; A
 
 
 
* /
 
 
 
" %
& 0
1 7
9 ?
A O
ŠŠ 
ŠŠ 
ŠŠ% &
 `
 3
& U
 
˜˜ 
˜˜ 
šš 
šš 
œœ$ R
<08><10> 
<08><10> 
<08><10>' )
<08><10>) A
<08><10>M N
   >
¡¡ X
££ ­"
6/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs
 
 
 
 
 
 
 
 
  



  
  
       "        "                               !!  ""  ##  $$  %%  &&  ''  ((  ))  **  ++  ,,  --  ..  //  00  11  22 # 33  44  55  66  77  88  99  ::  ;;  << # ==  >>  ??  @@  AA  BB  CC  DD  EE  FF  GG  HH  II  JJ  KK " LL " MM " NN " OO " PP " QQ " RR " SS " TT # UU # VV # WW " XX  YY $ ZZ ! [[ $ \\ ! ]] " ^^  __ ! ``  aa ! bb  cc  dd  ee $ ff ! gg % hh " ii  jj  kk  ll  mm  nn  oo  pp  qq  rr  ss  tt  uu  vv  ww  xx  yy  zz  {{  ||  }}  ~~   
 
<08><10> 
 
ƒƒ 
 
 
 
 
ˆˆ 
 
ŠŠ 
 
ŒŒ 
<08><10> 
ŽŽ 
<08><10> 
<08><10> 
 
 
 
 
 
˜˜ 
˜˜ 
˜˜ 
˜˜ !
˜˜7 :
˜˜; I
˜˜K W
˜˜c o
šš

šš 
šš #
šš7 ;
šš< M
œœ '
œœ) .
<08><10> 
<08><10> *
žž 
ŸŸ 
¡¡ 
¡¡8 H
¢¢ 
¤¤ 
¦¦ 
¦¦< =
§§ 
§§ 
©©* V
ªª 
­­ 
­­D F
®® #
®®4 5
®®7 :
°° 
°°& *
°°3 4
±± 
±±% (
³³ 
³³ &
³³2 5
³³@ ^
 
" %
¸¸ 
¸¸% (
¸¸) 6
¹¹* 2
ºº* 0
ºº6 ;
ººZ \
ººh i
»»* ?
¼¼* 7
¾¾ 
¾¾* -
¾¾. 2
¾¾3 9
ÀÀ 
ÀÀ 
ÂÂ. H
ÆÆ 
ÆÆ 
ÈÈ. F
ÌÌ 
ÌÌ 
ÎÎ. D
ÒÒ* C
ÓÓ* P
ØØ 
ØØ 
ØØ #
ÛÛ 
ÛÛ 
ÛÛ' )
ÝÝ 
ââ 
ââ "
ââ# '
ââ( 3
ââ4 :
ââ< B
ãã 
ãã 
ãã! $
ãã. 3
åå 
åå $
çç 
çç& )
çç* 4
çç5 ;
çç= C
ççE S
èè 
èè! $
èè) *
êê # óó ž
ûû 
üü 
üü "
þþ 
þþ 
( Q
<08><10> 
<08><10> "
<08><10>+ -
<08><10>- D
<08><10>P Q
 B
 M
 
ŠŠ

ŠŠ 
ŠŠ 
ŠŠ #
ŒŒ 
ŒŒ 
ŒŒ$ '
ŒŒ) -
ŽŽ 
ŽŽ 
ŽŽ% (
ŽŽ* .
<08><10> 
<08><10> 
<08><10># &
<08><10>( ,
 
 
 
 $
 
 
 "
$ (¯
//workspaces/AS400API/Endpoints/AuthEndpoints.cs
 
 
 
 
 
 
 
  
              !   
        #   5 9   : K  & ( - . 2 3 : = I S ` l x
        # ) R X     * - 8 ]                      ! " / e g i q    B !!  !!! , ""  ##  %% # %%& 5 ''  ''F ] ''f o ((  ((% / ))  ))  )) ! ,, O .. î
1/workspaces/AS400API/Endpoints/SystemEndpoints.cs
 
 
 
 
 
 
              #   
        '   9 =   > S        %   ) ,   6 @   K O   
    # 7 ; < M  ! # ( * 8         " Y     # (       / 0    " & ) 4 < ^ j  y <20> !!  !!  !!" % !!0 8 !!A J ##  ##  %%  %%  %%' ) %%) B %%N O )) ·
;/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs
 
 
 
 
 
       ( 


 

  

  

 ) 

* 0 

2 8 

T X 

Y d 

e l                  " # ) + 1             ! + , 2 4 :   
      $ & , E I J U V \ ^ d      # $ * , 2 5 C       !!  !!  %%  ((  ((  ((  ((& , **
 **  ,,  //  00  00  00 # 00% ( 00, > 44
 44  66  99
 99  ;;  ;;# $ <<  <<" # >>  AA  AA  AA1 2 AA? @ DD  DD  DD " EE  FF  FF  FF  HH  II  II" # KK  NN  NN4 5 OO  OO! " QQ" # UU Ë
;/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs
 
 
 
       ( 
     - 1 2 > G J 


           
           + 1 3 C * 3 5 E    §
/workspaces/AS400API/Program.cs
 
 
 
 
 
 
 
 
  
  4
         & ,
      
 
      ! '
 ,   3 A  % = V   1 =       5 E !!  !!3 A !!F I
##  ##
 $$
 %%
 ''  '' o
** 
++  ++2 < ++N X ++_ b ++c m
--  --  -- ) --* 2 22  22  22! , 44  55  88  88  88 2 ::  ;; I <<  == ! >>  ??  @@  @@ ( BB  CC  HH# & HH' A JJ  JJ& , NN ) NN0 3 NN4 B PP * QQ + TT ( WW, / WW0 I YY ! [[ # ]]' + __ # ``  ``- . ff " gg  gg( - hh " ii 
ll 
nn 
{{  {{   1  F

View File

@ -1,104 +0,0 @@
{
"scannerProperties": [
{
"key": "sonar.scanner.app",
"value": "ScannerMSBuild"
},
{
"key": "sonar.scanner.appVersion",
"value": "10.4.1"
},
{
"key": "sonar.projectKey",
"value": "as400api"
},
{
"key": "sonar.projectName",
"value": "AS400API"
},
{
"key": "sonar.working.directory",
"value": "/workspaces/AS400API/.sonarqube/out/.sonar"
},
{
"key": "sonar.projectBaseDir",
"value": "/workspaces/AS400API"
},
{
"key": "sonar.pullrequest.cache.basepath",
"value": "/workspaces/AS400API"
},
{
"key": "sonar.sources",
"value": ""
},
{
"key": "sonar.tests",
"value": ""
},
{
"key": "sonar.modules",
"value": "40CB5B53-77B8-B1FD-458C-805350CB09E8"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectKey",
"value": "as400api:40CB5B53-77B8-B1FD-458C-805350CB09E8"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectName",
"value": "AS400API"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectBaseDir",
"value": "/workspaces/AS400API"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.working.directory",
"value": "/workspaces/AS400API/.sonarqube/out/.sonar/mod0"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.sourceEncoding",
"value": "utf-8"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.tests",
"value": ""
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.sources",
"value": "/workspaces/AS400API/Auth/AuthPolicies.cs,/workspaces/AS400API/Auth/DemoUser.cs,/workspaces/AS400API/Auth/DemoUserStore.cs,/workspaces/AS400API/Auth/LoginRequest.cs,/workspaces/AS400API/Auth/LoginResponse.cs,/workspaces/AS400API/Auth/PasswordHasher.cs,/workspaces/AS400API/Auth/Roles.cs,/workspaces/AS400API/Auth/TokenService.cs,/workspaces/AS400API/Configuration/JwtOptions.cs,/workspaces/AS400API/Configuration/OdbcOptions.cs,/workspaces/AS400API/Endpoints/As400Endpoints.cs,/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs,/workspaces/AS400API/Endpoints/AuthEndpoints.cs,/workspaces/AS400API/Endpoints/SystemEndpoints.cs,/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs,/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs,/workspaces/AS400API/Program.cs,/workspaces/AS400API/obj/Debug/net9.0/AS400API.GlobalUsings.g.cs,\"/workspaces/AS400API/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs\",/workspaces/AS400API/obj/Debug/net9.0/AS400API.AssemblyInfo.cs,/workspaces/AS400API/obj/Debug/net9.0/AS400API.MvcApplicationPartsAssemblyInfo.cs,/workspaces/AS400API/appsettings.json,/workspaces/AS400API/.dockerignore,/workspaces/AS400API/docker-compose.yml,/workspaces/AS400API/docker/odbc/odbc.ini,/workspaces/AS400API/docker/odbc/odbcinst.ini,/workspaces/AS400API/Dockerfile,/workspaces/AS400API/drivers/ibm-iaccess-1.1.0.28-1.0.x86_64.rpm,/workspaces/AS400API/Logs/as400-api-20251001.log,/workspaces/AS400API/Logs/as400-api-20251002.log,/workspaces/AS400API/Logs/as400-api-20251003.log,/workspaces/AS400API/Logs/as400-api-20251004.log,/workspaces/AS400API/README.md,/workspaces/AS400API/scripts/run-sonar.sh,/workspaces/AS400API/scripts/test-databases.sh,/workspaces/AS400API/obj/AS400API.csproj.nuget.dgspec.json,/workspaces/AS400API/obj/project.assets.json,/workspaces/AS400API/.devcontainer/Dockerfile,/workspaces/AS400API/.devcontainer/devcontainer.json,/workspaces/AS400API/.vscode/launch.json,/workspaces/AS400API/.vscode/tasks.json,/workspaces/AS400API/obj/Debug/net9.0/staticwebassets.build.json,/workspaces/AS400API/obj/Debug/net9.0/staticwebassets.build.endpoints.json,/workspaces/AS400API/obj/Debug/net9.0/rjsmrazor.dswa.cache.json,/workspaces/AS400API/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json,/workspaces/AS400API/obj/Debug/net9.0/rpswa.dswa.cache.json,/workspaces/AS400API/bin/Debug/net9.0/AS400API.deps.json,/workspaces/AS400API/bin/Debug/net9.0/appsettings.json,/workspaces/AS400API/bin/Debug/net9.0/AS400API.runtimeconfig.json,/workspaces/AS400API/bin/Debug/net9.0/AS400API.staticwebassets.endpoints.json"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.analyzer.projectOutPaths",
"value": "/workspaces/AS400API/.sonarqube/out/0"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.roslyn.reportFilePaths",
"value": "/workspaces/AS400API/.sonarqube/out/0/Issues.json"
},
{
"key": "40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.scanner.telemetry",
"value": "/workspaces/AS400API/.sonarqube/out/0/Telemetry.json"
},
{
"key": "sonar.login",
"value": "***"
},
{
"key": "sonar.host.url",
"value": "http://host.docker.internal:9000"
},
{
"key": "sonar.cs.opencover.reportsPaths",
"value": "**/coverage.opencover.xml"
},
{
"key": "sonar.exclusions",
"value": "**/bin/**,**/obj/**,**/coverage.opencover.xml"
},
{
"key": "sonar.visualstudio.enable",
"value": "false"
}
]
}

View File

@ -1,78 +0,0 @@
sonar.projectKey=as400api
sonar.projectName=AS400API
sonar.working.directory=/workspaces/AS400API/.sonarqube/out/.sonar
sonar.projectBaseDir=/workspaces/AS400API
sonar.pullrequest.cache.basepath=/workspaces/AS400API
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectKey=as400api:40CB5B53-77B8-B1FD-458C-805350CB09E8
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectName=AS400API
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.projectBaseDir=/workspaces/AS400API
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.sourceEncoding=utf-8
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.tests=
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.sources=\
"/workspaces/AS400API/Auth/AuthPolicies.cs",\
"/workspaces/AS400API/Auth/DemoUser.cs",\
"/workspaces/AS400API/Auth/DemoUserStore.cs",\
"/workspaces/AS400API/Auth/LoginRequest.cs",\
"/workspaces/AS400API/Auth/LoginResponse.cs",\
"/workspaces/AS400API/Auth/PasswordHasher.cs",\
"/workspaces/AS400API/Auth/Roles.cs",\
"/workspaces/AS400API/Auth/TokenService.cs",\
"/workspaces/AS400API/Configuration/JwtOptions.cs",\
"/workspaces/AS400API/Configuration/OdbcOptions.cs",\
"/workspaces/AS400API/Endpoints/As400Endpoints.cs",\
"/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs",\
"/workspaces/AS400API/Endpoints/AuthEndpoints.cs",\
"/workspaces/AS400API/Endpoints/SystemEndpoints.cs",\
"/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.cs",\
"/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs",\
"/workspaces/AS400API/Program.cs",\
"/workspaces/AS400API/obj/Debug/net9.0/AS400API.GlobalUsings.g.cs",\
"/workspaces/AS400API/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs",\
"/workspaces/AS400API/obj/Debug/net9.0/AS400API.AssemblyInfo.cs",\
"/workspaces/AS400API/obj/Debug/net9.0/AS400API.MvcApplicationPartsAssemblyInfo.cs",\
"/workspaces/AS400API/appsettings.json",\
"/workspaces/AS400API/.dockerignore",\
"/workspaces/AS400API/docker-compose.yml",\
"/workspaces/AS400API/docker/odbc/odbc.ini",\
"/workspaces/AS400API/docker/odbc/odbcinst.ini",\
"/workspaces/AS400API/Dockerfile",\
"/workspaces/AS400API/drivers/ibm-iaccess-1.1.0.28-1.0.x86_64.rpm",\
"/workspaces/AS400API/Logs/as400-api-20251001.log",\
"/workspaces/AS400API/Logs/as400-api-20251002.log",\
"/workspaces/AS400API/Logs/as400-api-20251003.log",\
"/workspaces/AS400API/Logs/as400-api-20251004.log",\
"/workspaces/AS400API/README.md",\
"/workspaces/AS400API/scripts/run-sonar.sh",\
"/workspaces/AS400API/scripts/test-databases.sh",\
"/workspaces/AS400API/obj/AS400API.csproj.nuget.dgspec.json",\
"/workspaces/AS400API/obj/project.assets.json",\
"/workspaces/AS400API/.devcontainer/Dockerfile",\
"/workspaces/AS400API/.devcontainer/devcontainer.json",\
"/workspaces/AS400API/.vscode/launch.json",\
"/workspaces/AS400API/.vscode/tasks.json",\
"/workspaces/AS400API/obj/Debug/net9.0/staticwebassets.build.json",\
"/workspaces/AS400API/obj/Debug/net9.0/staticwebassets.build.endpoints.json",\
"/workspaces/AS400API/obj/Debug/net9.0/rjsmrazor.dswa.cache.json",\
"/workspaces/AS400API/obj/Debug/net9.0/rjsmcshtml.dswa.cache.json",\
"/workspaces/AS400API/obj/Debug/net9.0/rpswa.dswa.cache.json",\
"/workspaces/AS400API/bin/Debug/net9.0/AS400API.deps.json",\
"/workspaces/AS400API/bin/Debug/net9.0/appsettings.json",\
"/workspaces/AS400API/bin/Debug/net9.0/AS400API.runtimeconfig.json",\
"/workspaces/AS400API/bin/Debug/net9.0/AS400API.staticwebassets.endpoints.json"
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.analyzer.projectOutPaths=\
"/workspaces/AS400API/.sonarqube/out/0"
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.roslyn.reportFilePaths=\
"/workspaces/AS400API/.sonarqube/out/0/Issues.json"
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.cs.scanner.telemetry=\
"/workspaces/AS400API/.sonarqube/out/0/Telemetry.json"
40CB5B53-77B8-B1FD-458C-805350CB09E8.sonar.working.directory=/workspaces/AS400API/.sonarqube/out/.sonar/mod0
sonar.host.url=http://host.docker.internal:9000
sonar.cs.opencover.reportsPaths=**/coverage.opencover.xml
sonar.exclusions=**/bin/**,**/obj/**,**/coverage.opencover.xml
sonar.visualstudio.enable=false
sonar.modules=40CB5B53-77B8-B1FD-458C-805350CB09E8

View File

@ -6,11 +6,15 @@
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="JunitXml.TestLogger" Version="7.0.2" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.9" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageReference Include="xunit" Version="2.9.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageReference Include="coverlet.collector" Version="6.0.0" />
<PackageReference Include="coverlet.msbuild" Version="6.0.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AS400API.csproj" />

View File

@ -4,7 +4,10 @@
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<InvariantGlobalization>true</InvariantGlobalization>
<DefaultItemExcludes>$(DefaultItemExcludes);AS400API.Tests/**</DefaultItemExcludes>
</PropertyGroup>
<!-- Package references -->
<ItemGroup>
<PackageReference Include="Dapper" Version="2.1.28" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
@ -14,7 +17,16 @@
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
</ItemGroup>
<!-- Remove build/test/output from Content/None (safe for SDK-style projects) -->
<ItemGroup>
<Compile Remove="AS400API.Tests/**/*.cs" />
<Content Remove="bin/**;obj/**;out/**;TestResults/**;**/*.Tests/**;**/AS400API.Tests/**" />
<None Remove="bin/**;obj/**;out/**;TestResults/**;**/*.Tests/**;**/AS400API.Tests/**" />
</ItemGroup>
<ItemGroup>
<Content Update="appsettings*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>

429
Jenkinsfile vendored
View File

@ -1,221 +1,244 @@
pipeline {
agent none
options { ansiColor('xterm'); timestamps() }
agent any
environment {
DOTNET_CLI_TELEMETRY_OPTOUT = '1'
DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
SONAR_PROJECT_KEY = 'as400api-dotnet'
SONAR_PROJECT_NAME = 'AS400_API_DOTNET (.NET 9)'
}
stages {
stage('Checkout') {
agent any
steps { checkout scm }
options {
ansiColor('xterm')
timestamps()
buildDiscarder(logRotator(numToKeepStr: '15'))
disableConcurrentBuilds()
skipDefaultCheckout(true)
}
stage('Install prerequisites') {
agent any
steps {
sh '''
set -euo pipefail
parameters {
string(name: 'GIT_URL', defaultValue: 'file:///repos/AS400API.git', description: 'Git repository URL to clone')
string(name: 'GIT_BRANCH', defaultValue: 'main', description: 'Branch or ref to build')
// string(name: 'AGENT_LABEL', defaultValue: '', description: 'Optional Jenkins agent label with Docker CLI access (leave blank for default node)')
}
install_deps() {
if command -v apt-get >/dev/null 2>&1; then
export DEBIAN_FRONTEND=noninteractive
apt-get update
# Common native deps for .NET + tools
apt-get install -y --no-install-recommends \
libkrb5-3 zlib1g libstdc++6 ca-certificates curl unzip jq
environment {
DOTNET_CLI_TELEMETRY_OPTOUT = '1'
DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
DOTNET_NOLOGO = '1'
BUILD_CONFIGURATION = 'Release'
TEST_RESULTS_DIR = 'TestResults'
COVERAGE_DIR = 'TestResults/Coverage'
COVERAGE_FILE = 'TestResults/Coverage/coverage.opencover.xml'
COVERAGE_HTML_DIR = 'TestResults/Coverage/html'
# Java (for OWASP Dependency-Check)
# prefer 17 headless; fall back to default-jre-headless
(apt-get install -y --no-install-recommends openjdk-17-jre-headless) || \
(apt-get install -y --no-install-recommends default-jre-headless) || true
// Path ติดตั้ง dotnet ชั่วคราวใน pipeline
DOTNET_ROOT = "${WORKSPACE}/.dotnet"
PATH = "${DOTNET_ROOT}:${PATH}"
# ---- ICU on Debian/Ubuntu ----
# 1) try meta/dev names (older releases)
apt-get install -y --no-install-recommends libicu || true
apt-get install -y --no-install-recommends libicu-dev || true
PUBLISH_DIR = 'publish/Release'
SONAR_PROJECT_KEY = 'AS400API'
SONAR_PROJECT_NAME = 'AS400API'
}
# 2) if still missing, detect versioned package (e.g., libicu74 on trixie)
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
PKG="$(apt-cache search -n '^libicu[0-9]+$' | awk '{print $1}' | sort -V | tail -n1 || true)"
if [ -n "${PKG:-}" ]; then
echo "Installing detected ICU package: $PKG"
apt-get install -y --no-install-recommends "$PKG"
stages {
stage('Checkout') {
steps {
// Fetch the requested branch from the configured Git URL.
script {
if (!params.GIT_URL?.trim()) {
error 'GIT_URL parameter must not be empty.'
}
String branchSpec = params.GIT_BRANCH?.trim() ?: 'main'
if (!branchSpec.startsWith('*/')) {
branchSpec = "*/${branchSpec}"
}
checkout([
$class : 'GitSCM',
branches : [[name: branchSpec]],
doGenerateSubmoduleConfigurations: false,
extensions : [[$class: 'CloneOption', depth: 0, noTags: false, shallow: false]],
userRemoteConfigs : [[url: params.GIT_URL.trim()]]
])
}
}
}
stage('.NET SDK Info') {
steps {
// Sanity check the SDK and install required global tools (Java for Sonar + dotnet-sonarscanner).
sh '''#!/bin/bash -e
apt-get update
apt-get install -y --no-install-recommends openjdk-21-jre-headless
# --- Install ICU runtime (Debian uses versioned package names) ---
if ! ldconfig -p | grep -qi libicu; then
PKG="$(apt-cache search '^libicu[0-9]+$' | awk '{print $1}' | head -n1 || true)"
if [ -n "$PKG" ]; then
echo "Installing ICU package: ${PKG}"
apt-get install -y --no-install-recommends "${PKG}"
else
echo "Installing fallback ICU development package..."
apt-get install -y --no-install-recommends libicu-dev
fi
fi
fi
rm -rf /var/lib/apt/lists/*
# 3) final sanity
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
echo "WARN: ICU not found after install attempts (will rely on invariant mode if needed)"
fi
# Install .NET SDK locally for the build user
mkdir -p "${WORKSPACE}/.dotnet"
curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
bash dotnet-install.sh --channel 9.0 --install-dir "${WORKSPACE}/.dotnet"
elif command -v dnf >/dev/null 2>&1; then
dnf install -y libicu krb5-libs zlib libstdc++ ca-certificates curl unzip java-17-openjdk-headless jq || true
elif command -v yum >/dev/null 2>&1; then
yum install -y libicu krb5-libs zlib libstdc++ ca-certificates curl unzip java-17-openjdk-headless jq || true
elif command -v apk >/dev/null 2>&1; then
apk add --no-cache icu-libs krb5-libs zlib libstdc++ ca-certificates curl unzip openjdk17-jre-headless jq || true
else
echo "Unsupported package manager. Please install ICU + Java manually."
exit 1
fi
}
echo '### dotnet --info'
dotnet --info
install_deps
'''
}
}
// Bootstrap .NET SDK if dotnet is missing
stage('Bootstrap .NET SDK') {
agent any
steps {
sh '''
set -e
if ! command -v dotnet >/dev/null 2>&1; then
echo "Installing .NET SDK locally for this build..."
curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
bash dotnet-install.sh --channel 9.0 --install-dir "$HOME/.dotnet"
fi
export PATH="$HOME/.dotnet:$PATH"
# If ICU still missing (e.g., no libicu*.so found), enable invariant mode as a fallback
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
echo "NOTE: Running .NET in globalization invariant mode (ICU not found)"
fi
dotnet --info
'''
}
}
stage('SCA (NuGet vulnerabilities + OWASP)') {
agent any
steps {
sh '''
set -euo pipefail
export PATH="$HOME/.dotnet:$PATH"
echo "=== NuGet vulnerability audit ==="
dotnet restore
dotnet list package --vulnerable || true
echo "=== OWASP Dependency-Check (no Docker) ==="
rm -f depcheck.zip || true
rm -rf dependency-check || true
mkdir -p depcheck
API="https://api.github.com/repos/jeremylong/DependencyCheck/releases/latest"
# Resolve the correct asset URL (ends with -release.zip)
echo "Resolving Dependency-Check latest asset URL from GitHub API..."
ASSET_URL="$(curl -fsSL "$API" \
| jq -r '.assets[]?.browser_download_url | select(test("release\\\\.zip$"))' \
| head -n1 || true)"
# Fallback from tag_name if assets listing is throttled
if [ -z "${ASSET_URL:-}" ]; then
TAG="$(curl -fsSL "$API" | jq -r '.tag_name' || true)"
if [ -n "${TAG:-}" ]; then
VER="${TAG#v}"
ASSET_URL="https://github.com/jeremylong/DependencyCheck/releases/download/${TAG}/dependency-check-${VER}-release.zip"
fi
fi
if [ -z "${ASSET_URL:-}" ]; then
echo "ERROR: Could not resolve Dependency-Check release asset URL."
exit 9
fi
echo "Downloading: $ASSET_URL"
curl -fL --retry 3 --retry-all-errors -o depcheck.zip "$ASSET_URL"
# Validate and extract
unzip -tq depcheck.zip || { echo "Downloaded file is not a valid ZIP"; exit 9; }
mkdir -p dependency-check
unzip -q depcheck.zip -d dependency-check
DC_BIN="$(echo dependency-check/dependency-check*/bin/dependency-check.sh)"
if [ ! -x "$DC_BIN" ]; then
echo "ERROR: dependency-check.sh not found under extracted folder"
ls -la dependency-check || true
exit 9
fi
# Generate HTML and XML reports (note: use multiple -f flags)
bash "$DC_BIN" \
-f HTML -f XML \
--project "AS400_API_DOTNET" \
--scan "." \
--out "depcheck" \
--noupdate || true
echo "SCA reports generated in depcheck/"
'''
}
post {
always {
archiveArtifacts artifacts: 'depcheck/**', allowEmptyArchive: true
echo '### Install/Update dotnet tooling'
dotnet tool install --global dotnet-sonarscanner || dotnet tool update --global dotnet-sonarscanner
dotnet tool install --global dotnet-reportgenerator-globaltool || dotnet tool update --global dotnet-reportgenerator-globaltool
'''
script {
String dotnetToolsPath = "${env.HOME ?: '/var/jenkins_home'}/.dotnet/tools"
if (!env.PATH.contains(dotnetToolsPath)) {
env.PATH = "${env.PATH}:${dotnetToolsPath}"
}
}
}
}
}
}
stage('SAST + Coverage (SonarQube + Tests)') {
agent any
steps {
sh '''
set -e
export PATH="$HOME/.dotnet:$PATH"
# run tests with coverage (cobertura) + produce TRX results for JUnit
dotnet test \
--logger "trx;LogFileName=test_results.trx" \
/p:CollectCoverage=true \
/p:CoverletOutput=coverage/ \
/p:CoverletOutputFormat=cobertura
mkdir -p coverage-report
# copy the cobertura file (adjust path if your solution layout differs)
COBERTURA_FILE=$(find . -type f -name "coverage.cobertura.xml" | head -n1 || true)
[ -n "$COBERTURA_FILE" ] && cp "$COBERTURA_FILE" coverage-report/Cobertura.xml || true
# If SonarQube is configured, run scanner; otherwise skip gracefully.
if [ -n "${SONARQUBE_ENV_NAME:-}" ]; then
echo "SonarQube env variable detected: $SONARQUBE_ENV_NAME"
else
echo "SonarQube not configured; skipping Sonar scan."
exit 0
fi
'''
}
post {
always {
// Publish TRX results (built-in)
junit '**/TestResults/**/*.trx'
// Archive coverage XML so you can inspect it
archiveArtifacts artifacts: 'coverage-report/**', allowEmptyArchive: true
stage('Restore') {
steps {
// Restore solution dependencies.
sh '''#!/bin/bash -e
dotnet restore AS400API.sln
'''
}
}
stage('Build') {
steps {
// Build the solution in Release mode without failing on warnings.
sh '''#!/bin/bash -e
dotnet build AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore
'''
}
}
stage('Test & Coverage') {
steps {
// Execute tests once for fast feedback and capture TRX + OpenCover reports.
sh '''#!/bin/bash -e
rm -rf "${TEST_RESULTS_DIR}"
mkdir -p "${COVERAGE_DIR}"
mkdir -p "${COVERAGE_HTML_DIR}"
dotnet test AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-build \
/p:CollectCoverage=true \
/p:CoverletOutputFormat=opencover \
/p:CoverletOutput="${WORKSPACE}/${COVERAGE_DIR}/" \
--results-directory "${TEST_RESULTS_DIR}" \
--logger "trx;LogFileName=test-results.trx" \
--logger "junit;LogFileName=test-results.xml"
"${HOME}/.dotnet/tools/reportgenerator" \
-reports:"${COVERAGE_FILE}" \
-targetdir:"${COVERAGE_HTML_DIR}" \
-reporttypes:"HtmlInline_AzurePipelines;Cobertura"
'''
junit testResults: "${TEST_RESULTS_DIR}/**/*.xml", allowEmptyResults: false
publishHTML(target: [
allowMissing : false,
keepAll : true,
reportDir : "${COVERAGE_HTML_DIR}",
reportFiles : 'index.html',
reportName : 'Code Coverage'
])
}
}
stage('SonarQube: Begin') {
steps {
// Kick off Sonar analysis with project metadata and coverage location.
script {
env.SONAR_PROJECT_VERSION = env.BUILD_NUMBER ?: '0.0.0'
}
withSonarQubeEnv('SonarQube') {
sh '''#!/bin/bash -e
# Ensure scanner is available and PATH includes global tools
dotnet tool update --global dotnet-sonarscanner
export PATH="$PATH:${HOME}/.dotnet/tools"
# dotnet sonarscanner begin \
# /k:"${SONAR_PROJECT_KEY}" \
# /n:"${SONAR_PROJECT_NAME}" \
# /v:"${SONAR_PROJECT_VERSION}" \
# /d:sonar.host.url="${SONAR_HOST_URL}" \
# /d:sonar.login="${SONAR_AUTH_TOKEN}" \
# /d:sonar.cs.opencover.reportsPaths="${COVERAGE_FILE}"
dotnet sonarscanner begin \
/k:AS400API \
/d:sonar.cs.opencover.reportsPaths="${COVERAGE_FILE}" \
/d:sonar.exclusions="TestResults/Coverage/html/**"
'''
}
}
}
stage('Rebuild for Sonar') {
steps {
// Run a rebuild under the Sonar scanner context so analysis picks up compilation data.
sh '''#!/bin/bash -e
dotnet build AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore --no-incremental
'''
}
}
stage('SonarQube: End') {
steps {
// Close the Sonar analysis and push data to the server.
withSonarQubeEnv('SonarQube') {
sh '''#!/bin/bash -e
export PATH="$PATH:${HOME}/.dotnet/tools"
dotnet sonarscanner end
'''
}
}
}
stage('Quality Gate') {
steps {
// Wait for the Quality Gate result and fail fast on non-green outcomes.
timeout(time: 15, unit: 'MINUTES') {
script {
def qualityGate = waitForQualityGate()
if (qualityGate.status != 'OK') {
error "SonarQube Quality Gate failed: ${qualityGate.status}"
}
}
}
}
}
stage('Archive') {
steps {
// Publish Release-ready binaries and test artifacts for downstream consumption.
sh '''#!/bin/bash -e
rm -rf "${PUBLISH_DIR}"
dotnet publish AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore --output "${PUBLISH_DIR}"
'''
archiveArtifacts artifacts: "${PUBLISH_DIR}/**", fingerprint: true
archiveArtifacts artifacts: "${TEST_RESULTS_DIR}/**/*.trx", allowEmptyArchive: true
archiveArtifacts artifacts: "${COVERAGE_FILE}", allowEmptyArchive: true
archiveArtifacts artifacts: "${COVERAGE_HTML_DIR}/**", allowEmptyArchive: true
}
}
}
}
stage('Build Artifact') {
agent any
steps {
sh '''
set -e
export PATH="$HOME/.dotnet:$PATH"
dotnet publish -c Release -o out
ls -la out
'''
archiveArtifacts artifacts: 'out/**', fingerprint: true
}
post {
always {
script {
try {
deleteDir()
} catch (org.jenkinsci.plugins.workflow.steps.MissingContextVariableException ignore) {
echo 'Workspace cleanup skipped because no workspace was provisioned.'
}
}
}
}
}
}
}

221
Jenkinsfile copy Normal file
View File

@ -0,0 +1,221 @@
pipeline {
agent none
options { ansiColor('xterm'); timestamps() }
environment {
DOTNET_CLI_TELEMETRY_OPTOUT = '1'
DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
SONAR_PROJECT_KEY = 'as400api-dotnet'
SONAR_PROJECT_NAME = 'AS400_API_DOTNET (.NET 9)'
}
stages {
stage('Checkout') {
agent any
steps { checkout scm }
}
stage('Install prerequisites') {
agent any
steps {
sh '''
set -euo pipefail
install_deps() {
if command -v apt-get >/dev/null 2>&1; then
export DEBIAN_FRONTEND=noninteractive
apt-get update
# Common native deps for .NET + tools
apt-get install -y --no-install-recommends \
libkrb5-3 zlib1g libstdc++6 ca-certificates curl unzip jq
# Java (for OWASP Dependency-Check)
# prefer 17 headless; fall back to default-jre-headless
(apt-get install -y --no-install-recommends openjdk-17-jre-headless) || \
(apt-get install -y --no-install-recommends default-jre-headless) || true
# ---- ICU on Debian/Ubuntu ----
# 1) try meta/dev names (older releases)
apt-get install -y --no-install-recommends libicu || true
apt-get install -y --no-install-recommends libicu-dev || true
# 2) if still missing, detect versioned package (e.g., libicu74 on trixie)
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
PKG="$(apt-cache search -n '^libicu[0-9]+$' | awk '{print $1}' | sort -V | tail -n1 || true)"
if [ -n "${PKG:-}" ]; then
echo "Installing detected ICU package: $PKG"
apt-get install -y --no-install-recommends "$PKG"
fi
fi
# 3) final sanity
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
echo "WARN: ICU not found after install attempts (will rely on invariant mode if needed)"
fi
elif command -v dnf >/dev/null 2>&1; then
dnf install -y libicu krb5-libs zlib libstdc++ ca-certificates curl unzip java-17-openjdk-headless jq || true
elif command -v yum >/dev/null 2>&1; then
yum install -y libicu krb5-libs zlib libstdc++ ca-certificates curl unzip java-17-openjdk-headless jq || true
elif command -v apk >/dev/null 2>&1; then
apk add --no-cache icu-libs krb5-libs zlib libstdc++ ca-certificates curl unzip openjdk17-jre-headless jq || true
else
echo "Unsupported package manager. Please install ICU + Java manually."
exit 1
fi
}
install_deps
'''
}
}
// Bootstrap .NET SDK if dotnet is missing
stage('Bootstrap .NET SDK') {
agent any
steps {
sh '''
set -e
if ! command -v dotnet >/dev/null 2>&1; then
echo "Installing .NET SDK locally for this build..."
curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
bash dotnet-install.sh --channel 9.0 --install-dir "$HOME/.dotnet"
fi
export PATH="$HOME/.dotnet:$PATH"
# If ICU still missing (e.g., no libicu*.so found), enable invariant mode as a fallback
if ! ldconfig -p 2>/dev/null | grep -qi 'libicu'; then
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
echo "NOTE: Running .NET in globalization invariant mode (ICU not found)"
fi
dotnet --info
'''
}
}
stage('SCA (NuGet vulnerabilities + OWASP)') {
agent any
steps {
sh '''
set -euo pipefail
export PATH="$HOME/.dotnet:$PATH"
echo "=== NuGet vulnerability audit ==="
dotnet restore
dotnet list package --vulnerable || true
echo "=== OWASP Dependency-Check (no Docker) ==="
rm -f depcheck.zip || true
rm -rf dependency-check || true
mkdir -p depcheck
API="https://api.github.com/repos/jeremylong/DependencyCheck/releases/latest"
# Resolve the correct asset URL (ends with -release.zip)
echo "Resolving Dependency-Check latest asset URL from GitHub API..."
ASSET_URL="$(curl -fsSL "$API" \
| jq -r '.assets[]?.browser_download_url | select(test("release\\\\.zip$"))' \
| head -n1 || true)"
# Fallback from tag_name if assets listing is throttled
if [ -z "${ASSET_URL:-}" ]; then
TAG="$(curl -fsSL "$API" | jq -r '.tag_name' || true)"
if [ -n "${TAG:-}" ]; then
VER="${TAG#v}"
ASSET_URL="https://github.com/jeremylong/DependencyCheck/releases/download/${TAG}/dependency-check-${VER}-release.zip"
fi
fi
if [ -z "${ASSET_URL:-}" ]; then
echo "ERROR: Could not resolve Dependency-Check release asset URL."
exit 9
fi
echo "Downloading: $ASSET_URL"
curl -fL --retry 3 --retry-all-errors -o depcheck.zip "$ASSET_URL"
# Validate and extract
unzip -tq depcheck.zip || { echo "Downloaded file is not a valid ZIP"; exit 9; }
mkdir -p dependency-check
unzip -q depcheck.zip -d dependency-check
DC_BIN="$(echo dependency-check/dependency-check*/bin/dependency-check.sh)"
if [ ! -x "$DC_BIN" ]; then
echo "ERROR: dependency-check.sh not found under extracted folder"
ls -la dependency-check || true
exit 9
fi
# Generate HTML and XML reports (note: use multiple -f flags)
bash "$DC_BIN" \
-f HTML -f XML \
--project "AS400_API_DOTNET" \
--scan "." \
--out "depcheck" \
--noupdate || true
echo "SCA reports generated in depcheck/"
'''
}
post {
always {
archiveArtifacts artifacts: 'depcheck/**', allowEmptyArchive: true
}
}
}
stage('SAST + Coverage (SonarQube + Tests)') {
agent any
steps {
sh '''
set -e
export PATH="$HOME/.dotnet:$PATH"
# run tests with coverage (cobertura) + produce TRX results for JUnit
dotnet test \
--logger "trx;LogFileName=test_results.trx" \
/p:CollectCoverage=true \
/p:CoverletOutput=coverage/ \
/p:CoverletOutputFormat=cobertura
mkdir -p coverage-report
# copy the cobertura file (adjust path if your solution layout differs)
COBERTURA_FILE=$(find . -type f -name "coverage.cobertura.xml" | head -n1 || true)
[ -n "$COBERTURA_FILE" ] && cp "$COBERTURA_FILE" coverage-report/Cobertura.xml || true
# If SonarQube is configured, run scanner; otherwise skip gracefully.
if [ -n "${SONARQUBE_ENV_NAME:-}" ]; then
echo "SonarQube env variable detected: $SONARQUBE_ENV_NAME"
else
echo "SonarQube not configured; skipping Sonar scan."
exit 0
fi
'''
}
post {
always {
// Publish TRX results (built-in)
junit '**/TestResults/**/*.trx'
// Archive coverage XML so you can inspect it
archiveArtifacts artifacts: 'coverage-report/**', allowEmptyArchive: true
}
}
}
stage('Build Artifact') {
agent any
steps {
sh '''
set -e
export PATH="$HOME/.dotnet:$PATH"
dotnet publish -c Release -o out
ls -la out
'''
archiveArtifacts artifacts: 'out/**', fingerprint: true
}
}
}
}

230
Jenkinsfile copy 2 Normal file
View File

@ -0,0 +1,230 @@
pipeline {
agent any
options {
ansiColor('xterm')
timestamps()
}
environment {
// ถ้าใช้ local bare repo
GIT_URL = 'file:///repos/AS400API.git'
// Path ติดตั้ง dotnet ชั่วคราวใน pipeline
DOTNET_ROOT = "${WORKSPACE}/.dotnet"
PATH = "${DOTNET_ROOT}:${PATH}"
// Dependency-Check cache
DC_DATA = "${JENKINS_HOME}/.dc-cache"
// SonarQube
SONARQUBE_INSTANCE = 'SonarQube'
SONAR_PROJECT_KEY = 'AS400API'
}
stages {
stage('Checkout') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: '*/main']],
userRemoteConfigs: [[url: "${GIT_URL}"]]
])
}
}
stage('Install prerequisites') {
steps {
sh '''
set -euo pipefail
if command -v apt-get >/dev/null 2>&1; then
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends \
ca-certificates curl unzip jq git openjdk-21-jre-headless
# --- Install ICU runtime (Debian uses versioned package names) ---
if ! ldconfig -p | grep -qi libicu; then
PKG="$(apt-cache search '^libicu[0-9]+$' | awk '{print $1}' | head -n1 || true)"
if [ -n "$PKG" ]; then
echo "Installing ICU package: ${PKG}"
apt-get install -y --no-install-recommends "${PKG}"
else
echo "Falling back to libicu-dev..."
apt-get install -y --no-install-recommends libicu-dev
fi
fi
fi
# Install .NET SDK locally for the build user
mkdir -p "${WORKSPACE}/.dotnet"
curl -fsSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh
bash dotnet-install.sh --channel 9.0 --install-dir "${WORKSPACE}/.dotnet"
bash dotnet-install.sh --channel 8.0 --install-dir "${WORKSPACE}/.dotnet"
export PATH="${WORKSPACE}/.dotnet:${PATH}"
dotnet --info
'''
}
}
stage('SCA (NuGet + OWASP)') {
steps {
sh '''
set -euo pipefail
echo "=== NuGet vulnerability audit ==="
dotnet restore
dotnet list package --vulnerable || true
echo "=== OWASP Dependency-Check ==="
rm -rf depcheck dependency-check
mkdir -p depcheck
API="https://api.github.com/repos/jeremylong/DependencyCheck/releases/latest"
echo "Resolving latest Dependency-Check..."
ASSET_URL=$(curl -fsSL "$API" | jq -r '.assets[]?.browser_download_url | select(test("release\\\\.zip$"))' | head -n1)
echo "Downloading: $ASSET_URL"
curl -fL --retry 3 --retry-all-errors -o depcheck.zip "$ASSET_URL"
unzip -oq depcheck.zip -d dependency-check
DC_BIN="dependency-check/dependency-check/bin/dependency-check.sh"
bash "$DC_BIN" --data "${DC_DATA}" --updateonly || true
bash "$DC_BIN" -f HTML -f XML \
--project "AS400API" \
--scan . \
--out depcheck \
--data "${DC_DATA}" \
--noupdate || true \
--disableAssembly
'''
}
post {
always {
archiveArtifacts artifacts: 'depcheck/**', allowEmptyArchive: true
script {
try {
publishHTML(target: [
reportName: 'OWASP Dependency-Check',
reportDir: 'depcheck',
reportFiles: 'dependency-check-report.html',
keepAll: true,
alwaysLinkToLastBuild: true,
allowMissing: true
])
} catch (Throwable e) {
echo "Skipping HTML report publish: ${e.getClass().getSimpleName()}"
}
}
}
}
}
stage('SAST with SonarQube') {
steps {
withSonarQubeEnv('SonarQube') {
sh '''
set -euo pipefail
echo "=== SAST with SonarQube ==="
# Ensure scanner is available and PATH includes global tools
dotnet tool update --global dotnet-sonarscanner
export PATH="$PATH:/root/.dotnet/tools"
# Optional: show Java & reachability
java -version || true
# ไม่ต้องใช้ curl เพราะ API นี้ติดเรื่องสิทธิ์
# curl -sf "$SONAR_HOST_URL/api/system/health" || { echo "Cannot reach SonarQube at $SONAR_HOST_URL"; exit 1; }
# BEGIN (use injected URL/token; add verbose for diagnostics)
dotnet sonarscanner begin \
/k:AS400API \
/d:sonar.verbose=true \
/d:sonar.exclusions=**/bin/**,**/obj/** \
/d:sonar.test.exclusions=**/*.Tests/** \
/d:sonar.cs.opencover.reportsPaths=**/coverage.opencover.xml
# BUILD & TEST (produce OpenCover report)
dotnet restore
dotnet build -c Release
dotnet test AS400API.Tests/AS400API.Tests.csproj -c Release \
/p:CollectCoverage=true \
/p:CoverletOutput=./TestResults/coverage/ \
/p:CoverletOutputFormat=opencover
# END (no login flag; uses env from withSonarQubeEnv)
# dotnet sonarscanner end /d:sonar.verbose=true
dotnet sonarscanner end
'''
}
// Optionally wait for the Quality Gate (only if 'end' succeeds)
// waitForQualityGate abortPipeline: true
}
}
stage('Test + Coverage') {
steps {
sh '''
set -euo pipefail
dotnet build -c Debug
dotnet test \
--logger "junit;LogFileName=test-results.xml" \
--results-directory "TestResults" \
/p:CollectCoverage=true \
/p:CoverletOutput=coverage/ \
/p:CoverletOutputFormat=cobertura
mkdir -p coverage-report
COB=$(find . -type f -name "coverage.cobertura.xml" | head -n1 || true)
if [ -n "$COB" ]; then
cp "$COB" coverage-report/Cobertura.xml
fi
'''
}
post {
always {
junit allowEmptyResults: false, testResults: '**/TestResults/**/*.xml'
archiveArtifacts artifacts: 'coverage-report/**', allowEmptyArchive: true
}
}
}
stage('Build') {
steps {
sh '''
set -euo pipefail
# build only the app project
dotnet restore AS400API.csproj
dotnet build AS400API.csproj -c Release -warnaserror:false -p:TreatWarningsAsErrors=false
# publish the app project (not the solution)
dotnet publish AS400API.csproj -c Release -o out --no-build
'''
}
post {
success {
archiveArtifacts artifacts: 'out/**', allowEmptyArchive: false
}
}
}
stage('Quality Gate') {
steps {
timeout(time: 30, unit: 'MINUTES') {
waitForQualityGate abortPipeline: true
}
}
}
} // end stages
post {
always {
echo "Pipeline finished (status: ${currentBuild.currentResult})"
}
}
} // end pipeline

197
Jenkinsfile copy 3 Normal file
View File

@ -0,0 +1,197 @@
pipeline {
agent {
docker {
image 'mcr.microsoft.com/dotnet/sdk:9.0'
args '-u root:root'
// label "${params.AGENT_LABEL?.trim() ?: ''}"
}
}
options {
ansiColor('xterm')
timestamps()
buildDiscarder(logRotator(numToKeepStr: '15'))
disableConcurrentBuilds()
skipDefaultCheckout(true)
}
parameters {
string(name: 'GIT_URL', defaultValue: 'file:///repos/AS400API.git', description: 'Git repository URL to clone')
string(name: 'GIT_BRANCH', defaultValue: 'main', description: 'Branch or ref to build')
// string(name: 'AGENT_LABEL', defaultValue: '', description: 'Optional Jenkins agent label with Docker CLI access (leave blank for default node)')
}
environment {
DOTNET_CLI_TELEMETRY_OPTOUT = '1'
DOTNET_SKIP_FIRST_TIME_EXPERIENCE = '1'
DOTNET_NOLOGO = '1'
BUILD_CONFIGURATION = 'Release'
TEST_RESULTS_DIR = 'TestResults'
COVERAGE_DIR = 'TestResults/Coverage'
COVERAGE_FILE = 'TestResults/Coverage/coverage.opencover.xml'
PUBLISH_DIR = 'publish/Release'
SONAR_PROJECT_KEY = 'AS400API'
SONAR_PROJECT_NAME = 'AS400API'
}
stages {
stage('Checkout') {
steps {
// Fetch the requested branch from the configured Git URL.
script {
if (!params.GIT_URL?.trim()) {
error 'GIT_URL parameter must not be empty.'
}
String branchSpec = params.GIT_BRANCH?.trim() ?: 'main'
if (!branchSpec.startsWith('*/')) {
branchSpec = "*/${branchSpec}"
}
checkout([
$class : 'GitSCM',
branches : [[name: branchSpec]],
doGenerateSubmoduleConfigurations: false,
extensions : [[$class: 'CloneOption', depth: 0, noTags: false, shallow: false]],
userRemoteConfigs : [[url: params.GIT_URL.trim()]]
])
}
}
}
stage('.NET SDK Info') {
steps {
// Sanity check the SDK and install required global tools (Java for Sonar + dotnet-sonarscanner).
sh '''#!/bin/bash -e
apt-get update
apt-get install -y --no-install-recommends openjdk-17-jre
rm -rf /var/lib/apt/lists/*
echo '### dotnet --info'
dotnet --info
echo '### Install/Update dotnet-sonarscanner'
dotnet tool install --global dotnet-sonarscanner || dotnet tool update --global dotnet-sonarscanner
'''
script {
if (!env.PATH.contains('/root/.dotnet/tools')) {
env.PATH = "${env.PATH}:/root/.dotnet/tools"
}
}
}
}
stage('Restore') {
steps {
// Restore solution dependencies.
sh '''#!/bin/bash -e
dotnet restore AS400API.sln
'''
}
}
stage('Build') {
steps {
// Build the solution in Release mode without failing on warnings.
sh '''#!/bin/bash -e
dotnet build AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore
'''
}
}
stage('Test & Coverage') {
steps {
// Execute tests once for fast feedback and capture TRX + OpenCover reports.
sh '''#!/bin/bash -e
rm -rf "${TEST_RESULTS_DIR}"
mkdir -p "${COVERAGE_DIR}"
dotnet test AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-build \
/p:CollectCoverage=true \
/p:CoverletOutputFormat=opencover \
/p:CoverletOutput="${COVERAGE_DIR}/" \
--logger "trx;LogFileName=test-results.trx" \
--logger "junit;LogFileName=test-results.xml"
'''
junit testResults: "${TEST_RESULTS_DIR}/**/*.xml", allowEmptyResults: false
publishCoverage adapters: [opencoverAdapter("${COVERAGE_FILE}")], sourceFileResolver: sourceFiles('STORE_LAST_BUILD'), failNoReports: true
}
}
stage('SonarQube: Begin') {
steps {
// Kick off Sonar analysis with project metadata and coverage location.
script {
env.SONAR_PROJECT_VERSION = env.BUILD_NUMBER ?: '0.0.0'
}
withSonarQubeEnv('sonarqube') {
sh '''#!/bin/bash -e
dotnet sonarscanner begin \
/k:"${SONAR_PROJECT_KEY}" \
/n:"${SONAR_PROJECT_NAME}" \
/v:"${SONAR_PROJECT_VERSION}" \
/d:sonar.host.url="${SONAR_HOST_URL}" \
/d:sonar.login="${SONAR_AUTH_TOKEN}" \
/d:sonar.cs.opencover.reportsPaths="${COVERAGE_FILE}"
'''
}
}
}
stage('Rebuild for Sonar') {
steps {
// Run a rebuild under the Sonar scanner context so analysis picks up compilation data.
sh '''#!/bin/bash -e
dotnet build AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore --no-incremental
'''
}
}
stage('SonarQube: End') {
steps {
// Close the Sonar analysis and push data to the server.
withSonarQubeEnv('sonarqube') {
sh '''#!/bin/bash -e
dotnet sonarscanner end /d:sonar.login="${SONAR_AUTH_TOKEN}"
'''
}
}
}
stage('Quality Gate') {
steps {
// Wait for the Quality Gate result and fail fast on non-green outcomes.
timeout(time: 15, unit: 'MINUTES') {
script {
def qualityGate = waitForQualityGate()
if (qualityGate.status != 'OK') {
error "SonarQube Quality Gate failed: ${qualityGate.status}"
}
}
}
}
}
stage('Archive') {
steps {
// Publish Release-ready binaries and test artifacts for downstream consumption.
sh '''#!/bin/bash -e
rm -rf "${PUBLISH_DIR}"
dotnet publish AS400API.sln --configuration "${BUILD_CONFIGURATION}" --no-restore --output "${PUBLISH_DIR}"
'''
archiveArtifacts artifacts: "${PUBLISH_DIR}/**", fingerprint: true
archiveArtifacts artifacts: "${TEST_RESULTS_DIR}/**/*.trx", allowEmptyArchive: true
archiveArtifacts artifacts: "${COVERAGE_FILE}", allowEmptyArchive: true
}
}
}
post {
always {
script {
try {
deleteDir()
} catch (org.jenkinsci.plugins.workflow.steps.MissingContextVariableException ignore) {
echo 'Workspace cleanup skipped because no workspace was provisioned.'
}
}
}
}
}

View File

@ -8,7 +8,7 @@ using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using Serilog;
// var builder = WebApplication.CreateBuilder(args);
var builderArgs = args ?? Array.Empty<string>();
var builder = WebApplication.CreateBuilder(builderArgs);
@ -126,7 +126,7 @@ api.MapAuthEndpoints();
api.MapAs400Endpoints();
api.MapORDUAGEndpoints();
app.Run();
await app.RunAsync();
// env DOTNET_ENVIRONMENT=Development dotnet run

View File

@ -38,6 +38,13 @@ docker compose up --build
- Override at runtime with environment variables, e.g. `Serilog__WriteTo__0__Args__path=/var/log/as400/api-.log`.
- Request logging middleware is enabled; application-specific events (query counts, failures, etc.) are captured with structured properties to aid analysis.
## Jenkins CI notes
- The repo includes a declarative Jenkinsfile that builds on the `mcr.microsoft.com/dotnet/sdk:9.0` container image and expects Jenkins parameters for `GIT_REPO_URL`, `GIT_CREDENTIALS_ID`, `SONARQUBE_SERVER`, and `SONAR_TOKEN_ID`. Create the credentials in **Manage Jenkins Credentials** before running the job.
- Set `AGENT_LABEL` (optional) to a Jenkins agent that has the Docker CLI available so the pipeline can launch containers; leave it blank only if the default node already provides Docker.
- Update the Sonar project key or organization by editing `SONAR_PROJECT_KEY` / `SONAR_ORG` in the Jenkins parameter defaults or overriding them per-run; the pipeline passes these values to `dotnet-sonarscanner`.
- The pipeline publishes unit-test results, OpenCover XML, and HTML coverage reports; open the “Code Coverage” HTML report in the Jenkins build sidebar or download the archived artifacts `artifacts/AS400API-<build>-<commit>/reports/coverage-html/index.html`.
- SCA results (`security-reports/nuget-vulnerabilities.txt` and optional Dependency-Check HTML) and application logs from `Logs/` are archived automatically so you can review findings without re-running the build.
## SonarQube analysis
- Install or provision a SonarQube/SonarCloud server and generate a project token.
- Set environment variables (`SONAR_HOST_URL`, `SONAR_TOKEN`, optionally `SONAR_PROJECT_KEY`, `SONAR_PROJECT_NAME`; defaults are `as400api` / `AS400API`, plus `SONAR_ORGANIZATION` for SonarCloud).

View File

@ -1,7 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
export "SONAR_TOKEN"="squ_ef2f0a2f495a32c33ed81afb16f3cdc98bf1336a"
export "SONAR_TOKEN"="sqa_a38081f27f9e32376feed2e653b48ed5a0723565"
if [[ -z "${SONAR_HOST_URL:-}" ]]; then
echo "SONAR_HOST_URL environment variable is required" >&2