Initial Project
This commit is contained in:
parent
44233b067d
commit
71675a8561
42
.devcontainer/Dockerfile
Normal file
42
.devcontainer/Dockerfile
Normal file
@ -0,0 +1,42 @@
|
||||
# .NET 9 SDK (use 8.0 if your solution targets 8)
|
||||
# Force amd64 so IBM i Access RPM can be installed even on Apple Silicon hosts.
|
||||
FROM --platform=linux/amd64 mcr.microsoft.com/dotnet/sdk:9.0
|
||||
|
||||
# Java runtime is required by Sonar
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
openjdk-17-jre-headless curl ca-certificates git unzip gnupg \
|
||||
unixodbc unixodbc-dev alien \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Node.js 20.x is required by SonarLint for VS Code
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends nodejs \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install IBM i Access ODBC driver when the RPM is present in the repo
|
||||
COPY drivers/ /tmp/drivers/
|
||||
RUN set -ex; \
|
||||
if ls /tmp/drivers/ibm-iaccess-*.rpm.disabled >/dev/null 2>&1; then \
|
||||
for f in /tmp/drivers/ibm-iaccess-*.rpm.disabled; do mv "$f" "${f%.disabled}"; done; \
|
||||
fi
|
||||
RUN set -ex; \
|
||||
if ls /tmp/drivers/ibm-iaccess-*.rpm >/dev/null 2>&1; then \
|
||||
for f in /tmp/drivers/ibm-iaccess-*.rpm; do alien -i --scripts "$f"; done; \
|
||||
else \
|
||||
echo ">> IBM i Access ODBC RPM not found in /tmp/drivers. ODBC connections will fail until it is added."; \
|
||||
fi
|
||||
|
||||
# Register ODBC driver/DSN so unixODBC knows about the IBM driver
|
||||
COPY docker/odbc/odbcinst.ini /etc/odbcinst.ini
|
||||
COPY docker/odbc/odbc.ini /etc/odbc.ini
|
||||
|
||||
# Global tools: dotnet-sonarscanner (+ coverlet for coverage)
|
||||
RUN dotnet tool install --global dotnet-sonarscanner \
|
||||
&& dotnet tool install --global coverlet.console
|
||||
ENV PATH="${PATH}:/root/.dotnet/tools"
|
||||
|
||||
# Non-root user (Dev Containers convention)
|
||||
RUN useradd -ms /bin/bash vscode
|
||||
USER vscode
|
||||
WORKDIR /workspaces
|
52
.devcontainer/devcontainer.json
Normal file
52
.devcontainer/devcontainer.json
Normal file
@ -0,0 +1,52 @@
|
||||
{
|
||||
"name": "AS400API Dev",
|
||||
"build": {
|
||||
"dockerfile": "./Dockerfile",
|
||||
"context": ".."
|
||||
},
|
||||
|
||||
|
||||
// "remoteUser": "vscode",
|
||||
"remoteEnv": {
|
||||
"SONAR_HOST_URL": "http://host.docker.internal:9000"
|
||||
},
|
||||
|
||||
|
||||
"runArgs": ["--init"],
|
||||
|
||||
// Ensure IBM i Access shared libraries are on the loader path when running in devcontainer
|
||||
"containerEnv": {
|
||||
"LD_LIBRARY_PATH": "/opt/ibm/iaccess/lib64:/opt/ibm/iaccess/lib",
|
||||
"AS400_DRIVER_NAME": "IBM i Access ODBC Driver",
|
||||
"SONAR_TOKEN": "squ_ef2f0a2f495a32c33ed81afb16f3cdc98bf1336a"
|
||||
},
|
||||
|
||||
// เมานท์โฟลเดอร์งานเข้า /workspaces/AS400API
|
||||
"workspaceFolder": "/workspaces/AS400API",
|
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/workspaces/AS400API,type=bind,consistency=cached",
|
||||
|
||||
"forwardPorts": [8080],
|
||||
"postCreateCommand": "apt-get update && apt-get install -y jq && dotnet --info && dotnet restore",
|
||||
|
||||
"settings": {
|
||||
"terminal.integrated.defaultProfile.linux": "bash",
|
||||
"dotnet.defaultSolution": "AS400API.sln",
|
||||
"dotnet.projects.enableFileBasedPrograms": false
|
||||
},
|
||||
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
// "ms-dotnettools.csharp",
|
||||
"ms-azuretools.vscode-docker",
|
||||
"oderwat.indent-rainbow",
|
||||
"streetsidesoftware.code-spell-checker",
|
||||
"openai.chatgpt",
|
||||
"ms-dotnettools.csdevkit",
|
||||
"SonarSource.sonarlint-vscode"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"remoteUser": "root"
|
||||
}
|
7
.dockerignore
Normal file
7
.dockerignore
Normal file
@ -0,0 +1,7 @@
|
||||
**/bin/
|
||||
**/obj/
|
||||
**/.vs/
|
||||
**/.vscode/
|
||||
**/.idea/
|
||||
**/.DS_Store
|
||||
*.zip
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
bin
|
||||
Logs
|
||||
obj
|
35
.sonarqube/conf/0/FilesToAnalyze.txt
Normal file
35
.sonarqube/conf/0/FilesToAnalyze.txt
Normal file
@ -0,0 +1,35 @@
|
||||
/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
|
1
.sonarqube/conf/0/ProjectOutFolderPath.txt
Normal file
1
.sonarqube/conf/0/ProjectOutFolderPath.txt
Normal file
@ -0,0 +1 @@
|
||||
/workspaces/AS400API/.sonarqube/out/0
|
9
.sonarqube/conf/0/SonarProjectConfig.xml
Normal file
9
.sonarqube/conf/0/SonarProjectConfig.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<SonarProjectConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/analyzer/2021/1">
|
||||
<AnalysisConfigPath>/workspaces/AS400API/.sonarqube/conf/SonarQubeAnalysisConfig.xml</AnalysisConfigPath>
|
||||
<ProjectPath>/workspaces/AS400API/AS400API.csproj</ProjectPath>
|
||||
<FilesToAnalyzePath>/workspaces/AS400API/.sonarqube/conf/0/FilesToAnalyze.txt</FilesToAnalyzePath>
|
||||
<OutPath>/workspaces/AS400API/.sonarqube/out/0</OutPath>
|
||||
<ProjectType>Product</ProjectType>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</SonarProjectConfig>
|
410
.sonarqube/conf/Sonar-cs-none.ruleset
Normal file
410
.sonarqube/conf/Sonar-cs-none.ruleset
Normal file
@ -0,0 +1,410 @@
|
||||
<?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>
|
410
.sonarqube/conf/Sonar-cs.ruleset
Normal file
410
.sonarqube/conf/Sonar-cs.ruleset
Normal file
@ -0,0 +1,410 @@
|
||||
<?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>
|
184
.sonarqube/conf/Sonar-vbnet-none.ruleset
Normal file
184
.sonarqube/conf/Sonar-vbnet-none.ruleset
Normal file
@ -0,0 +1,184 @@
|
||||
<?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>
|
184
.sonarqube/conf/Sonar-vbnet.ruleset
Normal file
184
.sonarqube/conf/Sonar-vbnet.ruleset
Normal file
@ -0,0 +1,184 @@
|
||||
<?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>
|
172
.sonarqube/conf/SonarQubeAnalysisConfig.xml
Normal file
172
.sonarqube/conf/SonarQubeAnalysisConfig.xml
Normal file
@ -0,0 +1,172 @@
|
||||
<?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}&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:58 AM</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>
|
869
.sonarqube/conf/cs/SonarLint.xml
Normal file
869
.sonarqube/conf/cs/SonarLint.xml
Normal file
@ -0,0 +1,869 @@
|
||||
<?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>
|
477
.sonarqube/conf/vbnet/SonarLint.xml
Normal file
477
.sonarqube/conf/vbnet/SonarLint.xml
Normal file
@ -0,0 +1,477 @@
|
||||
<?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>
|
0
.sonarqube/out/.sonar/.sonar_lock
Normal file
0
.sonarqube/out/.sonar/.sonar_lock
Normal file
6
.sonarqube/out/.sonar/report-task.txt
Normal file
6
.sonarqube/out/.sonar/report-task.txt
Normal file
@ -0,0 +1,6 @@
|
||||
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
|
625
.sonarqube/out/0/Issues.json
Normal file
625
.sonarqube/out/0/Issues.json
Normal file
@ -0,0 +1,625 @@
|
||||
{
|
||||
"$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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
20
.sonarqube/out/0/ProjectInfo.xml
Normal file
20
.sonarqube/out/0/ProjectInfo.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ProjectInfo 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">
|
||||
<ProjectName>AS400API</ProjectName>
|
||||
<ProjectLanguage>C#</ProjectLanguage>
|
||||
<ProjectType>Product</ProjectType>
|
||||
<ProjectGuid>40cb5b53-77b8-b1fd-458c-805350cb09e8</ProjectGuid>
|
||||
<FullPath>/workspaces/AS400API/AS400API.csproj</FullPath>
|
||||
<IsExcluded>false</IsExcluded>
|
||||
<AnalysisResultFiles>
|
||||
<AnalysisResultFile Id="FilesToAnalyze" Location="/workspaces/AS400API/.sonarqube/conf/0/FilesToAnalyze.txt" />
|
||||
</AnalysisResultFiles>
|
||||
<AnalysisSettings>
|
||||
<Property Name="sonar.cs.roslyn.reportFilePaths">/workspaces/AS400API/.sonarqube/out/0/Issues.json</Property>
|
||||
<Property Name="sonar.cs.analyzer.projectOutPaths">/workspaces/AS400API/.sonarqube/out/0</Property>
|
||||
<Property Name="sonar.cs.scanner.telemetry">/workspaces/AS400API/.sonarqube/out/0/Telemetry.json</Property>
|
||||
</AnalysisSettings>
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>AnyCPU</Platform>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
</ProjectInfo>
|
1
.sonarqube/out/0/Telemetry.json
Normal file
1
.sonarqube/out/0/Telemetry.json
Normal file
@ -0,0 +1 @@
|
||||
{"dotnetenterprise.s4net.build.target_framework_moniker":".NETCoreApp,Version=v9.0"}
|
22
.sonarqube/out/0/output-cs/file-metadata.pb
Normal file
22
.sonarqube/out/0/output-cs/file-metadata.pb
Normal file
@ -0,0 +1,22 @@
|
||||
2
|
||||
)/workspaces/AS400API/Auth/AuthPolicies.csutf-8.
|
||||
%/workspaces/AS400API/Auth/DemoUser.csutf-83
|
||||
*/workspaces/AS400API/Auth/DemoUserStore.csutf-82
|
||||
)/workspaces/AS400API/Auth/LoginRequest.csutf-83
|
||||
*/workspaces/AS400API/Auth/LoginResponse.csutf-84
|
||||
+/workspaces/AS400API/Auth/PasswordHasher.csutf-8+
|
||||
"/workspaces/AS400API/Auth/Roles.csutf-82
|
||||
)/workspaces/AS400API/Auth/TokenService.csutf-89
|
||||
0/workspaces/AS400API/Configuration/JwtOptions.csutf-8:
|
||||
1/workspaces/AS400API/Configuration/OdbcOptions.csutf-89
|
||||
0/workspaces/AS400API/Endpoints/As400Endpoints.csutf-8?
|
||||
6/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.csutf-88
|
||||
//workspaces/AS400API/Endpoints/AuthEndpoints.csutf-8:
|
||||
1/workspaces/AS400API/Endpoints/SystemEndpoints.csutf-8D
|
||||
;/workspaces/AS400API/Infrastructure/DatabaseRowFormatter.csutf-8D
|
||||
;/workspaces/AS400API/Infrastructure/DataReaderExtensions.csutf-8(
|
||||
/workspaces/AS400API/Program.csutf-8K
|
||||
@/workspaces/AS400API/obj/Debug/net9.0/AS400API.GlobalUsings.g.csutf-8_
|
||||
T/workspaces/AS400API/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.csutf-8I
|
||||
>/workspaces/AS400API/obj/Debug/net9.0/AS400API.AssemblyInfo.csutf-8\
|
||||
Q/workspaces/AS400API/obj/Debug/net9.0/AS400API.MvcApplicationPartsAssemblyInfo.csutf-8
|
1
.sonarqube/out/0/output-cs/log.pb
Normal file
1
.sonarqube/out/0/output-cs/log.pb
Normal file
@ -0,0 +1 @@
|
||||
Roslyn version: 4.14.0.0Language version: CSharp13!Concurrent execution: enabledgcFile '/workspaces/AS400API/obj/Debug/net9.0/AS400API.GlobalUsings.g.cs' was recognized as generated{wFile '/workspaces/AS400API/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs' was recognized as generatedeaFile '/workspaces/AS400API/obj/Debug/net9.0/AS400API.AssemblyInfo.cs' was recognized as generatedxtFile '/workspaces/AS400API/obj/Debug/net9.0/AS400API.MvcApplicationPartsAssemblyInfo.cs' was recognized as generated
|
30
.sonarqube/out/0/output-cs/metrics.pb
Normal file
30
.sonarqube/out/0/output-cs/metrics.pb
Normal file
@ -0,0 +1,30 @@
|
||||
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 8r
|
||||
x‚p
|
||||
1/workspaces/AS400API/Configuration/OdbcOptions.cs 8j
r
|
||||
!"#$%&x‚ !"#$Ç
|
||||
0/workspaces/AS400API/Endpoints/As400Endpoints.csD 8 j“” r¯
|
||||
!"#$%&'()*+,-/0123456789:;<=>?@ABDEFGHIJKLMNPQRSTUWXYZ[\]^_`abcefghijklmnoqrstuvwyz|}~€<01>‚„…†‡ˆ‰Š‹Œ<01><01><01>‘–—˜™š›œ<01>žŸ¡£¤¥x‚N !"&'*/146789=>ADFIJLMWXYZ^_begjkmnyz|}~€<01>‚…‡‰ŠŒ<01>–—˜œ<01>£«
|
||||
6/workspaces/AS400API/Endpoints/AS400_CP3FPRD/ORDUAG.cs5 8j„r÷
|
||||
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€<01>‚ƒ„…†‡ˆ‰Š‹Œ<01>Ž<01><01>‘’“”•–˜š›œ<01>žŸ ¡¢£¤¦§¨©ª«®°±²³´¶¸¹º»¼¾ÀÁÂÃÄÆÇÈÉÊÌÍÎÏÐÒÓÕÖØÙÛÜÝÞßàâãäåæçèéêëìîïðòóôõö÷øùûüýþÿ€<02>‚ƒ…‡ˆŠ‹ŒŽ<02>’”•–x‚h˜œ¡¤¦§©ª®±³¹º»¼ÀÂÃÆÈÉÌÎÏÒÓÕÖØÙÛÝÞßãåçèêëîòôõö÷ûü€<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{|}~<>
|
448
.sonarqube/out/0/output-cs/symrefs.pb
Normal file
448
.sonarqube/out/0/output-cs/symrefs.pb
Normal file
@ -0,0 +1,448 @@
|
||||
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> *
|
||||
{{ || }} ~~
|
5928
.sonarqube/out/0/output-cs/token-cpd.pb
Normal file
5928
.sonarqube/out/0/output-cs/token-cpd.pb
Normal file
File diff suppressed because it is too large
Load Diff
437
.sonarqube/out/0/output-cs/token-type.pb
Normal file
437
.sonarqube/out/0/output-cs/token-type.pb
Normal file
@ -0,0 +1,437 @@
|
||||
Ý
|
||||
)/workspaces/AS400API/Auth/AuthPolicies.cs
|
||||
|
||||
|
||||
* ;
|
||||
' 5<>
|
||||
%/workspaces/AS400API/Auth/DemoUser.cs
|
||||
|
||||
|
||||
|
||||
% +: @O bc i
|
||||
|
||||
! $
|
||||
! $
|
||||
%/ 2²
|
||||
*/workspaces/AS400API/Auth/DemoUserStore.cs
|
||||
|
||||
|
||||
|
||||
|
||||
! & ( 0
|
||||
&
( 0
2 @
# *, 68 ;@ EM R
& 02 <> AF K
|
||||
0 6% () ,
|
||||
$ ,3 9 ' -8 >I \] c ) ‰
|
||||
)/workspaces/AS400API/Auth/LoginRequest.cs
|
||||
|
||||
!" (3 9À
|
||||
*/workspaces/AS400API/Auth/LoginResponse.cs
|
||||
|
||||
|
||||
"# )7 :F LX kl rÃ
|
||||
+/workspaces/AS400API/Auth/PasswordHasher.cs
|
||||
|
||||
|
||||
|
||||
|
||||
" ! #
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
" # *
|
||||
&
: @ ( %= M 3 :
|
||||
$/ 5B 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
: <
|
||||
|
||||
. 6P R /0
|
||||
* + /0 k‡
|
||||
1/workspaces/AS400API/Configuration/OdbcOptions.cs
|
||||
|
||||
|
||||
|
||||
|
||||
! $
|
||||
& ) + .
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"
|
||||
!# &
Z
|
||||
! $
|
||||
"$ '- 0
|
||||
" %' *0 7
|
||||
"( ,
|
||||
@ $< OT n # # %% &
|
||||
D FF Wi j
|
||||
8 :: >D E
|
||||
< >> BL M
|
||||
: < < C K L!!
|
||||
!!
!!= ?!!? I!!T U""
|
||||
""
""@ B""B P""^ _##
|
||||
## -$$ $$ $$ ë
|
||||
0/workspaces/AS400API/Endpoints/As400Endpoints.cs
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"
|
||||
#6 :; L &( -/ 5; IP ^ 4 H & _ ". 1< `& Wh i ! !!& M"" "" $$ $$ &&$ 9'' '' ''' )'') 7''C D** *++ Q,, -- // *//, 1//3 A//H V11 114 L22 44 55 55 55( x66 66 $77 88& F99 99 ;; ;; ==$ C>> >> >>' )>>) A>>M NAA *BB KDD 'DD) .DD0 6DDD RDDY gFF FF4 IGG II JJ JJ LL& _MM MM "MM. 1MM< hPP PP PU( WW WW #WW> AXX& [YY ZZ ZZ \\ \\ ^^$ X__ __ __' )__) @__L Mbb *cc Iee 0ee2 7ee9 ?eeM See_ m
eet ‚gg gg4 Qhh jj kk kk kk> Dmm& xnn nn "nn. 1nn< zqq 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 &( -. 23 := IS `l x
|
||||
‡ ‘ # )R X * -8 ] !" /e gi 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 ! +, 24 :
|
||||
$& ,E IJ UV \^ d #$ *, 25 C !! !! %% (( (( (( ((& ,**
|
||||
** ,, // 00 00 00 #00% (00, >44
|
||||
44 66 99
|
||||
99 ;; ;;# $<< <<" #>> AA AA AA1 2AA? @DD DD DD "EE FF FF
FF HH II II" #KK NN NN4 5OO OO! "QQ" #UU Ë
|
||||
;/workspaces/AS400API/Infrastructure/DataReaderExtensions.cs
|
||||
|
||||
|
||||
|
||||
(
|
||||
- 12 >G J
|
||||
|
||||
|
||||
|
||||
+ 13 C* 35 E §
|
||||
|
||||
/workspaces/AS400API/Program.cs
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4
|
||||
& ,
|
||||
|
||||
|
||||
! '
|
||||
, 3 A %= V 1 = 5 E!! !!3 A!!F I
|
||||
## ##
|
||||
$$
|
||||
%%
|
||||
'' '' o
|
||||
**
|
||||
++ ++2 <++N X++_ b++c m
|
||||
-- -- -- )--* 222 22 22! ,44 55 88 88 88 2:: ;; I<<
== !>> ?? @@ @@ (BB CC HH# &HH' AJJ JJ& ,NN )NN0 3NN4 BPP *QQ +TT (WW, /WW0 IYY ![[ #]]' +__ #`` ``- .ff "gg gg( -hh "ii
|
||||
ll
|
||||
nn
|
||||
{{ {{ „„ 1…… F
|
24
.sonarqube/out/ProjectInfo.log
Normal file
24
.sonarqube/out/ProjectInfo.log
Normal file
@ -0,0 +1,24 @@
|
||||
Product projects
|
||||
---------------------------------------
|
||||
/workspaces/AS400API/AS400API.csproj
|
||||
|
||||
|
||||
Test projects
|
||||
---------------------------------------
|
||||
|
||||
|
||||
Invalid projects
|
||||
---------------------------------------
|
||||
{none}
|
||||
|
||||
|
||||
Skipped projects
|
||||
---------------------------------------
|
||||
{none}
|
||||
|
||||
|
||||
Excluded projects
|
||||
---------------------------------------
|
||||
{none}
|
||||
|
||||
|
104
.sonarqube/out/ScannerEngineInput.json
Normal file
104
.sonarqube/out/ScannerEngineInput.json
Normal file
@ -0,0 +1,104 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
7
.sonarqube/out/Telemetry.S4NET.json
Normal file
7
.sonarqube/out/Telemetry.S4NET.json
Normal file
@ -0,0 +1,7 @@
|
||||
{"dotnetenterprise.s4net.params.sonar_cs_opencover_reportspaths.source":"CLI"}
|
||||
{"dotnetenterprise.s4net.params.sonar_exclusions.source":"CLI"}
|
||||
{"dotnetenterprise.s4net.serverInfo.product":"SQ_Server"}
|
||||
{"dotnetenterprise.s4net.serverInfo.serverUrl":"custom_url"}
|
||||
{"dotnetenterprise.s4net.serverInfo.version":"9.9.8.100196"}
|
||||
{"dotnetenterprise.s4net.jre.bootstrapping":"UnsupportedByServer"}
|
||||
{"dotnetenterprise.s4net.scannerEngine.bootstrapping":"Unsupported"}
|
2
.sonarqube/out/Telemetry.Targets.S4NET.json
Normal file
2
.sonarqube/out/Telemetry.Targets.S4NET.json
Normal file
@ -0,0 +1,2 @@
|
||||
{"dotnetenterprise.s4net.build.visual_studio_version":"17.0"}
|
||||
{"dotnetenterprise.s4net.build.msbuild_version":"17.14.21"}
|
78
.sonarqube/out/sonar-project.properties
Normal file
78
.sonarqube/out/sonar-project.properties
Normal file
@ -0,0 +1,78 @@
|
||||
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
|
||||
|
31
.vscode/launch.json
vendored
Normal file
31
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
|
||||
{
|
||||
|
||||
"name": "AS400API: Launch",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
"program": "dotnet",
|
||||
"args": [ "run", "--project", "${workspaceFolder}/AS400API.csproj" ],
|
||||
"cwd": "${workspaceFolder}",
|
||||
"stopAtEntry": false,
|
||||
"serverReadyAction": {
|
||||
"action": "openExternally",
|
||||
"pattern": "\\bNow listening on:\\s+(https?://[^\\s]+)"
|
||||
},
|
||||
"env": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development",
|
||||
"DOTNET_ENVIRONMENT": "Development",
|
||||
"ASPNETCORE_URLS": "http://0.0.0.0:5080"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "AS400API: Attach",
|
||||
"type": "coreclr",
|
||||
"request": "attach"
|
||||
}
|
||||
]
|
||||
}
|
32
.vscode/tasks.json
vendored
Normal file
32
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/AS400API.csproj"
|
||||
],
|
||||
"problemMatcher": "\u0024msCompile",
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "silent"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "watch",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"watch",
|
||||
"run",
|
||||
"--project",
|
||||
"${workspaceFolder}/AS400API.csproj"
|
||||
],
|
||||
"isBackground": true,
|
||||
"problemMatcher": "\u0024msCompile"
|
||||
}
|
||||
]
|
||||
}
|
17
AS400API.csproj
Normal file
17
AS400API.csproj
Normal file
@ -0,0 +1,17 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.1.28" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
<PackageReference Include="System.Data.Odbc" Version="8.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.5" />
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="8.0.1" />
|
||||
<PackageReference Include="Serilog.Settings.Configuration" Version="8.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
24
AS400API.sln
Normal file
24
AS400API.sln
Normal file
@ -0,0 +1,24 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.5.2.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AS400API", "AS400API.csproj", "{40CB5B53-77B8-B1FD-458C-805350CB09E8}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{40CB5B53-77B8-B1FD-458C-805350CB09E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{40CB5B53-77B8-B1FD-458C-805350CB09E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{40CB5B53-77B8-B1FD-458C-805350CB09E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{40CB5B53-77B8-B1FD-458C-805350CB09E8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {766AFEF9-A58F-4ED4-87F7-701B37E1F580}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
7
Auth/AuthPolicies.cs
Normal file
7
Auth/AuthPolicies.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public static class AuthPolicies
|
||||
{
|
||||
public const string RequireOperator = "RequireOperator";
|
||||
public const string RequireAdmin = "RequireAdmin";
|
||||
}
|
19
Auth/DemoUser.cs
Normal file
19
Auth/DemoUser.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public sealed class DemoUser
|
||||
{
|
||||
public DemoUser(string username, string passwordHash, string passwordSalt, IReadOnlyCollection<string> roles)
|
||||
{
|
||||
Username = username;
|
||||
PasswordHash = passwordHash;
|
||||
PasswordSalt = passwordSalt;
|
||||
Roles = roles;
|
||||
}
|
||||
|
||||
public string Username { get; }
|
||||
public string PasswordHash { get; }
|
||||
public string PasswordSalt { get; }
|
||||
public IReadOnlyCollection<string> Roles { get; }
|
||||
}
|
34
Auth/DemoUserStore.cs
Normal file
34
Auth/DemoUserStore.cs
Normal file
@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public sealed class DemoUserStore
|
||||
{
|
||||
private readonly Dictionary<string, DemoUser> _users;
|
||||
|
||||
public DemoUserStore()
|
||||
{
|
||||
_users = new Dictionary<string, DemoUser>(StringComparer.OrdinalIgnoreCase)
|
||||
{
|
||||
["admin"] = CreateUser("admin", "Pass@123", new[] { Roles.Admin, Roles.Operator }),
|
||||
["operator"] = CreateUser("operator", "Pass@123", new[] { Roles.Operator })
|
||||
};
|
||||
}
|
||||
|
||||
public ValueTask<DemoUser?> FindByNameAsync(string username)
|
||||
{
|
||||
_users.TryGetValue(username, out var user);
|
||||
return ValueTask.FromResult(user);
|
||||
}
|
||||
|
||||
public bool ValidateCredentials(DemoUser user, string password) =>
|
||||
PasswordHasher.Verify(password, user.PasswordHash, user.PasswordSalt);
|
||||
|
||||
private static DemoUser CreateUser(string username, string password, IReadOnlyCollection<string> roles)
|
||||
{
|
||||
var (hash, salt) = PasswordHasher.HashPassword(password);
|
||||
return new DemoUser(username, hash, salt, roles);
|
||||
}
|
||||
}
|
3
Auth/LoginRequest.cs
Normal file
3
Auth/LoginRequest.cs
Normal file
@ -0,0 +1,3 @@
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public sealed record LoginRequest(string Username, string Password);
|
5
Auth/LoginResponse.cs
Normal file
5
Auth/LoginResponse.cs
Normal file
@ -0,0 +1,5 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public sealed record LoginResponse(string AccessToken, int ExpiresIn, string TokenType, IReadOnlyCollection<string> Roles);
|
27
Auth/PasswordHasher.cs
Normal file
27
Auth/PasswordHasher.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using Microsoft.AspNetCore.Cryptography.KeyDerivation;
|
||||
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public static class PasswordHasher
|
||||
{
|
||||
private const int SaltSize = 16;
|
||||
private const int KeySize = 32;
|
||||
private const int Iterations = 100_000;
|
||||
|
||||
public static (string Hash, string Salt) HashPassword(string password)
|
||||
{
|
||||
var salt = RandomNumberGenerator.GetBytes(SaltSize);
|
||||
var hashBytes = KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA256, Iterations, KeySize);
|
||||
return (Convert.ToBase64String(hashBytes), Convert.ToBase64String(salt));
|
||||
}
|
||||
|
||||
public static bool Verify(string password, string storedHash, string storedSalt)
|
||||
{
|
||||
var saltBytes = Convert.FromBase64String(storedSalt);
|
||||
var computedBytes = KeyDerivation.Pbkdf2(password, saltBytes, KeyDerivationPrf.HMACSHA256, Iterations, KeySize);
|
||||
var storedBytes = Convert.FromBase64String(storedHash);
|
||||
return CryptographicOperations.FixedTimeEquals(storedBytes, computedBytes);
|
||||
}
|
||||
}
|
7
Auth/Roles.cs
Normal file
7
Auth/Roles.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public static class Roles
|
||||
{
|
||||
public const string Admin = "Admin";
|
||||
public const string Operator = "Operator";
|
||||
}
|
48
Auth/TokenService.cs
Normal file
48
Auth/TokenService.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using AS400API.Configuration;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
|
||||
namespace AS400API.Auth;
|
||||
|
||||
public sealed class TokenService
|
||||
{
|
||||
private readonly JwtOptions _options;
|
||||
private readonly JwtSecurityTokenHandler _tokenHandler = new();
|
||||
|
||||
public TokenService(JwtOptions options)
|
||||
{
|
||||
_options = options;
|
||||
}
|
||||
|
||||
public string CreateToken(DemoUser user)
|
||||
{
|
||||
var signingCredentials = new SigningCredentials(
|
||||
new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_options.Key)),
|
||||
SecurityAlgorithms.HmacSha256);
|
||||
|
||||
var claims = new List<Claim>
|
||||
{
|
||||
new(JwtRegisteredClaimNames.Sub, user.Username),
|
||||
new(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
|
||||
new(ClaimTypes.Name, user.Username)
|
||||
};
|
||||
|
||||
foreach (var role in user.Roles)
|
||||
{
|
||||
claims.Add(new Claim(ClaimTypes.Role, role));
|
||||
}
|
||||
|
||||
var token = new JwtSecurityToken(
|
||||
issuer: _options.Issuer,
|
||||
audience: _options.Audience,
|
||||
claims: claims,
|
||||
expires: DateTime.UtcNow.AddMinutes(_options.AccessTokenLifetimeMinutes),
|
||||
signingCredentials: signingCredentials);
|
||||
|
||||
return _tokenHandler.WriteToken(token);
|
||||
}
|
||||
}
|
27
Configuration/JwtOptions.cs
Normal file
27
Configuration/JwtOptions.cs
Normal file
@ -0,0 +1,27 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace AS400API.Configuration;
|
||||
|
||||
public sealed class JwtOptions
|
||||
{
|
||||
public const string SectionName = "Jwt";
|
||||
|
||||
public string Issuer { get; set; } = "AS400API";
|
||||
public string Audience { get; set; } = "AS400API.Clients";
|
||||
public string Key { get; set; } = "change-me-to-a-long-random-secret";
|
||||
public int AccessTokenLifetimeMinutes { get; set; } = 60;
|
||||
|
||||
public void EnsureIsValid()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(Key) || Encoding.UTF8.GetByteCount(Key) < 32)
|
||||
{
|
||||
throw new InvalidOperationException("Jwt:Key must be at least 32 UTF-8 bytes. Set a strong secret in configuration");
|
||||
}
|
||||
|
||||
if (AccessTokenLifetimeMinutes <= 0)
|
||||
{
|
||||
throw new InvalidOperationException("Jwt:AccessTokenLifetimeMinutes must be a positive integer");
|
||||
}
|
||||
}
|
||||
}
|
38
Configuration/OdbcOptions.cs
Normal file
38
Configuration/OdbcOptions.cs
Normal file
@ -0,0 +1,38 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace AS400API.Configuration;
|
||||
|
||||
public sealed class OdbcOptions
|
||||
{
|
||||
public string? System { get; set; }
|
||||
public string? DefaultLibraries { get; set; }
|
||||
public string? User { get; set; }
|
||||
public string? Password { get; set; }
|
||||
/// <summary>
|
||||
/// 0 = SQL naming (*SYS = library/file); 1 = System naming (*SYS). Keep 1 by default.
|
||||
/// </summary>
|
||||
public string? Naming { get; set; }
|
||||
public string? Translate { get; set; } = "1";
|
||||
public string? ClientLocale { get; set; } = "en_US";
|
||||
public bool Pooling { get; set; } = true;
|
||||
|
||||
public string ToConnectionString()
|
||||
{
|
||||
// Driver name must match installed name in odbcinst.ini
|
||||
var driverName = Environment.GetEnvironmentVariable("AS400_DRIVER_NAME") ?? "IBM i Access ODBC Driver";
|
||||
var parts = new List<string>
|
||||
{
|
||||
$"Driver={{{driverName}}}",
|
||||
$"System={System}"
|
||||
};
|
||||
if (!string.IsNullOrWhiteSpace(DefaultLibraries)) parts.Add($"DefaultLibraries={DefaultLibraries}");
|
||||
if (!string.IsNullOrWhiteSpace(User)) parts.Add($"Uid={User}");
|
||||
if (!string.IsNullOrWhiteSpace(Password)) parts.Add($"Pwd={Password}");
|
||||
if (!string.IsNullOrWhiteSpace(Naming)) parts.Add($"Naming={Naming}");
|
||||
if (!string.IsNullOrWhiteSpace(Translate)) parts.Add($"TRANSLATE={Translate}");
|
||||
if (!string.IsNullOrWhiteSpace(ClientLocale)) parts.Add($"Client_Locale={ClientLocale}");
|
||||
if (Pooling) parts.Add("Pooling=true");
|
||||
return string.Join(";", parts);
|
||||
}
|
||||
}
|
70
Dockerfile
Normal file
70
Dockerfile
Normal file
@ -0,0 +1,70 @@
|
||||
# ---------- build stage ----------
|
||||
FROM --platform=linux/amd64 mcr.microsoft.com/dotnet/sdk:9.0 AS build
|
||||
WORKDIR /src
|
||||
|
||||
# Install tools needed to install IBM i Access ODBC (alien to convert RPM, unixODBC dev for headers)
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
alien curl ca-certificates unzip \
|
||||
unixodbc unixodbc-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Ensure directories exist even if the IBM driver is absent, so later COPY succeeds
|
||||
RUN mkdir -p /opt/ibm /usr/lib /usr/lib64 /tmp/odbc-libs/lib /tmp/odbc-libs/lib64
|
||||
|
||||
# Copy IBM i Access ODBC RPM from build context (put your rpm under ./drivers)
|
||||
# Example filename: ibm-iaccess-1.1.0.29-1.0.x86_64.rpm.disabled (we drop the .disabled suffix below)
|
||||
COPY drivers/ /tmp/drivers/
|
||||
RUN set -ex; \
|
||||
if ls /tmp/drivers/ibm-iaccess-*.rpm.disabled >/dev/null 2>&1; then \
|
||||
for f in /tmp/drivers/ibm-iaccess-*.rpm.disabled; do mv "$f" "${f%.disabled}"; done; \
|
||||
fi
|
||||
RUN set -ex; \
|
||||
if ls /tmp/drivers/ibm-iaccess-*.rpm >/dev/null 2>&1; then \
|
||||
for f in /tmp/drivers/ibm-iaccess-*.rpm; do alien -i --scripts "$f"; done; \
|
||||
else echo ">> IBM i Access ODBC RPM not found in /tmp/drivers. Build will continue, but ODBC will not work until driver is present." ; fi
|
||||
|
||||
# Collect IBM driver shared libraries so they can be copied without optional globs later
|
||||
RUN set -ex; \
|
||||
if ls /opt/ibm/iaccess/lib64/libcwb*.so* >/dev/null 2>&1; then cp /opt/ibm/iaccess/lib64/libcwb*.so* /tmp/odbc-libs/lib64/; fi; \
|
||||
if ls /opt/ibm/iaccess/lib/libcwb*.so* >/dev/null 2>&1; then cp /opt/ibm/iaccess/lib/libcwb*.so* /tmp/odbc-libs/lib/; fi
|
||||
|
||||
# Register ODBC driver (odbcinst.ini)
|
||||
COPY docker/odbc/odbcinst.ini /etc/odbcinst.ini
|
||||
# Optional DSN (odbc.ini) if you prefer DSN connections
|
||||
COPY docker/odbc/odbc.ini /etc/odbc.ini
|
||||
|
||||
# copy project and restore/build
|
||||
COPY AS400API.csproj ./
|
||||
RUN dotnet restore AS400API.csproj
|
||||
COPY . .
|
||||
RUN dotnet publish AS400API.csproj -c Release -o /app/publish /p:UseAppHost=false
|
||||
|
||||
# ---------- runtime stage ----------
|
||||
FROM --platform=linux/amd64 mcr.microsoft.com/dotnet/aspnet:9.0 AS final
|
||||
WORKDIR /app
|
||||
|
||||
# Install unixODBC and copy IBM i Access ODBC libs from build stage
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
unixodbc \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy IBM i driver files installed in build stage (if present)
|
||||
# Common path after installing ibm-iaccess via alien:
|
||||
COPY --from=build /opt/ibm /opt/ibm
|
||||
COPY --from=build /tmp/odbc-libs/lib64/ /usr/lib64/
|
||||
COPY --from=build /tmp/odbc-libs/lib/ /usr/lib/
|
||||
|
||||
# ODBC config
|
||||
COPY docker/odbc/odbcinst.ini /etc/odbcinst.ini
|
||||
COPY docker/odbc/odbc.ini /etc/odbc.ini
|
||||
|
||||
# App
|
||||
COPY --from=build /app/publish .
|
||||
|
||||
# Default envs (override in compose)
|
||||
ENV ASPNETCORE_URLS=http://+:8080
|
||||
ENV AS400_DRIVER_NAME="IBM i Access ODBC Driver"
|
||||
ENV LD_LIBRARY_PATH=/opt/ibm/iaccess/lib64:/opt/ibm/iaccess/lib
|
||||
|
||||
EXPOSE 8080
|
||||
ENTRYPOINT ["dotnet", "AS400API.dll"]
|
278
Endpoints/AS400_CP3FPRD/ORDUAG.cs
Normal file
278
Endpoints/AS400_CP3FPRD/ORDUAG.cs
Normal file
@ -0,0 +1,278 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Odbc;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using AS400API.Infrastructure;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
|
||||
namespace AS400API.Endpoints;
|
||||
|
||||
public static class ORDUAGEndpoint
|
||||
{
|
||||
private static readonly string[] ColumnNames =
|
||||
[
|
||||
"AG_CODE_COMPANY",
|
||||
"AG_CODE_CURRENCY",
|
||||
"AG_CODE_NUMBER",
|
||||
"AGENT_AGENCY",
|
||||
"AGENT_HOME_NAAD",
|
||||
"AGENT_MAIL_NAAD",
|
||||
"AGENT_PHONE",
|
||||
"AGENT_STAT",
|
||||
"AGENT_START_DATE",
|
||||
"AGENT_DATE_TERM",
|
||||
"AGENT_FILLER_01",
|
||||
"AGENT_QUALITY_BONUS",
|
||||
"AGENT_MARKET_BONUS",
|
||||
"AGENT_NON_HOUSED_COMP",
|
||||
"AGENT_OTHER_COMP",
|
||||
"AGENT_FINANCE",
|
||||
"AGENT_FILLER_02",
|
||||
"AGENT_PAY_NOPAY",
|
||||
"AGENT_HOLD_BACK",
|
||||
"AGENT_DEVELOPMENT_AMT",
|
||||
"AGENT_NON_MED_PRIV",
|
||||
"AGENT_FRINGE_BENEFIT",
|
||||
"AGENT_FILLER_03",
|
||||
"AGENT_REGION",
|
||||
"AGENT_SPONSOR_LIC",
|
||||
"AGENT_PRIM_LIC_NO",
|
||||
"AGENT_QUALIFICATION",
|
||||
"AGENT_PREV_ID",
|
||||
"AGENT_FILLER_05",
|
||||
"AGENT_FYR_COMM_CURMTH",
|
||||
"AGENT_FYR_COMM_YTD",
|
||||
"AGENT_RENEWAL_COMM_CURMTH",
|
||||
"AGENT_RENEWAL_COMM_YTD",
|
||||
"AGENT_SERVFEE_CURMTH",
|
||||
"AGENT_SERVFEE_YTD",
|
||||
"AGENT_SINGPRM_CURMTH",
|
||||
"AGENT_SINGPRM_YTD",
|
||||
"AGENT_OVERRIDE_CURMTH",
|
||||
"AGENT_OVERRIDE_YTD",
|
||||
"AGENT_PAY_DED_CURMTH",
|
||||
"AGENT_PAY_DED_YTD",
|
||||
"AGENT_PAYABLE_BALANCE_YTD",
|
||||
"AGENT_NET_FYR_COMM1",
|
||||
"AGENT_NET_FYR_COMM2",
|
||||
"AGENT_NET_FYR_COMM3",
|
||||
"AGENT_NET_FYR_COMM4",
|
||||
"AGENT_NET_FYR_COMM5",
|
||||
"AGENT_NET_FYR_COMM6",
|
||||
"AGENT_NET_FYR_COMM7",
|
||||
"AGENT_NET_FYR_COMM8",
|
||||
"AGENT_NET_FYR_COMM9",
|
||||
"AGENT_NET_FYR_COMM10",
|
||||
"AGENT_NET_FYR_COMM11",
|
||||
"AGENT_NET_FYR_COMM12",
|
||||
"AGENT_ASGNMT_MADE_AMT",
|
||||
"AGENT_ASGNMT_REC_AMT",
|
||||
"AGENT_NET_FYR_LIFE_COMM1",
|
||||
"AGENT_NET_FYR_LIFE_COMM2",
|
||||
"AGENT_NET_FYR_LIFE_COMM3",
|
||||
"AGENT_NET_FYR_LIFE_COMM4",
|
||||
"AGENT_NET_FYR_LIFE_COMM5",
|
||||
"AGENT_NET_FYR_LIFE_COMM6",
|
||||
"AGENT_NET_FYR_LIFE_COMM7",
|
||||
"AGENT_NET_FYR_LIFE_COMM8",
|
||||
"AGENT_NET_FYR_LIFE_COMM9",
|
||||
"AGENT_NET_FYR_LIFE_COMM10",
|
||||
"AGENT_NET_FYR_LIFE_COMM11",
|
||||
"AGENT_NET_FYR_LIFE_COMM12",
|
||||
"AGENT_FYC_SINGPRM_CURMTH",
|
||||
"AGENT_FYC_SINGPRM_YTD",
|
||||
"AGENT_FYR_LIFE_COMM_CURMTH",
|
||||
"AGENT_FYR_LIFE_COMM_YTD",
|
||||
"AGENT_REN_LIFE_COMM_CURMTH",
|
||||
"AGENT_REN_LIFE_COMM_YTD",
|
||||
"AGENT_QUALITY_BON_CURMTH",
|
||||
"AGENT_QUALITY_BON_YTD",
|
||||
"AGENT_MARKET_BON_CURMTH",
|
||||
"AGENT_MARKET_BON_YTD",
|
||||
"AGENT_NON_HOUSED_CURMTH",
|
||||
"AGENT_NON_HOUSED_YTD",
|
||||
"AGENT_APP_CNT_LSTMTH",
|
||||
"AGENT_APP_CNT_YTM",
|
||||
"AGENT_TOT_PREM_WRIT_LSTMTH",
|
||||
"AGENT_TOT_PREM_WRIT_YTM",
|
||||
"AGENT_LIFE_PREM_WRIT_LSTMTH",
|
||||
"AGENT_LIFE_PREM_WRIT_YTM",
|
||||
"AGENT_TOT_FYP_CURMTH",
|
||||
"AGENT_TOT_FYP_YTD",
|
||||
"AGENT_TOT_REN_CURMTH",
|
||||
"AGENT_TOT_REN_YTD",
|
||||
"AGENT_PERSISTENCY1",
|
||||
"AGENT_PERSISTENCY2",
|
||||
"AGENT_PERSISTENCY3",
|
||||
"AGENT_PERSISTENCY4",
|
||||
"AGENT_PRODUCTION1",
|
||||
"AGENT_PRODUCTION2",
|
||||
"AGENT_PRODUCTION3",
|
||||
"AGENT_PRODUCTION4",
|
||||
"AGENT_MDRT1",
|
||||
"AGENT_MDRT2",
|
||||
"AGENT_MDRT3",
|
||||
"AGENT_MDRT4",
|
||||
"AGENT_CONVENTIONS1",
|
||||
"AGENT_CONVENTIONS2",
|
||||
"AGENT_CONVENTIONS3",
|
||||
"AGENT_CONVENTIONS4",
|
||||
"AGENT_APPTIVITY_AWARD1",
|
||||
"AGENT_APPTIVITY_AWARD2",
|
||||
"AGENT_APPTIVITY_AWARD3",
|
||||
"AGENT_APPTIVITY_AWARD4",
|
||||
"AGENT_NQA1",
|
||||
"AGENT_NQA2",
|
||||
"AGENT_NQA3",
|
||||
"AGENT_NQA4",
|
||||
"AG_BLACKLIST_RSN",
|
||||
"AG_TAX_NUMBER",
|
||||
"AG_DIST_CHANEL_CODE",
|
||||
"AGENT_LIAISON_OFF",
|
||||
"AGENT_FILLER_07",
|
||||
"AG_LIC_FPO",
|
||||
"AG_LIC_START_DATE",
|
||||
"AG_LIC_END_DATE",
|
||||
"AG_GUARANTOR_NO",
|
||||
"AG_GUARANTOR_SW",
|
||||
"AG_BANK_ACCOUNT",
|
||||
"AG_PREV_TAX_RATE",
|
||||
"AG_CURR_TAX_RATE",
|
||||
"AG_PRESERVE_AGENT",
|
||||
"AG_LIC_REQ_DATE",
|
||||
"AG_BLACKLIST_IND",
|
||||
"AGENT_FILLER_06"
|
||||
];
|
||||
|
||||
private static readonly Regex LibraryNamePattern = new("^[A-Z0-9_]+$", RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
|
||||
public static RouteGroupBuilder MapORDUAGEndpoints(this RouteGroupBuilder group)
|
||||
{
|
||||
group.MapGet("/v1/orduag/query", async (
|
||||
[AsParameters] OrduagQuery query,
|
||||
OdbcConnection conn,
|
||||
ILoggerFactory loggerFactory) =>
|
||||
{
|
||||
var logger = loggerFactory.CreateLogger("ORDUAGEndpoint");
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
|
||||
var page = query.Page.GetValueOrDefault(1);
|
||||
if (page < 1)
|
||||
{
|
||||
logger.LogWarning("Invalid page value {Page}; defaulting to 1", query.Page);
|
||||
page = 1;
|
||||
}
|
||||
|
||||
var pageSize = query.PageSize.GetValueOrDefault(50);
|
||||
pageSize = Math.Clamp(pageSize, 1, 500);
|
||||
|
||||
var offsetLong = (long)(page - 1) * pageSize;
|
||||
if (offsetLong > int.MaxValue)
|
||||
{
|
||||
return Results.BadRequest(new { error = "Requested page is too large." });
|
||||
}
|
||||
|
||||
var offset = (int)offsetLong;
|
||||
|
||||
var sqlBuilder = new StringBuilder();
|
||||
sqlBuilder.AppendLine("SELECT");
|
||||
sqlBuilder.AppendLine(string.Join(",\n", ColumnNames.Select(column => $" {column}")));
|
||||
sqlBuilder.AppendLine("FROM CP3FPRD.ORDUAG");
|
||||
sqlBuilder.AppendLine("WHERE 1 = 1");
|
||||
|
||||
var parameterValues = new List<object?>();
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(query.CodeNumber))
|
||||
{
|
||||
sqlBuilder.AppendLine(" AND AG_CODE_NUMBER = ?");
|
||||
parameterValues.Add(query.CodeNumber.Trim());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(query.AgentAgency))
|
||||
{
|
||||
sqlBuilder.AppendLine(" AND AGENT_AGENCY = ?");
|
||||
parameterValues.Add(query.AgentAgency.Trim());
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(query.AgentStat))
|
||||
{
|
||||
sqlBuilder.AppendLine(" AND AGENT_STAT = ?");
|
||||
parameterValues.Add(query.AgentStat.Trim());
|
||||
}
|
||||
|
||||
sqlBuilder.AppendLine("ORDER BY AG_CODE_NUMBER");
|
||||
sqlBuilder.AppendLine("OFFSET ? ROWS FETCH NEXT ? ROWS ONLY");
|
||||
|
||||
parameterValues.Add(offset);
|
||||
parameterValues.Add(pageSize);
|
||||
|
||||
await using var command = conn.CreateCommand();
|
||||
command.CommandText = sqlBuilder.ToString();
|
||||
|
||||
foreach (var value in parameterValues)
|
||||
{
|
||||
var parameter = command.CreateParameter();
|
||||
parameter.Value = value;
|
||||
command.Parameters.Add(parameter);
|
||||
}
|
||||
|
||||
var rows = new List<IDictionary<string, object>>();
|
||||
await using (var reader = await command.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
var row = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
|
||||
for (var i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
var value = reader.GetNormalizedValue(i);
|
||||
row[reader.GetName(i)] = value!;
|
||||
}
|
||||
|
||||
rows.Add(row);
|
||||
}
|
||||
}
|
||||
|
||||
logger.LogInformation(
|
||||
"Fetched {Count} ORDUAG rows with filters codeNumber={CodeNumber}, agency={Agency}, status={Status}, page={Page}, pageSize={PageSize}",
|
||||
rows.Count,
|
||||
query.CodeNumber,
|
||||
query.AgentAgency,
|
||||
query.AgentStat,
|
||||
page,
|
||||
pageSize);
|
||||
|
||||
var formatted = rows.Select(dict => dict.ToCamelCaseDictionary()).ToList();
|
||||
return Results.Ok(formatted);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to list tables for AS/400 ORDUAG");
|
||||
return Results.Problem($"Failed to list tables: {ex.Message}");
|
||||
}
|
||||
})
|
||||
// .RequireAuthorization(AuthPolicies.RequireOperator)
|
||||
.WithSummary("List tables for a specific AS/400 library (schema)");
|
||||
|
||||
return group;
|
||||
}
|
||||
|
||||
public sealed class OrduagQuery
|
||||
{
|
||||
public string? CodeNumber { get; init; }
|
||||
|
||||
public string? AgentAgency { get; init; }
|
||||
|
||||
public string? AgentStat { get; init; }
|
||||
|
||||
public int? Page { get; init; }
|
||||
|
||||
public int? PageSize { get; init; }
|
||||
}
|
||||
}
|
165
Endpoints/As400Endpoints.cs
Normal file
165
Endpoints/As400Endpoints.cs
Normal file
@ -0,0 +1,165 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.Odbc;
|
||||
using System.Linq;
|
||||
using AS400API.Auth;
|
||||
using AS400API.Infrastructure;
|
||||
using Dapper;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace AS400API.Endpoints;
|
||||
|
||||
public static class As400Endpoints
|
||||
{
|
||||
public static RouteGroupBuilder MapAs400Endpoints(this RouteGroupBuilder group)
|
||||
{
|
||||
group.MapGet("/v1/as400/query", async (string sql, OdbcConnection conn, ILoggerFactory loggerFactory) =>
|
||||
{
|
||||
var logger = loggerFactory.CreateLogger("As400QueryEndpoint");
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
if (string.IsNullOrWhiteSpace(sql))
|
||||
{
|
||||
logger.LogWarning("Missing sql query parameter when executing AS/400 query");
|
||||
return Results.BadRequest(new { error = "Query parameter 'sql' is required." });
|
||||
}
|
||||
|
||||
logger.LogInformation("Executing AS/400 query with SQL length {Length}", sql?.Length ?? 0);
|
||||
var rows = (await conn.QueryAsync(sql!)).ToList();
|
||||
var formatted = rows.ToCamelCaseDictionaries().ToList();
|
||||
logger.LogInformation("AS/400 query returned {RowCount} rows", formatted.Count);
|
||||
return Results.Ok(formatted);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "AS/400 query failed");
|
||||
return Results.Problem($"Query failed: {ex.Message}");
|
||||
}
|
||||
})
|
||||
.RequireAuthorization(AuthPolicies.RequireAdmin)
|
||||
.WithSummary("Execute a read-only SQL select against AS/400 (admin only)")
|
||||
.Produces(200)
|
||||
.ProducesProblem(500);
|
||||
|
||||
group.MapGet("/v1/as400/databases", async (OdbcConnection conn, ILoggerFactory loggerFactory) =>
|
||||
{
|
||||
var logger = loggerFactory.CreateLogger("As400DatabasesEndpoint");
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
const string sqlQuery = "SELECT SCHEMA_NAME AS LIBRARY_NAME FROM QSYS2.SYSSCHEMAS ORDER BY LIBRARY_NAME";
|
||||
var schemas = (await conn.QueryAsync(sqlQuery)).ToList();
|
||||
var formatted = schemas.ToCamelCaseDictionaries().ToList();
|
||||
logger.LogInformation("Fetched {Count} AS/400 schemas", formatted.Count);
|
||||
return Results.Ok(formatted);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to list AS/400 schemas");
|
||||
return Results.Problem($"Failed to list schemas: {ex.Message}");
|
||||
}
|
||||
})
|
||||
.RequireAuthorization(AuthPolicies.RequireOperator)
|
||||
.WithSummary("List available libraries/schemas for AS/400 accounts");
|
||||
|
||||
group.MapGet("/v1/as400/tables", async (string libraryName, OdbcConnection conn, ILoggerFactory loggerFactory) =>
|
||||
{
|
||||
var logger = loggerFactory.CreateLogger("As400TablesEndpoint");
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
if (string.IsNullOrWhiteSpace(libraryName))
|
||||
{
|
||||
logger.LogWarning("Missing libraryName query parameter when listing tables");
|
||||
return Results.BadRequest(new { error = "Query parameter 'libraryName' is required." });
|
||||
}
|
||||
|
||||
const string sqlQuery = """
|
||||
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
|
||||
FROM QSYS2.SYSTABLES
|
||||
WHERE TABLE_SCHEMA = @libraryName
|
||||
ORDER BY TABLE_NAME
|
||||
""";
|
||||
|
||||
var tables = (await conn.QueryAsync(sqlQuery, new { libraryName })).ToList();
|
||||
logger.LogInformation("Fetched {Count} tables for AS/400 library {Library}", tables.Count, libraryName);
|
||||
var formatted = tables.ToCamelCaseDictionaries().ToList();
|
||||
return Results.Ok(formatted);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to list tables for AS/400 library {Library}", libraryName);
|
||||
return Results.Problem($"Failed to list tables: {ex.Message}");
|
||||
}
|
||||
})
|
||||
.RequireAuthorization(AuthPolicies.RequireOperator)
|
||||
.WithSummary("List tables for a specific AS/400 library (schema)");
|
||||
|
||||
group.MapGet("/v1/as400/table-structure", async (string libraryName, string tableName, OdbcConnection conn, ILoggerFactory loggerFactory) =>
|
||||
{
|
||||
var logger = loggerFactory.CreateLogger("As400TableStructureEndpoint");
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
if (string.IsNullOrWhiteSpace(libraryName) || string.IsNullOrWhiteSpace(tableName))
|
||||
{
|
||||
logger.LogWarning("Missing libraryName or tableName query parameter when requesting table structure");
|
||||
return Results.BadRequest(new { error = "Query parameters 'libraryName' and 'tableName' are required." });
|
||||
}
|
||||
|
||||
const string sqlQuery = """
|
||||
SELECT COLUMN_NAME, SYSTEM_COLUMN_NAME, DATA_TYPE, LENGTH, NUMERIC_SCALE, IS_NULLABLE
|
||||
FROM QSYS2.SYSCOLUMNS2
|
||||
WHERE TABLE_SCHEMA = ?
|
||||
AND TABLE_NAME = ?
|
||||
ORDER BY ORDINAL_POSITION
|
||||
""";
|
||||
|
||||
await using var command = conn.CreateCommand();
|
||||
command.CommandText = sqlQuery;
|
||||
|
||||
var libraryParameter = command.CreateParameter();
|
||||
libraryParameter.Value = libraryName.ToUpper();
|
||||
command.Parameters.Add(libraryParameter);
|
||||
|
||||
var tableParameter = command.CreateParameter();
|
||||
tableParameter.Value = tableName.ToUpper();
|
||||
command.Parameters.Add(tableParameter);
|
||||
|
||||
var columns = new List<IDictionary<string, object>>();
|
||||
await using (var reader = await command.ExecuteReaderAsync())
|
||||
{
|
||||
while (await reader.ReadAsync())
|
||||
{
|
||||
var row = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
|
||||
for (var i = 0; i < reader.FieldCount; i++)
|
||||
{
|
||||
row[reader.GetName(i)] = reader.GetNormalizedValue(i)!;
|
||||
}
|
||||
|
||||
columns.Add(row);
|
||||
}
|
||||
}
|
||||
|
||||
// var tables = (await conn.QueryAsync(sqlQuery, new { libraryName })).ToList();
|
||||
// var formatted = tables.ToList();
|
||||
|
||||
logger.LogInformation("Fetched {Count} columns for {Library}/{Table}", columns.Count, libraryName, tableName);
|
||||
var formatted = columns.Select(dict => dict.ToCamelCaseDictionary()).ToList();
|
||||
return Results.Ok(formatted);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "Failed to list columns for {Library}/{Table}", libraryName, tableName);
|
||||
return Results.Problem($"Failed to list columns: {ex.Message}");
|
||||
}
|
||||
})
|
||||
// .RequireAuthorization(AuthPolicies.RequireOperator)
|
||||
.WithSummary("Describe the structure of a table (columns) for an AS/400 library");
|
||||
|
||||
return group;
|
||||
}
|
||||
}
|
48
Endpoints/AuthEndpoints.cs
Normal file
48
Endpoints/AuthEndpoints.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using AS400API.Auth;
|
||||
using AS400API.Configuration;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
|
||||
namespace AS400API.Endpoints;
|
||||
|
||||
public static class AuthEndpoints
|
||||
{
|
||||
public static RouteGroupBuilder MapAuthEndpoints(this RouteGroupBuilder group)
|
||||
{
|
||||
group.MapPost("/v1/auth/login", async Task<IResult> (LoginRequest request, DemoUserStore userStore, TokenService tokenService, JwtOptions jwtOptions) =>
|
||||
{
|
||||
if (request is null || string.IsNullOrWhiteSpace(request.Username) || string.IsNullOrWhiteSpace(request.Password))
|
||||
{
|
||||
return Results.BadRequest(new { error = "Username and password are required." });
|
||||
}
|
||||
|
||||
var user = await userStore.FindByNameAsync(request.Username);
|
||||
if (user is null || !userStore.ValidateCredentials(user, request.Password))
|
||||
{
|
||||
return Results.Unauthorized();
|
||||
}
|
||||
|
||||
var accessToken = tokenService.CreateToken(user);
|
||||
return Results.Ok(new LoginResponse(accessToken, jwtOptions.AccessTokenLifetimeMinutes * 60, "Bearer", user.Roles));
|
||||
})
|
||||
.AllowAnonymous()
|
||||
.WithSummary("Exchange credentials for a JWT access token")
|
||||
.Produces<LoginResponse>(StatusCodes.Status200OK)
|
||||
.Produces(StatusCodes.Status400BadRequest)
|
||||
.Produces(StatusCodes.Status401Unauthorized);
|
||||
|
||||
group.MapGet("/v1/users/me", (ClaimsPrincipal user) =>
|
||||
{
|
||||
var username = user.Identity?.Name ?? user.FindFirstValue(JwtRegisteredClaimNames.Sub) ?? "unknown";
|
||||
var roles = user.FindAll(ClaimTypes.Role).Select(r => r.Value).ToArray();
|
||||
return Results.Ok(new { username, roles });
|
||||
})
|
||||
.RequireAuthorization()
|
||||
.WithSummary("Returns the current user's profile from the access token");
|
||||
|
||||
return group;
|
||||
}
|
||||
}
|
43
Endpoints/SystemEndpoints.cs
Normal file
43
Endpoints/SystemEndpoints.cs
Normal file
@ -0,0 +1,43 @@
|
||||
using System;
|
||||
using System.Data.Odbc;
|
||||
using Microsoft.AspNetCore.Builder;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Routing;
|
||||
|
||||
namespace AS400API.Endpoints;
|
||||
|
||||
public static class SystemEndpoints
|
||||
{
|
||||
public static IEndpointRouteBuilder MapRootEndpoints(this IEndpointRouteBuilder app)
|
||||
{
|
||||
app.MapGet("/", () => Results.Ok(new { name = "AS400API", status = "ok" }));
|
||||
return app;
|
||||
}
|
||||
|
||||
public static RouteGroupBuilder MapSystemEndpoints(this RouteGroupBuilder group)
|
||||
{
|
||||
group.MapGet("/v1/health", async (OdbcConnection conn) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
await conn.OpenAsync();
|
||||
using var cmd = conn.CreateCommand();
|
||||
cmd.CommandText = "SELECT CURRENT_DATE AS THE_DATE FROM SYSIBM.SYSDUMMY1";
|
||||
using var reader = await cmd.ExecuteReaderAsync();
|
||||
if (await reader.ReadAsync())
|
||||
{
|
||||
var d = reader.GetDateTime(0);
|
||||
return Results.Ok(new { AS400 = "online", currentDateOnAS400 = d.ToString("yyyy-MM-dd"), timestamp = DateTime.UtcNow });
|
||||
}
|
||||
|
||||
return Results.Ok(new { AS400 = "online", note = "no rows" });
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return Results.Problem($"AS400 ODBC check failed: {ex.Message}");
|
||||
}
|
||||
}).AllowAnonymous();
|
||||
|
||||
return group;
|
||||
}
|
||||
}
|
30
Infrastructure/DataReaderExtensions.cs
Normal file
30
Infrastructure/DataReaderExtensions.cs
Normal file
@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Data.Common;
|
||||
|
||||
namespace AS400API.Infrastructure;
|
||||
|
||||
public static class DataReaderExtensions
|
||||
{
|
||||
public static object? GetNormalizedValue(this DbDataReader reader, int ordinal)
|
||||
{
|
||||
if (reader.IsDBNull(ordinal))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var value = reader.GetValue(ordinal);
|
||||
|
||||
if (value is string stringValue)
|
||||
{
|
||||
var dataTypeName = reader.GetDataTypeName(ordinal)?.Trim();
|
||||
if (!string.IsNullOrEmpty(dataTypeName)
|
||||
&& dataTypeName.StartsWith("CHAR", StringComparison.OrdinalIgnoreCase)
|
||||
&& !dataTypeName.Contains("VARYING", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return stringValue.TrimEnd();
|
||||
}
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
87
Infrastructure/DatabaseRowFormatter.cs
Normal file
87
Infrastructure/DatabaseRowFormatter.cs
Normal file
@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace AS400API.Infrastructure;
|
||||
|
||||
public static class DatabaseRowFormatter
|
||||
{
|
||||
public static IEnumerable<IDictionary<string, object?>> ToCamelCaseDictionaries(this IEnumerable<dynamic> rows)
|
||||
{
|
||||
foreach (var row in rows)
|
||||
{
|
||||
if (row is IDictionary<string, object> dict)
|
||||
{
|
||||
yield return dict.ToCamelCaseDictionary();
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return new Dictionary<string, object?>
|
||||
{
|
||||
["value"] = row
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static IDictionary<string, object?> ToCamelCaseDictionary(this IDictionary<string, object> source)
|
||||
{
|
||||
var result = new Dictionary<string, object?>(StringComparer.OrdinalIgnoreCase);
|
||||
foreach (var kvp in source)
|
||||
{
|
||||
var key = string.IsNullOrWhiteSpace(kvp.Key) ? kvp.Key : ToCamelCase(kvp.Key);
|
||||
result[key] = kvp.Value;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static string ToCamelCase(string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input))
|
||||
{
|
||||
return input;
|
||||
}
|
||||
|
||||
var segments = input
|
||||
.Split(new[] { '_', ' ', '-' }, StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(s => s.ToLowerInvariant())
|
||||
.ToArray();
|
||||
|
||||
if (segments.Length == 0)
|
||||
{
|
||||
return input;
|
||||
}
|
||||
|
||||
if (segments.Length == 1)
|
||||
{
|
||||
var segment = segments[0];
|
||||
if (segment.Length == 1)
|
||||
{
|
||||
return segment.ToLowerInvariant();
|
||||
}
|
||||
|
||||
return char.ToLowerInvariant(segment[0]) + segment[1..];
|
||||
}
|
||||
|
||||
var sb = new StringBuilder();
|
||||
sb.Append(segments[0]);
|
||||
for (var i = 1; i < segments.Length; i++)
|
||||
{
|
||||
var segment = segments[i];
|
||||
if (segment.Length == 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
sb.Append(char.ToUpperInvariant(segment[0]));
|
||||
if (segment.Length > 1)
|
||||
{
|
||||
sb.Append(segment[1..]);
|
||||
}
|
||||
}
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
133
Program.cs
Normal file
133
Program.cs
Normal file
@ -0,0 +1,133 @@
|
||||
using System.Data.Odbc;
|
||||
using System.Text;
|
||||
using AS400API.Auth;
|
||||
using AS400API.Configuration;
|
||||
using AS400API.Endpoints;
|
||||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||||
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);
|
||||
|
||||
|
||||
|
||||
builder.Host.UseSerilog((context, services, loggerConfiguration) =>
|
||||
{
|
||||
loggerConfiguration
|
||||
.ReadFrom.Configuration(context.Configuration)
|
||||
.Enrich.FromLogContext();
|
||||
});
|
||||
|
||||
// Bind ODBC settings
|
||||
var odbc = new OdbcOptions();
|
||||
builder.Configuration.GetSection("Odbc").Bind(odbc);
|
||||
|
||||
// Allow overriding by environment variables
|
||||
odbc.System ??= Environment.GetEnvironmentVariable("AS400_SYSTEM");
|
||||
odbc.DefaultLibraries ??= Environment.GetEnvironmentVariable("AS400_DEFAULT_LIBRARIES");
|
||||
odbc.User ??= Environment.GetEnvironmentVariable("AS400_USER");
|
||||
odbc.Password ??= Environment.GetEnvironmentVariable("AS400_PASSWORD");
|
||||
odbc.Naming ??= Environment.GetEnvironmentVariable("AS400_NAMING") ?? "1";
|
||||
|
||||
if (string.IsNullOrWhiteSpace(odbc.System) ||
|
||||
string.IsNullOrWhiteSpace(odbc.User) ||
|
||||
string.IsNullOrWhiteSpace(odbc.Password))
|
||||
{
|
||||
Console.WriteLine("⚠️ Missing ODBC connection settings. Set in appsettings.json or environment variables.");
|
||||
}
|
||||
|
||||
// JWT configuration
|
||||
var jwtOptions = builder.Configuration.GetSection(JwtOptions.SectionName).Get<JwtOptions>() ?? new JwtOptions();
|
||||
jwtOptions.EnsureIsValid();
|
||||
var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Key));
|
||||
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen(options =>
|
||||
{
|
||||
options.SwaggerDoc("v1", new OpenApiInfo
|
||||
{
|
||||
Title = "AS400 API",
|
||||
Version = "v1"
|
||||
});
|
||||
|
||||
var securityScheme = new OpenApiSecurityScheme
|
||||
{
|
||||
Name = "Authorization",
|
||||
Description = "JWT Authorization header using the Bearer scheme.",
|
||||
In = ParameterLocation.Header,
|
||||
Type = SecuritySchemeType.Http,
|
||||
Scheme = "bearer",
|
||||
BearerFormat = "JWT",
|
||||
Reference = new OpenApiReference
|
||||
{
|
||||
Type = ReferenceType.SecurityScheme,
|
||||
Id = "Bearer"
|
||||
}
|
||||
};
|
||||
|
||||
options.AddSecurityDefinition(securityScheme.Reference.Id, securityScheme);
|
||||
options.AddSecurityRequirement(new OpenApiSecurityRequirement
|
||||
{
|
||||
{ securityScheme, Array.Empty<string>() }
|
||||
});
|
||||
});
|
||||
builder.Services.AddSingleton(odbc);
|
||||
builder.Services.AddScoped<OdbcConnection>(_ => new OdbcConnection(odbc.ToConnectionString()));
|
||||
builder.Services.AddSingleton(jwtOptions);
|
||||
builder.Services.AddSingleton<TokenService>();
|
||||
builder.Services.AddSingleton<DemoUserStore>();
|
||||
|
||||
builder.Services
|
||||
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
|
||||
.AddJwtBearer(options =>
|
||||
{
|
||||
options.TokenValidationParameters = new TokenValidationParameters
|
||||
{
|
||||
ValidateIssuer = true,
|
||||
ValidIssuer = jwtOptions.Issuer,
|
||||
ValidateAudience = true,
|
||||
ValidAudience = jwtOptions.Audience,
|
||||
ValidateIssuerSigningKey = true,
|
||||
IssuerSigningKey = signingKey,
|
||||
ValidateLifetime = true,
|
||||
ClockSkew = TimeSpan.FromMinutes(1)
|
||||
};
|
||||
});
|
||||
|
||||
builder.Services.AddAuthorization(options =>
|
||||
{
|
||||
options.AddPolicy(AuthPolicies.RequireOperator, policy =>
|
||||
policy.RequireRole(Roles.Admin, Roles.Operator));
|
||||
options.AddPolicy(AuthPolicies.RequireAdmin, policy =>
|
||||
policy.RequireRole(Roles.Admin));
|
||||
});
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
}
|
||||
|
||||
app.UseSerilogRequestLogging();
|
||||
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapRootEndpoints();
|
||||
|
||||
var api = app.MapGroup("/api");
|
||||
api.MapSystemEndpoints();
|
||||
api.MapAuthEndpoints();
|
||||
api.MapAs400Endpoints();
|
||||
api.MapORDUAGEndpoints();
|
||||
|
||||
app.Run();
|
||||
|
||||
|
||||
// env DOTNET_ENVIRONMENT=Development dotnet run
|
||||
// docker run -d --name sonarqube -p 9000:9000 sonarqube:lts-community
|
49
appsettings.json
Normal file
49
appsettings.json
Normal file
@ -0,0 +1,49 @@
|
||||
{
|
||||
"Odbc": {
|
||||
"System": "10.200.123.68",
|
||||
"DefaultLibraries": "MTDTALIB",
|
||||
"User": "CAPZTMR1",
|
||||
"Password": "ABC123",
|
||||
"Naming": "1",
|
||||
"Translate": "1",
|
||||
"ClientLocale": "en_US"
|
||||
},
|
||||
"Jwt": {
|
||||
"Issuer": "AS400API",
|
||||
"Audience": "AS400API.Clients",
|
||||
"Key": "554459fdjscc22244eeeredabeer2df4576fgsa",
|
||||
"AccessTokenLifetimeMinutes": 60
|
||||
},
|
||||
"Serilog": {
|
||||
"Using": [ "Serilog.Sinks.File" ],
|
||||
"MinimumLevel": {
|
||||
"Default": "Information",
|
||||
"Override": {
|
||||
"Microsoft": "Warning",
|
||||
"System": "Warning"
|
||||
}
|
||||
},
|
||||
"WriteTo": [
|
||||
{
|
||||
"Name": "File",
|
||||
"Args": {
|
||||
"path": "Logs/as400-api-.log",
|
||||
"rollingInterval": "Day",
|
||||
"shared": true,
|
||||
"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] ({SourceContext}) {Message}{NewLine}{Exception}"
|
||||
}
|
||||
}
|
||||
],
|
||||
"Enrich": [ "FromLogContext" ],
|
||||
"Properties": {
|
||||
"Application": "AS400API"
|
||||
}
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
22
docker-compose.yml
Normal file
22
docker-compose.yml
Normal file
@ -0,0 +1,22 @@
|
||||
services:
|
||||
api:
|
||||
platform: linux/amd64
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
image: as400api:dev
|
||||
container_name: as400api
|
||||
environment:
|
||||
ASPNETCORE_ENVIRONMENT: Development
|
||||
# Override credentials securely here (do NOT bake into image)
|
||||
AS400_SYSTEM: "10.200.123.68"
|
||||
AS400_DEFAULT_LIBRARIES: "MTDTALIB"
|
||||
AS400_USER: "CAPZTMR1"
|
||||
AS400_PASSWORD: "ABC123"
|
||||
AS400_NAMING: "1"
|
||||
AS400_DRIVER_NAME: "IBM i Access ODBC Driver"
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ./:/src
|
||||
working_dir: /app
|
8
docker/odbc/odbc.ini
Normal file
8
docker/odbc/odbc.ini
Normal file
@ -0,0 +1,8 @@
|
||||
[AS400]
|
||||
Description=IBM i Access ODBC DSN
|
||||
Driver=IBM i Access ODBC Driver
|
||||
System=10.200.123.68
|
||||
Naming=1
|
||||
DefaultLibraries=MTDTALIB
|
||||
UserID=CAPZTMR1
|
||||
Password=ABC123
|
5
docker/odbc/odbcinst.ini
Normal file
5
docker/odbc/odbcinst.ini
Normal file
@ -0,0 +1,5 @@
|
||||
[IBM i Access ODBC Driver]
|
||||
Description=IBM i Access ODBC Driver
|
||||
Driver=/opt/ibm/iaccess/lib64/libcwbodbc.so
|
||||
Threading=2
|
||||
UsageCount=1
|
BIN
drivers/ibm-iaccess-1.1.0.28-1.0.x86_64.rpm.disabled
Normal file
BIN
drivers/ibm-iaccess-1.1.0.28-1.0.x86_64.rpm.disabled
Normal file
Binary file not shown.
15
k8s/configmap.yaml
Normal file
15
k8s/configmap.yaml
Normal file
@ -0,0 +1,15 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: as400api-config
|
||||
labels:
|
||||
app: as400api
|
||||
data:
|
||||
ASPNETCORE_ENVIRONMENT: "Production"
|
||||
AS400_SYSTEM: "10.200.123.68"
|
||||
AS400_DEFAULT_LIBRARIES: "MTDTALIB"
|
||||
AS400_USER: "CAPZTMR1"
|
||||
AS400_NAMING: "1"
|
||||
AS400_DRIVER_NAME: "IBM i Access ODBC Driver"
|
||||
JWT__ISSUER: "AS400API"
|
||||
JWT__AUDIENCE: "AS400API.Clients"
|
47
k8s/deployment.yaml
Normal file
47
k8s/deployment.yaml
Normal file
@ -0,0 +1,47 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: as400api
|
||||
labels:
|
||||
app: as400api
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
app: as400api
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: as400api
|
||||
spec:
|
||||
containers:
|
||||
- name: as400api
|
||||
image: as400api:latest
|
||||
imagePullPolicy: IfNotPresent
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 8080
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: as400api-config
|
||||
- secretRef:
|
||||
name: as400api-secrets
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/health
|
||||
port: http
|
||||
initialDelaySeconds: 10
|
||||
periodSeconds: 10
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /api/v1/health
|
||||
port: http
|
||||
initialDelaySeconds: 30
|
||||
periodSeconds: 30
|
||||
resources:
|
||||
requests:
|
||||
cpu: "100m"
|
||||
memory: "256Mi"
|
||||
limits:
|
||||
cpu: "500m"
|
||||
memory: "512Mi"
|
10
k8s/secret-example.yaml
Normal file
10
k8s/secret-example.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: as400api-secrets
|
||||
labels:
|
||||
app: as400api
|
||||
type: Opaque
|
||||
stringData:
|
||||
AS400_PASSWORD: "ABC123"
|
||||
JWT__KEY: "REPLACE_WITH_MIN_32_CHAR_JWT_KEY"
|
10
k8s/secret.yaml
Normal file
10
k8s/secret.yaml
Normal file
@ -0,0 +1,10 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: as400api-secrets
|
||||
labels:
|
||||
app: as400api
|
||||
type: Opaque
|
||||
stringData:
|
||||
AS400_PASSWORD: "ABC123"
|
||||
JWT__KEY: "REPLACE_WITH_MIN_32_CHAR_JWT_KEY"
|
14
k8s/service.yaml
Normal file
14
k8s/service.yaml
Normal file
@ -0,0 +1,14 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: as400api
|
||||
labels:
|
||||
app: as400api
|
||||
spec:
|
||||
type: ClusterIP
|
||||
ports:
|
||||
- name: http
|
||||
port: 80
|
||||
targetPort: http
|
||||
selector:
|
||||
app: as400api
|
72
scripts/run-sonar.sh
Executable file
72
scripts/run-sonar.sh
Executable file
@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
export "SONAR_TOKEN"="squ_ef2f0a2f495a32c33ed81afb16f3cdc98bf1336a"
|
||||
|
||||
if [[ -z "${SONAR_HOST_URL:-}" ]]; then
|
||||
echo "SONAR_HOST_URL environment variable is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -z "${SONAR_TOKEN:-}" ]]; then
|
||||
echo "SONAR_TOKEN environment variable is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SONAR_PROJECT_KEY=${SONAR_PROJECT_KEY:-as400api}
|
||||
SONAR_PROJECT_NAME=${SONAR_PROJECT_NAME:-AS400API}
|
||||
BUILD_CONFIGURATION=${BUILD_CONFIGURATION:-Debug}
|
||||
SOLUTION_FILE=${SOLUTION_FILE:-AS400API.sln}
|
||||
|
||||
FIND_TEST_PROJECT=$(find . -name '*Tests.csproj' -print -quit)
|
||||
|
||||
SONAR_BEGIN_ARGS=(
|
||||
"/k:${SONAR_PROJECT_KEY}"
|
||||
"/n:${SONAR_PROJECT_NAME}"
|
||||
"/d:sonar.host.url=${SONAR_HOST_URL}"
|
||||
"/d:sonar.login=${SONAR_TOKEN}"
|
||||
"/d:sonar.cs.opencover.reportsPaths=**/coverage.opencover.xml"
|
||||
"/d:sonar.exclusions=**/bin/**,**/obj/**"
|
||||
)
|
||||
|
||||
if [[ -n "${SONAR_BRANCH_NAME:-}" ]]; then
|
||||
SONAR_BEGIN_ARGS+=("/d:sonar.branch.name=${SONAR_BRANCH_NAME}")
|
||||
fi
|
||||
|
||||
if [[ -n "${SONAR_ORGANIZATION:-}" ]]; then
|
||||
SONAR_BEGIN_ARGS+=("/d:sonar.organization=${SONAR_ORGANIZATION}")
|
||||
fi
|
||||
|
||||
if [[ -n "${SONAR_PULL_REQUEST_KEY:-}" && -n "${SONAR_PULL_REQUEST_BRANCH:-}" && -n "${SONAR_PULL_REQUEST_BASE:-}" ]]; then
|
||||
SONAR_BEGIN_ARGS+=(
|
||||
"/d:sonar.pullrequest.key=${SONAR_PULL_REQUEST_KEY}"
|
||||
"/d:sonar.pullrequest.branch=${SONAR_PULL_REQUEST_BRANCH}"
|
||||
"/d:sonar.pullrequest.base=${SONAR_PULL_REQUEST_BASE}"
|
||||
)
|
||||
fi
|
||||
|
||||
begin_succeeded=0
|
||||
cleanup() {
|
||||
local status=$?
|
||||
if [[ ${begin_succeeded} -eq 1 ]]; then
|
||||
if ! dotnet sonarscanner end "/d:sonar.login=${SONAR_TOKEN}"; then
|
||||
status=$?
|
||||
fi
|
||||
fi
|
||||
exit "${status}"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
dotnet sonarscanner begin "${SONAR_BEGIN_ARGS[@]}"
|
||||
begin_succeeded=1
|
||||
|
||||
dotnet build "${SOLUTION_FILE}" -c "${BUILD_CONFIGURATION}"
|
||||
|
||||
if [[ -n "${FIND_TEST_PROJECT}" ]]; then
|
||||
dotnet test "${SOLUTION_FILE}" -c "${BUILD_CONFIGURATION}" --no-build \
|
||||
/p:CollectCoverage=true \
|
||||
/p:CoverletOutputFormat=opencover \
|
||||
/p:CoverletOutput=TestResults/
|
||||
else
|
||||
echo "No *Tests.csproj projects found; skipping dotnet test." >&2
|
||||
fi
|
115
scripts/test-databases.sh
Executable file
115
scripts/test-databases.sh
Executable file
@ -0,0 +1,115 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
BASE_URL=${BASE_URL:-http://localhost:8080}
|
||||
USERNAME=${USERNAME:-admin}
|
||||
PASSWORD=${PASSWORD:-Pass@123}
|
||||
LOG_FILE=${LOG_FILE:-}
|
||||
|
||||
pretty_json_or_raw() {
|
||||
local input="$1"
|
||||
if jq -e . >/dev/null 2>&1 <<<"$input"; then
|
||||
jq . <<<"$input"
|
||||
else
|
||||
printf '%s\n' "$input"
|
||||
fi
|
||||
}
|
||||
|
||||
timestamp() {
|
||||
date '+%Y-%m-%dT%H:%M:%S%z'
|
||||
}
|
||||
|
||||
log() {
|
||||
local message="$1"
|
||||
echo "$message" >&2
|
||||
if [[ -n "$LOG_FILE" ]]; then
|
||||
printf '[%s] %s\n' "$(timestamp)" "$message" >>"$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
log_block() {
|
||||
local heading="$1"
|
||||
local body="$2"
|
||||
if [[ -n "$LOG_FILE" ]]; then
|
||||
{
|
||||
printf '[%s] %s\n' "$(timestamp)" "$heading"
|
||||
pretty_json_or_raw "$body"
|
||||
} >>"$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [--url <baseUrl>] [--user <username>] [--pass <password>] [--log <file>]
|
||||
You can also set environment variables: BASE_URL, USERNAME, PASSWORD, LOG_FILE.
|
||||
USAGE
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--url)
|
||||
BASE_URL=$2
|
||||
shift 2
|
||||
;;
|
||||
--user)
|
||||
USERNAME=$2
|
||||
shift 2
|
||||
;;
|
||||
--pass)
|
||||
PASSWORD=$2
|
||||
shift 2
|
||||
;;
|
||||
--log)
|
||||
LOG_FILE=$2
|
||||
shift 2
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
echo "Unknown argument: $1" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -n "$LOG_FILE" ]]; then
|
||||
mkdir -p "$(dirname "$LOG_FILE")"
|
||||
touch "$LOG_FILE"
|
||||
log "Logging enabled: $LOG_FILE"
|
||||
fi
|
||||
|
||||
for tool in curl jq; do
|
||||
if ! command -v "$tool" >/dev/null 2>&1; then
|
||||
log "Error: $tool is required but not installed."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
log "Logging in as $USERNAME against $BASE_URL..."
|
||||
LOGIN_RESPONSE=$(curl -sS -X POST "$BASE_URL/api/v1/auth/login" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}")
|
||||
|
||||
if ! ACCESS_TOKEN=$(printf '%s' "$LOGIN_RESPONSE" | jq -er '.accessToken'); then
|
||||
log "Login failed. Response: $LOGIN_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
EXPIRES_IN=$(printf '%s' "$LOGIN_RESPONSE" | jq -r '.expiresIn // "unknown"')
|
||||
ROLES=$(printf '%s' "$LOGIN_RESPONSE" | jq -r '.roles | join(", ")')
|
||||
|
||||
log "Token acquired (expires in ${EXPIRES_IN}s) with roles: ${ROLES}"
|
||||
|
||||
SANITIZED_LOGIN_RESPONSE=$(printf '%s' "$LOGIN_RESPONSE" | jq '.accessToken="***redacted***"')
|
||||
log_block "Login response" "$SANITIZED_LOGIN_RESPONSE"
|
||||
|
||||
log "Calling /api/as400/databases..."
|
||||
DB_RESPONSE=$(curl -sS "$BASE_URL/api/v1/as400/databases" \
|
||||
-H "Authorization: Bearer $ACCESS_TOKEN" \
|
||||
-H "Accept: application/json")
|
||||
|
||||
log_block "Databases response" "$DB_RESPONSE"
|
||||
pretty_json_or_raw "$DB_RESPONSE"
|
Loading…
Reference in New Issue
Block a user