First commit

This commit is contained in:
Jan Beníček 2025-02-15 20:43:28 +01:00
commit e2a99fb434
121 changed files with 3140 additions and 0 deletions

BIN
.vs/Metrolog/v17/.wsuo Normal file

Binary file not shown.

View file

@ -0,0 +1,12 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\",
"Documents": [],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": []
}
]
}

View file

@ -0,0 +1,7 @@
{
"ExpandedNodes": [
""
],
"SelectedNode": "\\C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog",
"PreviewInSolutionExplorer": false
}

View file

@ -0,0 +1,30 @@
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md
!**/.gitignore
!.git/HEAD
!.git/config
!.git/packed-refs
!.git/refs/heads/**

4
Metrolog-API/.env.sample Normal file
View file

@ -0,0 +1,4 @@
JWT_SECRET=default
JWT_EXPIRATION_MINUTES=30
MONGODB_CONNECTION_STRING=mongodb://10.1.20.122:27017
MONGODB_DATABASE=metrolog

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,210 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\dockerfile||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:dockerfile||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\.env.sample||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:.env.sample||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\.env||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:.env||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:controllers\\usercontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\static\\permissionsstatic.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:static\\permissionsstatic.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\services\\roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:services\\roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\services\\userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:services\\userservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\controllers\\authcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:controllers\\authcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\controllers\\groupcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:controllers\\groupcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\services\\jwtservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:services\\jwtservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 3,
"Children": [
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Program.cs",
"RelativeDocumentMoniker": "Program.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Program.cs",
"RelativeToolTip": "Program.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAABQAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T13:30:34.284Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": ".env.sample",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env.sample",
"RelativeDocumentMoniker": ".env.sample",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env.sample",
"RelativeToolTip": ".env.sample",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-15T13:30:08.17Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "PermissionsStatic.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Static\\PermissionsStatic.cs",
"RelativeDocumentMoniker": "Static\\PermissionsStatic.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Static\\PermissionsStatic.cs",
"RelativeToolTip": "Static\\PermissionsStatic.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAApAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T17:09:11.22Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "Dockerfile",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Dockerfile",
"RelativeDocumentMoniker": "Dockerfile",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Dockerfile",
"RelativeToolTip": "Dockerfile",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAiAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-15T17:30:03.62Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": ".env",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env",
"RelativeDocumentMoniker": ".env",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env",
"RelativeToolTip": ".env",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAoAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-15T17:26:33.778Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 7,
"Title": "UserService.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\UserService.cs",
"RelativeDocumentMoniker": "Services\\UserService.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\UserService.cs",
"RelativeToolTip": "Services\\UserService.cs",
"ViewState": "AgIAAAoAAAAAAAAAAAAgwCEAAAA+AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T14:09:14.191Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "RoleService.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\RoleService.cs",
"RelativeDocumentMoniker": "Services\\RoleService.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\RoleService.cs",
"RelativeToolTip": "Services\\RoleService.cs",
"ViewState": "AgIAAAUAAAAAAAAAAAAxwBUAAAA4AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T14:42:35.006Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 10,
"Title": "JWTService.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\JWTService.cs",
"RelativeDocumentMoniker": "Services\\JWTService.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\JWTService.cs",
"RelativeToolTip": "Services\\JWTService.cs",
"ViewState": "AgIAAA4AAAAAAAAAAAAQwBMAAABIAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T16:00:03.021Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 8,
"Title": "AuthController.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\AuthController.cs",
"RelativeDocumentMoniker": "Controllers\\AuthController.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\AuthController.cs",
"RelativeToolTip": "Controllers\\AuthController.cs",
"ViewState": "AgIAABkAAAAAAAAAAAAgwAgAAAAcAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T12:58:01.53Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 9,
"Title": "GroupController.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\GroupController.cs",
"RelativeDocumentMoniker": "Controllers\\GroupController.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\GroupController.cs",
"RelativeToolTip": "Controllers\\GroupController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T13:02:53.183Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": "UserController.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\UserController.cs",
"RelativeDocumentMoniker": "Controllers\\UserController.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\UserController.cs",
"RelativeToolTip": "Controllers\\UserController.cs",
"ViewState": "AgIAAAYAAAAAAAAAAAAAAA0AAAALAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T12:58:30.303Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View file

@ -0,0 +1,142 @@
{
"Version": 1,
"WorkspaceRootPath": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\",
"Documents": [
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\services\\roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:services\\roleservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\controllers\\rolecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:controllers\\rolecontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\static\\permissionsstatic.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:static\\permissionsstatic.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\controllers\\authcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:controllers\\authcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\.env.sample||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:.env.sample||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\dockerfile||{8B382828-6202-11D1-8870-0000F87579D2}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:dockerfile||{8B382828-6202-11D1-8870-0000F87579D2}"
},
{
"AbsoluteMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|c:\\users\\jan00\\documents\\programovani\\myprojects\\metrolog\\metrolog-api\\program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
"RelativeMoniker": "D:0:0:{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}|Metrolog-API.csproj|solutionrelative:program.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
}
],
"DocumentGroupContainers": [
{
"Orientation": 0,
"VerticalTabListWidth": 256,
"DocumentGroups": [
{
"DockedWidth": 200,
"SelectedChildIndex": 4,
"Children": [
{
"$type": "Document",
"DocumentIndex": 6,
"Title": "Program.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Program.cs",
"RelativeDocumentMoniker": "Program.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Program.cs",
"RelativeToolTip": "Program.cs",
"ViewState": "AgIAAAkAAAAAAAAAAAAAABQAAAACAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T13:30:34.284Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 2,
"Title": "PermissionsStatic.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Static\\PermissionsStatic.cs",
"RelativeDocumentMoniker": "Static\\PermissionsStatic.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Static\\PermissionsStatic.cs",
"RelativeToolTip": "Static\\PermissionsStatic.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAAmAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T17:09:11.22Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 4,
"Title": ".env.sample",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env.sample",
"RelativeDocumentMoniker": ".env.sample",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\.env.sample",
"RelativeToolTip": ".env.sample",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAMAAAAZAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-15T18:00:29.077Z",
"IsPinned": true,
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 5,
"Title": "Dockerfile",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Dockerfile",
"RelativeDocumentMoniker": "Dockerfile",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Dockerfile",
"RelativeToolTip": "Dockerfile",
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
"WhenOpened": "2025-02-15T17:30:03.62Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 0,
"Title": "RoleService.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\RoleService.cs",
"RelativeDocumentMoniker": "Services\\RoleService.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Services\\RoleService.cs",
"RelativeToolTip": "Services\\RoleService.cs",
"ViewState": "AgIAAAMAAAAAAAAAAAAAACUAAAA0AAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T14:42:35.006Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 1,
"Title": "RoleController.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\RoleController.cs",
"RelativeDocumentMoniker": "Controllers\\RoleController.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\RoleController.cs",
"RelativeToolTip": "Controllers\\RoleController.cs",
"ViewState": "AgIAAAAAAAAAAAAAAAAAABEAAAAfAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T13:02:53.183Z",
"EditorCaption": ""
},
{
"$type": "Document",
"DocumentIndex": 3,
"Title": "AuthController.cs",
"DocumentMoniker": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\AuthController.cs",
"RelativeDocumentMoniker": "Controllers\\AuthController.cs",
"ToolTip": "C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API\\Controllers\\AuthController.cs",
"RelativeToolTip": "Controllers\\AuthController.cs",
"ViewState": "AgIAAA8AAAAAAAAAAAAQwC4AAAAAAAAAAAAAAA==",
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
"WhenOpened": "2025-02-15T12:58:01.53Z",
"EditorCaption": ""
}
]
}
]
}
]
}

View file

@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
namespace Metrolog_API.Attributes
{
public class PermissionAttribute : Attribute, IAuthorizationFilter
{
private readonly string _requiredPermission;
public PermissionAttribute(string requiredPermission)
{
_requiredPermission = requiredPermission;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
var user = context.HttpContext.User;
if (!user.Identity.IsAuthenticated)
{
context.Result = new UnauthorizedResult();
return;
}
var permissions = user.Claims.Where(c => c.Type == "permission").Select(c => c.Value).ToList();
if (!permissions.Contains(_requiredPermission))
{
context.Result = new ForbidResult();
}
}
}
}

View file

@ -0,0 +1,75 @@
using Metrolog_API.Models;
using Metrolog_API.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace Metrolog_API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
private UserService _UserService;
private RoleService _RoleService;
private PasswordService _PasswordService;
private JWTService _JwtService;
private int _JwtExpirationMinutes;
public AuthController(UserService userService, RoleService roleService, PasswordService passwordService, JWTService jwtService)
{
_UserService = userService;
_RoleService = roleService;
_PasswordService = passwordService;
_JwtService = jwtService;
_JwtExpirationMinutes = int.Parse(System.Environment.GetEnvironmentVariable("JWT_EXPIRATION_MINUTES"));
}
// POST api/<AuthController>/active
[HttpGet("active")]
public async Task<ActionResult> Get()
{
return NotFound();
}
// POST api/<AuthController>/login
[HttpPost("login")]
public async Task<ActionResult<LoginResponseModel>> LoginPost([FromBody] LoginModel login)
{
UserModel? user = await _UserService.GetByEmailAsync(login.Email);
if (user == null || !_PasswordService.VerifyPassword(user.Password, login.Password)) //Verify user
return NotFound(); //If user not exist or provide bad password return NotFound(404)
return Ok(new LoginResponseModel{ Token = await _JwtService.GenerateUserJwtToken(user), TokenExpire = DateTime.Now.AddMinutes(_JwtExpirationMinutes) });
}
// POST api/<AuthController>/register
[HttpPost("register")]
public async Task<ActionResult> RegisterPost([FromBody] RegisterModel register)
{
if (register == null || string.IsNullOrEmpty(register.Name) || string.IsNullOrEmpty(register.Surname) || string.IsNullOrEmpty(register.Email) || string.IsNullOrEmpty(register.Password))
return BadRequest("Input data Error");
if (await _UserService.GetByEmailAsync(register.Email) != null)
return BadRequest("Email is already used");
UserModel user = new UserModel()
{
TitlesFrontName = "",
TitlesBehindName = "",
Name = register.Name,
Surname = register.Surname,
Email = register.Email,
Password = _PasswordService.HashPassword(register.Password),
Roles = await _RoleService.GetDefaultsAsync()
};
await _UserService.CreateAsync(user);
return Ok("Register succes, Please login");
}
}
}

View file

@ -0,0 +1,43 @@
using Microsoft.AspNetCore.Mvc;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace Metrolog_API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class RoleController : ControllerBase
{
// GET: api/<RoleController>
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/<RoleController>/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/<RoleController>
[HttpPost]
public void Post([FromBody] string value)
{
}
// PUT api/<RoleController>/5
[HttpPut("{id}")]
public void Put(int id, [FromBody] string value)
{
}
// DELETE api/<RoleController>/5
[HttpDelete("{id}")]
public void Delete(int id)
{
}
}
}

View file

@ -0,0 +1,156 @@
using Metrolog_API.Attributes;
using Metrolog_API.Models;
using Metrolog_API.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace Metrolog_API.Controllers
{
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class UserController : ControllerBase
{
private UserService _UserService;
private PasswordService _PasswordService;
public UserController(UserService UserService, PasswordService passwordService)
{
_UserService = UserService;
_PasswordService = passwordService;
}
// GET: api/<UserController>/me
[HttpGet("me")]
public async Task<ActionResult<UserModel>> ActualUserGet()
{
try
{
UserModel user = await _UserService.GetByEmailAsync(HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email).Value);
user.Password = "";
return Ok(user);
}
catch (Exception ex)
{
return NoContent();
}
}
// PUT api/<UserController>/me
[HttpPut("me")]
public async Task<ActionResult<UserModel>> ActualUserPut([FromBody] UserModel newUser)
{
UserModel user = await _UserService.GetByEmailAsync(HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email).Value);
newUser.Password = user.Password;
newUser.Email = user.Email;
newUser.Id = user.Id;
await _UserService.UpdateAsync(user.Id, newUser);
newUser.Password = "";
return Ok(newUser);
}
// PUT api/<UserController>/me
[HttpPut("me/password")]
public async Task<ActionResult> ActualUserPut([FromBody] PasswordChangeModel pass)
{
UserModel user = await _UserService.GetByEmailAsync(HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email).Value);
if (_PasswordService.VerifyPassword(user.Password, pass.OldPassword))
{
user.Password = _PasswordService.HashPassword(pass.NewPassword);
await _UserService.UpdateAsync(user.Id, user);
return Ok();
}
else
{
return BadRequest("Old password not match");
}
}
// DELETE api/<UserController>/me
[HttpDelete("me")]
public async Task<ActionResult> ActualUserDelete()
{
UserModel user = await _UserService.GetByEmailAsync(HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Email).Value);
await _UserService.RemoveAsync(user.Id);
return Ok();
}
// GET: api/<UserController>/[page]
[HttpGet("{page}")]
[Permission("User_List")]
public async Task<ActionResult<List<UserModel>>> UserListGet(int page = 1)
{
List<UserModel> users = new();
foreach (UserModel user in await _UserService.GetPageAsync(page))
{
user.Password = "";
users.Add(user);
}
return Ok(users);
}
// GET api/<UserController>/5
[HttpGet("{id}")]
[Permission("User_Detail")]
public async Task<ActionResult<UserModel>> UserDetailGet(string id)
{
UserModel? user = await _UserService.GetByIdAsync(id);
if (user == null)
return NotFound();
user.Password = "";
return Ok(user);
}
// PUT api/<UserController>/{id}
[HttpPut("{id}")]
[Permission("User_Update")]
public async Task<ActionResult<UserModel>> Put(string id, [FromBody] UserModel newUser)
{
UserModel user = await _UserService.GetByIdAsync(id);
newUser.Password = user.Password;
newUser.Id = user.Id;
await _UserService.UpdateAsync(user.Id, newUser);
newUser.Password = "";
return Ok(newUser);
}
// PUT api/<UserController>/{id}/password
[HttpPut("{id}")]
[Permission("User_Update")]
public async Task<ActionResult> PasswordPut(string id, [FromBody] PasswordChangeModel pass)
{
UserModel user = await _UserService.GetByIdAsync(id);
if(user == null)
return NotFound("User not found");
user.Password = _PasswordService.HashPassword(pass.NewPassword);
await _UserService.UpdateAsync(user.Id, user);
return Ok();
}
// DELETE api/<UserController>/5
[HttpDelete("{id}")]
[Permission("User_Remove")]
public async Task<ActionResult> Delete(string id)
{
await _UserService.RemoveAsync(id);
return Ok();
}
}
}

34
Metrolog-API/Dockerfile Normal file
View file

@ -0,0 +1,34 @@
# See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
#dev variables
ENV JWT_SECRET="default"
ENV JWT_EXPIRATION_MINUTES="30"
ENV MONGODB_CONNECTION_STRING="mongodb://10.1.20.122:27017"
ENV MONGODB_DATABASE="metrolog"
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Metrolog-API.csproj", "."]
RUN dotnet restore "./Metrolog-API.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "./Metrolog-API.csproj" -c $BUILD_CONFIGURATION -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./Metrolog-API.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Metrolog-API.dll"]

View file

@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<RootNamespace>Metrolog_API</RootNamespace>
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
<DockerfileContext>.</DockerfileContext>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="9.0.2" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="9.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.0" />
<PackageReference Include="MongoDB.Driver" Version="3.2.0" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ActiveDebugProfile>Container (Dockerfile)</ActiveDebugProfile>
<Controller_SelectedScaffolderID>ApiControllerWithActionsScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,6 @@
@Metrolog_API_HostAddress = http://localhost:5249
GET {{Metrolog_API_HostAddress}}/weatherforecast/
Accept: application/json
###

View file

@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35527.113 d17.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Metrolog-API", "Metrolog-API.csproj", "{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9F2FA923-29FB-4269-9CF5-30AE92CA80D2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -0,0 +1,8 @@
namespace Metrolog_API.Models
{
public class LoginModel
{
public string Email { get; set; }
public string Password { get; set; }
}
}

View file

@ -0,0 +1,8 @@
namespace Metrolog_API.Models
{
public class LoginResponseModel
{
public string Token { get; set; }
public DateTime TokenExpire { get; set; }
}
}

View file

@ -0,0 +1,8 @@
namespace Metrolog_API.Models
{
public class PasswordChangeModel
{
public string? OldPassword { get; set; }
public string NewPassword { get; set; }
}
}

View file

@ -0,0 +1,13 @@
using Metrolog_API.Services;
namespace Metrolog_API.Models
{
public class RegisterModel
{
public string Name { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
}

View file

@ -0,0 +1,24 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace Metrolog_API.Models
{
public class RoleModel
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } = string.Empty;
[BsonElement("Default")]
public bool Default { get; set; }
[BsonElement("Name")]
public string Name { get; set; }
[BsonElement("Description")]
public string Description { get; set; }
[BsonElement("Permissions")]
public List<string> Permissions { get; set; }
}
}

View file

@ -0,0 +1,33 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
namespace Metrolog_API.Models
{
public class UserModel
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; } = string.Empty;
[BsonElement("TitlesFrontName")]
public string TitlesFrontName { get; set; }
[BsonElement("Name")]
public string Name { get; set; }
[BsonElement("Surname")]
public string Surname { get; set; }
[BsonElement("TitleBehindName")]
public string TitlesBehindName { get; set; }
[BsonElement("Email")]
public string Email { get; set; }
[BsonElement("Password")]
public string Password { get; set; }
[BsonElement("Roles")]
public List<string> Roles { get; set; }
}
}

53
Metrolog-API/Program.cs Normal file
View file

@ -0,0 +1,53 @@
using Metrolog_API.Services;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens;
using System.Security.Cryptography;
using System.Text;
using Metrolog_API.Static;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi
builder.Services.AddOpenApi();
//add authentication JWT configuration
string? JwtSecret = System.Environment.GetEnvironmentVariable("JWT_SECRET");
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(JwtSecret)),
ValidateIssuer = false, // issuer verify
ValidateAudience = false, // Audience verify
ValidateLifetime = true // Token expiration verify
};
});
builder.Services.AddAuthorization();
//add services
builder.Services.AddSingleton<UserService>();
builder.Services.AddSingleton<RoleService>();
builder.Services.AddScoped<PasswordService>();
builder.Services.AddSingleton<JWTService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
}
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

View file

@ -0,0 +1,22 @@
{
"profiles": {
"http": {
"commandName": "Project",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"dotnetRunMessages": true,
"applicationUrl": "http://localhost:5249"
},
"Container (Dockerfile)": {
"commandName": "Docker",
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}",
"environmentVariables": {
"ASPNETCORE_HTTP_PORTS": "8080"
},
"publishAllPorts": true,
"useSSL": false
}
},
"$schema": "https://json.schemastore.org/launchsettings.json"
}

View file

@ -0,0 +1,61 @@
using Metrolog_API.Models;
using Microsoft.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
namespace Metrolog_API.Services
{
public class JWTService
{
private RoleService _RoleService;
private string _JwtSecret;
private int _JwtExpirationMinutes;
public JWTService(RoleService roleService)
{
_RoleService = roleService;
_JwtSecret = System.Environment.GetEnvironmentVariable("JWT_SECRET");
_JwtExpirationMinutes = int.Parse(System.Environment.GetEnvironmentVariable("JWT_EXPIRATION_MINUTES"));
}
public async Task<string> GenerateUserJwtToken(UserModel user)
{
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
byte[] key = Encoding.ASCII.GetBytes(_JwtSecret);
List<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Email, user.Email),
new Claim(ClaimTypes.Name, $"{user.TitlesFrontName} {user.Name} {user.Surname} {user.TitlesBehindName}")
};
// Add permissions to JWT
foreach (string roleName in user.Roles)
{
RoleModel? role = await _RoleService.GetByNameAsync(roleName);
if (role != null)
{
foreach (string permission in role.Permissions)
{
if (claims.Find(x => x.Value == permission) == null)
{
claims.Add(new Claim("permission", permission));
}
}
}
}
SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.UtcNow.AddMinutes(2),
SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
SecurityToken token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
}
}

View file

@ -0,0 +1,37 @@
using System.Security.Cryptography;
namespace Metrolog_API.Services
{
public class PasswordService
{
private const int SaltSize = 16; // 128 bit
private const int KeySize = 32; // 256 bit
private const int Iterations = 100_000;
public string HashPassword(string password)
{
using var rng = RandomNumberGenerator.Create();
byte[] salt = new byte[SaltSize];
rng.GetBytes(salt);
using var pbkdf2 = new Rfc2898DeriveBytes(password, salt, Iterations, HashAlgorithmName.SHA256);
byte[] key = pbkdf2.GetBytes(KeySize);
return $"{Convert.ToBase64String(salt)}.{Convert.ToBase64String(key)}";
}
public bool VerifyPassword(string hashedPassword, string providedPassword)
{
var parts = hashedPassword.Split('.');
if (parts.Length != 2) return false;
byte[] salt = Convert.FromBase64String(parts[0]);
byte[] storedKey = Convert.FromBase64String(parts[1]);
using var pbkdf2 = new Rfc2898DeriveBytes(providedPassword, salt, Iterations, HashAlgorithmName.SHA256);
byte[] newKey = pbkdf2.GetBytes(KeySize);
return newKey.SequenceEqual(storedKey);
}
}
}

View file

@ -0,0 +1,55 @@
using Metrolog_API.Models;
using MongoDB.Driver;
namespace Metrolog_API.Services
{
public class RoleService
{
private readonly IMongoCollection<RoleModel> _roles;
public RoleService(IConfiguration config)
{
var client = new MongoClient(System.Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"));
var database = client.GetDatabase(System.Environment.GetEnvironmentVariable("MONGODB_DATABASE"));
_roles = database.GetCollection<RoleModel>("roles");
}
/// <summary>
/// Read all items in collection ordered by "Name" by page (100 items)
/// </summary>
/// <param name="page">Page number</param>
/// <returns>List of roles on specified page</returns>
public async Task<List<RoleModel>> GetPageAsync(int page = 1) =>
await _roles.Find<RoleModel>(role => true).SortByDescending(x => x.Name).Skip((page - 1) * 100).Limit(100).ToListAsync();
/// <summary>
/// Get Role by Name
/// </summary>
/// <param name="Name">Role Name</param>
/// <returns>Role or null</returns>
public async Task<RoleModel?> GetByNameAsync(string Name) =>
await _roles.Find<RoleModel>(role => role.Name == Name).FirstAsync();
/// <summary>
/// Get default role names
/// </summary>
/// <returns>Role Names</returns>
public async Task<List<string>> GetDefaultsAsync()
{
List<string> names = new List<string>();
foreach (RoleModel role in await _roles.Find<RoleModel>(role => role.Default == true).ToListAsync())
{
names.Add(role.Name);
}
return names;
}
}
}

View file

@ -0,0 +1,50 @@
using Metrolog_API.Models;
using MongoDB.Driver;
namespace Metrolog_API.Services
{
public class UserService
{
private readonly IMongoCollection<UserModel> _users;
public UserService(IConfiguration config)
{
var client = new MongoClient(System.Environment.GetEnvironmentVariable("MONGODB_CONNECTION_STRING"));
var database = client.GetDatabase(System.Environment.GetEnvironmentVariable("MONGODB_DATABASE"));
_users = database.GetCollection<UserModel>("users");
}
/// <summary>
/// Read all items in collection ordered by "Surname" by page (100 items)
/// </summary>
/// <param name="page">Page number</param>
/// <returns>List of users on specified page</returns>
public async Task<List<UserModel>> GetPageAsync(int page = 1) =>
await _users.Find<UserModel>(user => true).SortByDescending(x => x.Surname).Skip((page - 1) * 100).Limit(100).ToListAsync();
/// <summary>
/// Get user by Email
/// </summary>
/// <param name="email">user Email</param>
/// <returns>User</returns>
public async Task<UserModel?> GetByEmailAsync(string email) =>
await _users.Find<UserModel>(user => user.Email == email).FirstOrDefaultAsync();
public async Task<UserModel?> GetByIdAsync(string id) =>
await _users.Find<UserModel>(user => user.Id == id).FirstOrDefaultAsync();
/// <summary>
/// Create user
/// </summary>
/// <param name="user">user</param>
public async Task CreateAsync(UserModel user) =>
await _users.InsertOneAsync(user);
public async Task UpdateAsync(string id, UserModel calibration) =>
await _users.ReplaceOneAsync(c => c.Id == id, calibration);
public async Task RemoveAsync(string id) =>
await _users.DeleteOneAsync(c => c.Id == id);
}
}

View file

@ -0,0 +1,10 @@
namespace Metrolog_API.Static
{
public static class PermissionsStatic
{
public static string User_List = "User_List"; //List all users
public static string User_Detail = "User_Detail"; //View all users detail
public static string User_Remove = "User_Remove"; //Remove all User
public static string User_Update = "User_Update"; //Update all user
}
}

View file

@ -0,0 +1,27 @@
using System.Security.Cryptography;
using System.Text;
namespace Metrolog_API.Static
{
public static class RandomStringGeneratorStatic
{
public static string GenerateRandomString(int length = 64)
{
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var stringBuilder = new StringBuilder();
var randomBytes = new byte[length];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(randomBytes);
}
for (int i = 0; i < length; i++)
{
stringBuilder.Append(chars[randomBytes[i] % chars.Length]);
}
return stringBuilder.ToString();
}
}
}

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

Binary file not shown.

View file

@ -0,0 +1,393 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v9.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v9.0": {
"Metrolog-API/1.0.0": {
"dependencies": {
"Microsoft.AspNetCore.Authentication.JwtBearer": "9.0.2",
"Microsoft.AspNetCore.OpenApi": "9.0.0",
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets": "1.21.0",
"MongoDB.Driver": "3.2.0"
},
"runtime": {
"Metrolog-API.dll": {}
}
},
"DnsClient/1.6.1": {
"dependencies": {
"Microsoft.Win32.Registry": "5.0.0"
},
"runtime": {
"lib/net5.0/DnsClient.dll": {
"assemblyVersion": "1.6.1.0",
"fileVersion": "1.6.1.0"
}
}
},
"Microsoft.AspNetCore.Authentication.JwtBearer/9.0.2": {
"dependencies": {
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.Authentication.JwtBearer.dll": {
"assemblyVersion": "9.0.2.0",
"fileVersion": "9.0.225.6704"
}
}
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"dependencies": {
"Microsoft.OpenApi": "1.6.17"
},
"runtime": {
"lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": {
"assemblyVersion": "9.0.0.0",
"fileVersion": "9.0.24.52903"
}
}
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Abstractions.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Abstractions": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Logging.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Protocols": "8.0.1",
"System.IdentityModel.Tokens.Jwt": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.Logging": "8.0.1"
},
"runtime": {
"lib/net9.0/Microsoft.IdentityModel.Tokens.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"Microsoft.NETCore.Platforms/5.0.0": {},
"Microsoft.OpenApi/1.6.17": {
"runtime": {
"lib/netstandard2.0/Microsoft.OpenApi.dll": {
"assemblyVersion": "1.6.17.0",
"fileVersion": "1.6.17.0"
}
}
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.21.0": {},
"Microsoft.Win32.Registry/5.0.0": {
"dependencies": {
"System.Security.AccessControl": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"MongoDB.Bson/3.2.0": {
"dependencies": {
"System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "5.0.0"
},
"runtime": {
"lib/net6.0/MongoDB.Bson.dll": {
"assemblyVersion": "3.2.0.0",
"fileVersion": "3.2.0.0"
}
}
},
"MongoDB.Driver/3.2.0": {
"dependencies": {
"DnsClient": "1.6.1",
"Microsoft.Extensions.Logging.Abstractions": "2.0.0",
"MongoDB.Bson": "3.2.0",
"SharpCompress": "0.30.1",
"Snappier": "1.0.0",
"System.Buffers": "4.5.1",
"ZstdSharp.Port": "0.7.3"
},
"runtime": {
"lib/net6.0/MongoDB.Driver.dll": {
"assemblyVersion": "3.2.0.0",
"fileVersion": "3.2.0.0"
}
}
},
"SharpCompress/0.30.1": {
"runtime": {
"lib/net5.0/SharpCompress.dll": {
"assemblyVersion": "0.30.1.0",
"fileVersion": "0.30.1.0"
}
}
},
"Snappier/1.0.0": {
"runtime": {
"lib/net5.0/Snappier.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"dependencies": {
"Microsoft.IdentityModel.JsonWebTokens": "8.0.1",
"Microsoft.IdentityModel.Tokens": "8.0.1"
},
"runtime": {
"lib/net9.0/System.IdentityModel.Tokens.Jwt.dll": {
"assemblyVersion": "8.0.1.0",
"fileVersion": "8.0.1.50722"
}
}
},
"System.Memory/4.5.5": {},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {},
"System.Security.AccessControl/5.0.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "5.0.0",
"System.Security.Principal.Windows": "5.0.0"
}
},
"System.Security.Principal.Windows/5.0.0": {},
"ZstdSharp.Port/0.7.3": {
"runtime": {
"lib/net7.0/ZstdSharp.dll": {
"assemblyVersion": "0.7.3.0",
"fileVersion": "0.7.3.0"
}
}
}
}
},
"libraries": {
"Metrolog-API/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"DnsClient/1.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-4H/f2uYJOZ+YObZjpY9ABrKZI+JNw3uizp6oMzTXwDw6F+2qIPhpRl/1t68O/6e98+vqNiYGu+lswmwdYUy3gg==",
"path": "dnsclient/1.6.1",
"hashPath": "dnsclient.1.6.1.nupkg.sha512"
},
"Microsoft.AspNetCore.Authentication.JwtBearer/9.0.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-p3WhJqzvf6uuQiYpxARdC4Yr+UquZzzk7ZGun4MSufx3Mi9kmfjlU0e2MiBRHYWQdfx2HjU0ifaHJecJ7lXqug==",
"path": "microsoft.aspnetcore.authentication.jwtbearer/9.0.2",
"hashPath": "microsoft.aspnetcore.authentication.jwtbearer.9.0.2.nupkg.sha512"
},
"Microsoft.AspNetCore.OpenApi/9.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-FqUK5j1EOPNuFT7IafltZQ3cakqhSwVzH5ZW1MhZDe4pPXs9sJ2M5jom1Omsu+mwF2tNKKlRAzLRHQTZzbd+6Q==",
"path": "microsoft.aspnetcore.openapi/9.0.0",
"hashPath": "microsoft.aspnetcore.openapi.9.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Logging.Abstractions/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-6ZCllUYGFukkymSTx3Yr0G/ajRxoNJp7/FqSxSB4fGISST54ifBhgu4Nc0ItGi3i6DqwuNd8SUyObmiC++AO2Q==",
"path": "microsoft.extensions.logging.abstractions/2.0.0",
"hashPath": "microsoft.extensions.logging.abstractions.2.0.0.nupkg.sha512"
},
"Microsoft.IdentityModel.Abstractions/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OtlIWcyX01olfdevPKZdIPfBEvbcioDyBiE/Z2lHsopsMD7twcKtlN9kMevHmI5IIPhFpfwCIiR6qHQz1WHUIw==",
"path": "microsoft.identitymodel.abstractions/8.0.1",
"hashPath": "microsoft.identitymodel.abstractions.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.JsonWebTokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-s6++gF9x0rQApQzOBbSyp4jUaAlwm+DroKfL8gdOHxs83k8SJfUXhuc46rDB3rNXBQ1MVRxqKUrqFhO/M0E97g==",
"path": "microsoft.identitymodel.jsonwebtokens/8.0.1",
"hashPath": "microsoft.identitymodel.jsonwebtokens.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Logging/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-UCPF2exZqBXe7v/6sGNiM6zCQOUXXQ9+v5VTb9gPB8ZSUPnX53BxlN78v2jsbIvK9Dq4GovQxo23x8JgWvm/Qg==",
"path": "microsoft.identitymodel.logging/8.0.1",
"hashPath": "microsoft.identitymodel.logging.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-uA2vpKqU3I2mBBEaeJAWPTjT9v1TZrGWKdgK6G5qJd03CLx83kdiqO9cmiK8/n1erkHzFBwU/RphP83aAe3i3g==",
"path": "microsoft.identitymodel.protocols/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Protocols.OpenIdConnect/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-AQDbfpL+yzuuGhO/mQhKNsp44pm5Jv8/BI4KiFXR7beVGZoSH35zMV3PrmcfvSTsyI6qrcR898NzUauD6SRigg==",
"path": "microsoft.identitymodel.protocols.openidconnect/8.0.1",
"hashPath": "microsoft.identitymodel.protocols.openidconnect.8.0.1.nupkg.sha512"
},
"Microsoft.IdentityModel.Tokens/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kDimB6Dkd3nkW2oZPDkMkVHfQt3IDqO5gL0oa8WVy3OP4uE8Ij+8TXnqg9TOd9ufjsY3IDiGz7pCUbnfL18tjg==",
"path": "microsoft.identitymodel.tokens/8.0.1",
"hashPath": "microsoft.identitymodel.tokens.8.0.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ==",
"path": "microsoft.netcore.platforms/5.0.0",
"hashPath": "microsoft.netcore.platforms.5.0.0.nupkg.sha512"
},
"Microsoft.OpenApi/1.6.17": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==",
"path": "microsoft.openapi/1.6.17",
"hashPath": "microsoft.openapi.1.6.17.nupkg.sha512"
},
"Microsoft.VisualStudio.Azure.Containers.Tools.Targets/1.21.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8NudeHOE56YsY59HYY89akRMup8Ho+7Y3cADTGjajjWroXVU9RQai2nA6PfteB8AuzmRHZ5NZQB2BnWhQEul5g==",
"path": "microsoft.visualstudio.azure.containers.tools.targets/1.21.0",
"hashPath": "microsoft.visualstudio.azure.containers.tools.targets.1.21.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
"path": "microsoft.win32.registry/5.0.0",
"hashPath": "microsoft.win32.registry.5.0.0.nupkg.sha512"
},
"MongoDB.Bson/3.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Lkown45o2rXhFRwkpOCRwy329kqjRuJVVGgVoJKXE8STkqB/msrMXk+4geYYUvykOy/zvGY+ETKbWfJFYP+3gA==",
"path": "mongodb.bson/3.2.0",
"hashPath": "mongodb.bson.3.2.0.nupkg.sha512"
},
"MongoDB.Driver/3.2.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7y25rGE6rO4b3WMlYAsiU4d8iva6UPPM6irDXfJi2Jp9zn7muO1myOEcSzjPROZfgI8lLnKNIg5Ohe8d7c2qJA==",
"path": "mongodb.driver/3.2.0",
"hashPath": "mongodb.driver.3.2.0.nupkg.sha512"
},
"SharpCompress/0.30.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XqD4TpfyYGa7QTPzaGlMVbcecKnXy4YmYLDWrU+JIj7IuRNl7DH2END+Ll7ekWIY8o3dAMWLFDE1xdhfIWD1nw==",
"path": "sharpcompress/0.30.1",
"hashPath": "sharpcompress.0.30.1.nupkg.sha512"
},
"Snappier/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-rFtK2KEI9hIe8gtx3a0YDXdHOpedIf9wYCEYtBEmtlyiWVX3XlCNV03JrmmAi/Cdfn7dxK+k0sjjcLv4fpHnqA==",
"path": "snappier/1.0.0",
"hashPath": "snappier.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.IdentityModel.Tokens.Jwt/8.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GJw3bYkWpOgvN3tJo5X4lYUeIFA2HD293FPUhKmp7qxS+g5ywAb34Dnd3cDAFLkcMohy5XTpoaZ4uAHuw0uSPQ==",
"path": "system.identitymodel.tokens.jwt/8.0.1",
"hashPath": "system.identitymodel.tokens.jwt.8.0.1.nupkg.sha512"
},
"System.Memory/4.5.5": {
"type": "package",
"serviceable": true,
"sha512": "sha512-XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"path": "system.memory/4.5.5",
"hashPath": "system.memory.4.5.5.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==",
"path": "system.runtime.compilerservices.unsafe/5.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512"
},
"System.Security.AccessControl/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
"path": "system.security.accesscontrol/5.0.0",
"hashPath": "system.security.accesscontrol.5.0.0.nupkg.sha512"
},
"System.Security.Principal.Windows/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA==",
"path": "system.security.principal.windows/5.0.0",
"hashPath": "system.security.principal.windows.5.0.0.nupkg.sha512"
},
"ZstdSharp.Port/0.7.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-U9Ix4l4cl58Kzz1rJzj5hoVTjmbx1qGMwzAcbv1j/d3NzrFaESIurQyg+ow4mivCgkE3S413y+U9k4WdnEIkRA==",
"path": "zstdsharp.port/0.7.3",
"hashPath": "zstdsharp.port.0.7.3.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,19 @@
{
"runtimeOptions": {
"tfm": "net9.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "9.0.0"
},
{
"name": "Microsoft.AspNetCore.App",
"version": "9.0.0"
}
],
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View file

@ -0,0 +1,5 @@
{
"Version": 1,
"ManifestType": "Build",
"Endpoints": []
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,8 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}

View file

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

View file

@ -0,0 +1 @@
/app/bin/Debug/net9.0/Metrolog-API.dll

View file

@ -0,0 +1 @@
--additionalProbingPath /.nuget/fallbackpackages2 --additionalProbingPath /.nuget/fallbackpackages

View file

@ -0,0 +1 @@
Unknown

View file

@ -0,0 +1 @@
linux-x64

View file

@ -0,0 +1 @@
True

View file

@ -0,0 +1 @@
NDre9WgTYeDBO/tshli+GMABybZPXzb5BKIVhu8EH9c=

View file

@ -0,0 +1 @@
sha256:f7ecb7939910d5012d57a0127950cb4b803f719c5dddd15a139fa5fa50db114f

View file

@ -0,0 +1 @@
sha256:f7ecb7939910d5012d57a0127950cb4b803f719c5dddd15a139fa5fa50db114f

View file

@ -0,0 +1 @@
Linux

View file

@ -0,0 +1 @@
DotNetCore

View file

@ -0,0 +1 @@
{"C:\\Users\\jan00\\vsdbg\\vs2017u5":"/remote_debugger","C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Sdks\\Microsoft.Docker.Sdk\\tools\\linux-x64\\net6.0":"/VSTools","C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\HotReload":"/HotReloadAgent","C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API":"/src/","C:\\Users\\jan00\\.nuget\\packages":"/.nuget/fallbackpackages2","C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages":"/.nuget/fallbackpackages"}

View file

@ -0,0 +1 @@
[{"SourcePath":"C:\\Users\\jan00\\vsdbg\\vs2017u5","TargetPath":"/remote_debugger","ReadOnly":false},{"SourcePath":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Sdks\\Microsoft.Docker.Sdk\\tools\\linux-x64\\net6.0","TargetPath":"/VSTools","ReadOnly":true},{"SourcePath":"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\HotReload","TargetPath":"/HotReloadAgent","ReadOnly":true},{"SourcePath":"C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API","TargetPath":"/app","ReadOnly":false},{"SourcePath":"C:\\Users\\jan00\\Documents\\Programovani\\MyProjects\\Metrolog\\Metrolog-API","TargetPath":"/src/","ReadOnly":false},{"SourcePath":"C:\\Users\\jan00\\.nuget\\packages","TargetPath":"/.nuget/fallbackpackages2","ReadOnly":false},{"SourcePath":"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages","TargetPath":"/.nuget/fallbackpackages","ReadOnly":false}]

View file

@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")]

View file

@ -0,0 +1,23 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("Metrolog-API")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("Metrolog-API")]
[assembly: System.Reflection.AssemblyTitleAttribute("Metrolog-API")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View file

@ -0,0 +1 @@
71c873f5af5416e3400d59ca8d53f09cd591911e1c42befc799b12b4eb9c364c

View file

@ -0,0 +1,21 @@
is_global = true
build_property.TargetFramework = net9.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb = true
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = Metrolog_API
build_property.RootNamespace = Metrolog_API
build_property.ProjectDir = C:\Users\jan00\Documents\Programovani\MyProjects\Metrolog\Metrolog-API\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.RazorLangVersion = 9.0
build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = C:\Users\jan00\Documents\Programovani\MyProjects\Metrolog\Metrolog-API
build_property._RazorSourceGeneratorDebug =
build_property.EffectiveAnalysisLevelStyle = 9.0
build_property.EnableCodeStyleSeverity =

View file

@ -0,0 +1,17 @@
// <auto-generated/>
global using global::Microsoft.AspNetCore.Builder;
global using global::Microsoft.AspNetCore.Hosting;
global using global::Microsoft.AspNetCore.Http;
global using global::Microsoft.AspNetCore.Routing;
global using global::Microsoft.Extensions.Configuration;
global using global::Microsoft.Extensions.DependencyInjection;
global using global::Microsoft.Extensions.Hosting;
global using global::Microsoft.Extensions.Logging;
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Net.Http.Json;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View file

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")]
// Generated by the MSBuild WriteCodeFragment class.

Some files were not shown because too many files have changed in this diff Show more