diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4ec73bd --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/0feacb2f-8a75-4aea-a458-71b4bcd73a3a.vsidx +Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/ec0e104f-1dbc-4210-8c14-8ddf7754c5bd.vsidx +Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/37c5788e-c610-48cc-80fe-81ac644a485a.vsidx +Ticket_System/obj \ No newline at end of file diff --git a/Ticket_System/.vs/ProjectEvaluation/ticket_system.metadata.v10.bin b/Ticket_System/.vs/ProjectEvaluation/ticket_system.metadata.v10.bin new file mode 100644 index 0000000..162aff4 Binary files /dev/null and b/Ticket_System/.vs/ProjectEvaluation/ticket_system.metadata.v10.bin differ diff --git a/Ticket_System/.vs/ProjectEvaluation/ticket_system.projects.v10.bin b/Ticket_System/.vs/ProjectEvaluation/ticket_system.projects.v10.bin new file mode 100644 index 0000000..7f864c1 Binary files /dev/null and b/Ticket_System/.vs/ProjectEvaluation/ticket_system.projects.v10.bin differ diff --git a/Ticket_System/.vs/ProjectEvaluation/ticket_system.strings.v10.bin b/Ticket_System/.vs/ProjectEvaluation/ticket_system.strings.v10.bin new file mode 100644 index 0000000..032a9af Binary files /dev/null and b/Ticket_System/.vs/ProjectEvaluation/ticket_system.strings.v10.bin differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/DesignTimeBuild/.dtbcache.v2 b/Ticket_System/.vs/Ticket_System.slnx/DesignTimeBuild/.dtbcache.v2 new file mode 100644 index 0000000..9ee1f22 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/DesignTimeBuild/.dtbcache.v2 differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/560b78c6-8d0f-4770-a9b5-43ee3e4bbac9.vsidx b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/560b78c6-8d0f-4770-a9b5-43ee3e4bbac9.vsidx new file mode 100644 index 0000000..47f4d4c Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/560b78c6-8d0f-4770-a9b5-43ee3e4bbac9.vsidx differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/6708959d-f36c-435c-a546-85cf7bf1f7f9.vsidx b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/6708959d-f36c-435c-a546-85cf7bf1f7f9.vsidx new file mode 100644 index 0000000..2c080f7 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/6708959d-f36c-435c-a546-85cf7bf1f7f9.vsidx differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/75a977ac-89da-44ab-965a-f685bbd28eda.vsidx b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/75a977ac-89da-44ab-965a-f685bbd28eda.vsidx new file mode 100644 index 0000000..f0fa7bb Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/75a977ac-89da-44ab-965a-f685bbd28eda.vsidx differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/d59201f0-c33d-478b-97f6-b99bc0976fb6.vsidx b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/d59201f0-c33d-478b-97f6-b99bc0976fb6.vsidx new file mode 100644 index 0000000..62e4a71 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/d59201f0-c33d-478b-97f6-b99bc0976fb6.vsidx differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/e1112c14-4fe5-4f43-9455-888c0a27db58.vsidx b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/e1112c14-4fe5-4f43-9455-888c0a27db58.vsidx new file mode 100644 index 0000000..7988b90 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/FileContentIndex/e1112c14-4fe5-4f43-9455-888c0a27db58.vsidx differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/v18/.futdcache.v2 b/Ticket_System/.vs/Ticket_System.slnx/v18/.futdcache.v2 new file mode 100644 index 0000000..5efffb4 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/v18/.futdcache.v2 differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/v18/.suo b/Ticket_System/.vs/Ticket_System.slnx/v18/.suo new file mode 100644 index 0000000..42e0160 Binary files /dev/null and b/Ticket_System/.vs/Ticket_System.slnx/v18/.suo differ diff --git a/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.backup.json b/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.backup.json new file mode 100644 index 0000000..b2cfdb6 --- /dev/null +++ b/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.backup.json @@ -0,0 +1,71 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\ticket_system.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:ticket_system.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\logger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:logger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\ticket_system.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:ticket_system.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 2, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "Ticket_System.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.cs", + "RelativeDocumentMoniker": "Ticket_System.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.cs", + "RelativeToolTip": "Ticket_System.cs", + "ViewState": "AgIAACQAAAAAAAAAAAAYwBAAAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T11:24:03.402Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Logger.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Logger.cs", + "RelativeDocumentMoniker": "Logger.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Logger.cs", + "RelativeToolTip": "Logger.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T11:43:25.803Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Ticket_System.csproj", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.csproj", + "RelativeDocumentMoniker": "Ticket_System.csproj", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.csproj", + "RelativeToolTip": "Ticket_System.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2026-01-28T11:24:17.672Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.json b/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.json new file mode 100644 index 0000000..d8916c5 --- /dev/null +++ b/Ticket_System/.vs/Ticket_System.slnx/v18/DocumentLayout.json @@ -0,0 +1,105 @@ +{ + "Version": 1, + "WorkspaceRootPath": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\", + "Documents": [ + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\ticket_system.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:ticket_system.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\logger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:logger.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\ticket_system.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:ticket_system.csproj||{FA3CD31E-987B-443A-9B81-186104E8DAC1}|" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\authclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:authclient.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + }, + { + "AbsoluteMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|c:\\users\\tweee\\source\\repos\\projekt-dev-env\\src\\project-cbackend\\ticket_system\\token.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}", + "RelativeMoniker": "D:0:0:{106D2CB4-0886-FC41-C71A-2C92C20303DC}|Ticket_System.csproj|solutionrelative:token.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}" + } + ], + "DocumentGroupContainers": [ + { + "Orientation": 0, + "VerticalTabListWidth": 256, + "DocumentGroups": [ + { + "DockedWidth": 200, + "SelectedChildIndex": 2, + "Children": [ + { + "$type": "Document", + "DocumentIndex": 3, + "Title": "AuthClient.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\AuthClient.cs", + "RelativeDocumentMoniker": "AuthClient.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\AuthClient.cs", + "RelativeToolTip": "AuthClient.cs", + "ViewState": "AgIAACMAAAAAAAAAAAAuwCcAAAAwAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T12:18:08.321Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 4, + "Title": "Token.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Token.cs", + "RelativeDocumentMoniker": "Token.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Token.cs", + "RelativeToolTip": "Token.cs", + "ViewState": "AgIAAAoAAAAAAAAAAAAQwA4AAAAFAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T12:16:13.411Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 0, + "Title": "Ticket_System.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.cs", + "RelativeDocumentMoniker": "Ticket_System.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.cs", + "RelativeToolTip": "Ticket_System.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAUAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T11:24:03.402Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 1, + "Title": "Logger.cs", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Logger.cs", + "RelativeDocumentMoniker": "Logger.cs", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Logger.cs", + "RelativeToolTip": "Logger.cs", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAAQAAAABAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|", + "WhenOpened": "2026-01-28T11:43:25.803Z", + "EditorCaption": "" + }, + { + "$type": "Document", + "DocumentIndex": 2, + "Title": "Ticket_System.csproj", + "DocumentMoniker": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.csproj", + "RelativeDocumentMoniker": "Ticket_System.csproj", + "ToolTip": "C:\\Users\\tweee\\source\\repos\\Projekt-dev-env\\src\\Project-CBackend\\Ticket_System\\Ticket_System.csproj", + "RelativeToolTip": "Ticket_System.csproj", + "ViewState": "AgIAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA==", + "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|", + "WhenOpened": "2026-01-28T11:24:17.672Z", + "EditorCaption": "" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Ticket_System/AuthClient.cs b/Ticket_System/AuthClient.cs new file mode 100644 index 0000000..267f6ce --- /dev/null +++ b/Ticket_System/AuthClient.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Net.Http.Headers; +using System.Text; +using System.Text.Json; + +namespace Ticket_System +{ + + + public sealed class AuthApiClient + { + private readonly HttpClient _http; + private readonly JsonSerializerOptions _json = new() { PropertyNameCaseInsensitive = true }; + + public AuthApiClient(string baseUrl) + { + _http = new HttpClient { BaseAddress = new Uri(baseUrl.TrimEnd('/') + "/") }; + } + + public async Task SignInAsync(string name, string password) + { + var req = new SignInRequest { name = name, password = password }; + + var content = new StringContent( + JsonSerializer.Serialize(req), + Encoding.UTF8, + "application/json" + ); + + using var resp = await _http.PostAsync("signin", content); + var body = await resp.Content.ReadAsStringAsync(); + + if (resp.IsSuccessStatusCode) + { + return JsonSerializer.Deserialize(body, _json); + } + + // optional: Fehler-Body auswerten + // var err = JsonSerializer.Deserialize(body, _json); + return null; + } + + public async Task ValidateTokenAsync(string token) + { + using var req = new HttpRequestMessage(HttpMethod.Get, "token/validate"); + req.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); + + using var resp = await _http.SendAsync(req); + var body = await resp.Content.ReadAsStringAsync(); + + if (!resp.IsSuccessStatusCode) return false; + + var result = JsonSerializer.Deserialize(body, _json); + return result?.is_valid == true; + } + } + +} diff --git a/Ticket_System/Logger.cs b/Ticket_System/Logger.cs new file mode 100644 index 0000000..1915370 --- /dev/null +++ b/Ticket_System/Logger.cs @@ -0,0 +1,18 @@ +using System; +using MySqlConnector; + +namespace Ticket_System +{ + public class Logger + { + public void Log(string message, string userID) + { + string sql = $"insert into Log (LogID, ErrorMessage, datetime, User) values ((select max LogID from Log) + 1), {message}, {DateTime.Now},{userID})"; + + MySqlCommand cmd = new MySqlCommand(sql); + cmd.ExecuteNonQuery(); + + } + } +} + diff --git a/Ticket_System/Ticket_System.cs b/Ticket_System/Ticket_System.cs new file mode 100644 index 0000000..3a1fa6d --- /dev/null +++ b/Ticket_System/Ticket_System.cs @@ -0,0 +1,51 @@ +using MySqlConnector; +using BCrypt; +using System.ComponentModel.DataAnnotations; + +namespace Ticket_System +{ + public class Ticket_System + { + Logger logger = new Logger(); + public string userID = "-"; + + private string? _token; + + public async Task MainAsync(string[] args) + { + if (!await LoginAsync()) + return; + + await LoadTicketsAsync(); + } + + public async Task LoginAsync() + { + var auth = new AuthApiClient("http://localhost:3000"); + + string inputuser = "Carl"; + string inputpw = "Deine Fette Mutter"; + + var tokenResp = await auth.SignInAsync(inputuser, inputpw); + if (tokenResp == null || string.IsNullOrWhiteSpace(tokenResp.token)) + { + logger.Log("Login fehlgeschlagen (API)", userID); + return false; + } + + _token = tokenResp.token; + + bool ok = await auth.ValidateTokenAsync(_token); + logger.Log(ok ? "Token gültig" : "Token ungültig", userID); + + return ok; + } + + public async Task LoadTicketsAsync() + { + // hier würdest du bei weiteren API-Calls einfach den Token mitsenden: + // Authorization: Bearer <_token> + await Task.CompletedTask; + } + } +} diff --git a/Ticket_System/Ticket_System.csproj b/Ticket_System/Ticket_System.csproj new file mode 100644 index 0000000..f8a7fa3 --- /dev/null +++ b/Ticket_System/Ticket_System.csproj @@ -0,0 +1,14 @@ + + + + net10.0 + enable + enable + + + + + + + + diff --git a/Ticket_System/Ticket_System.slnx b/Ticket_System/Ticket_System.slnx new file mode 100644 index 0000000..93884a5 --- /dev/null +++ b/Ticket_System/Ticket_System.slnx @@ -0,0 +1,3 @@ + + + diff --git a/Ticket_System/Token.cs b/Ticket_System/Token.cs new file mode 100644 index 0000000..7c91be5 --- /dev/null +++ b/Ticket_System/Token.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Ticket_System +{ + public sealed class ResponseToken + { + public string token { get; set; } = ""; + } + + public sealed class TokenIsValid + { + public bool is_valid { get; set; } + } + + public sealed class SignInRequest + { + public string name { get; set; } = ""; + public string password { get; set; } = ""; + } + + public sealed class SignInErrorResponse + { + public Dictionary? errors { get; set; } + public ResponseToken? message { get; set; } + } + +}