Skip to content
Snippets Groups Projects
Commit 7b7efd5b authored by Jakub Konvička's avatar Jakub Konvička
Browse files

feat(#23): Add data validation

parent 1da379a7
Branches
Tags v1.1
1 merge request!10Merge: Release version 1.1
Showing
with 166 additions and 40 deletions
# This is a generated file. Not intended for manual editing.
version: "3"
services:
codeToXMI_dev:
build:
context: "/Users/jakubkonvicka/RiderProjects/diplomathesis/WebAPI"
dockerfile: "Dockerfile"
target: "base"
command: []
entrypoint:
- "dotnet"
- "/app/bin/Debug/net7.0/WebAPI.dll"
environment:
DOTNET_USE_POLLING_FILE_WATCHER: "true"
image: "webapi:dev"
ports: []
volumes:
- "/Users/jakubkonvicka/.nuget/packages:/root/.nuget/packages"
- "/Users/jakubkonvicka/RiderProjects/diplomathesis/WebAPI:/app:rw"
- "/Users/jakubkonvicka/RiderProjects/diplomathesis:/src:rw"
working_dir: "/app"
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">/usr/local/share/dotnet/sdk/7.0.404/MSBuild.dll</s:String>
<s:Int64 x:Key="/Default/Environment/Hierarchy/Build/BuildTool/MsbuildVersion/@EntryValue">1114112</s:Int64>
<s:String x:Key="/Default/Environment/Highlighting/HighlightingSourceSnapshotLocation/@EntryValue">/Users/jakubkonvicka/Library/Caches/JetBrains/Rider2023.2/resharper-host/temp/Rider/vAny/CoverageData/_CodeToXMI.401400098/Snapshot/snapshot.utdcvr</s:String>
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=7191ef50_002Dfb5e_002D4366_002D876f_002D7faeb1ecbf31/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="BuildEmptyDiagram" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;
&lt;TestAncestor&gt;
&lt;TestId&gt;NUnit3x::0F37435B-F6C5-40D0-8250-192C843D1465::net7.0::UnitTest.ClassDiagramTests&lt;/TestId&gt;
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel.DataAnnotations;
using System.Text;
using Antlr4.Runtime;
using Antlr4.Runtime.Tree;
......@@ -8,10 +6,10 @@ using CodeParser.Cpp;
using Database;
using Database.Model;
using DiagramBuilder.AbstractCreator;
using DiagramBuilder.Activity.Interface;
using DiagramBuilder.ConcreteCreator;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using WebAPI.DTO;
using WebAPI.DTO.External;
using WebAPI.Utils;
namespace WebAPI.Controllers
......@@ -36,7 +34,17 @@ namespace WebAPI.Controllers
//convert-to-activity-diagram
[HttpGet("convert-to-activity-diagram", Name = "ConvertToActivityDiagram")]
[Produces("application/xml")]
public IActionResult ConvertToActivityDiagram(string token, int sourceCodeId, string functionIdentifier)
public IActionResult ConvertToActivityDiagram(
[Required(ErrorMessage = "Token is required")]
[RegularExpression(@"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", ErrorMessage = "Invalid GUID format for Token")]
string token,
[Required(ErrorMessage = "SourceCodeId is required")]
[Range(1, int.MaxValue, ErrorMessage = "Id must be greater than 0")]
int sourceCodeId,
[Required(ErrorMessage = "FunctionIdentifier is required")]
string functionIdentifier)
{
if (TokenManager.VerifyAndRevalidateToken(token, tokenValidityMinutes))
{
......@@ -83,7 +91,13 @@ namespace WebAPI.Controllers
//convert-to-class-diagram
[HttpGet("convert-to-class-diagram", Name = "ConvertToClassDiagram")]
[Produces("application/xml")]
public IActionResult ConvertToClassDiagram(string token, int sourceCodeId)
public IActionResult ConvertToClassDiagram([Required(ErrorMessage = "Token is required")]
[RegularExpression(@"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", ErrorMessage = "Invalid GUID format for Token")]
string token,
[Required(ErrorMessage = "SourceCodeId is required")]
[Range(1, int.MaxValue, ErrorMessage = "Id must be greater than 0")]
int sourceCodeId)
{
if (TokenManager.VerifyAndRevalidateToken(token, tokenValidityMinutes))
{
......@@ -208,7 +222,13 @@ namespace WebAPI.Controllers
}
[HttpGet("code", Name = "ListCode")]
public IActionResult ListCode(string token, int id)
public IActionResult ListCode([Required(ErrorMessage = "Token is required")]
[RegularExpression(@"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", ErrorMessage = "Invalid GUID format for Token")]
string token,
[Required(ErrorMessage = "Id is required")]
[Range(1, int.MaxValue, ErrorMessage = "Id must be greater than 0")]
int id)
{
if (TokenManager.VerifyAndRevalidateToken(token, tokenValidityMinutes))
{
......@@ -243,7 +263,8 @@ namespace WebAPI.Controllers
}
[HttpGet("code-all", Name = "ListAllCode")]
public IActionResult ListAllCode(string token)
public IActionResult ListAllCode([RegularExpression(@"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", ErrorMessage = "Invalid GUID format for Token")]
string token)
{
if (TokenManager.VerifyAndRevalidateToken(token, tokenValidityMinutes))
{
......@@ -317,7 +338,7 @@ namespace WebAPI.Controllers
db.Users.Add(new User
{
Name = model.UserName,
Name = model.Username,
PasswordHash = passwordHash,
Token = "NOT LOGGED IN YET",
LastAccess = DateTime.MinValue
......
using System.ComponentModel.DataAnnotations;
namespace WebAPI.DTO.Attribute;
public class Base64Attribute : ValidationAttribute
{
protected override ValidationResult? IsValid(object? value, ValidationContext validationContext)
{
var errorMessage = $"{validationContext.DisplayName} must be a valid base64 string.";
if (value == null)
{
return ValidationResult.Success;
}
string stringValue = value.ToString();
try
{
var fromBase64String = Convert.FromBase64String(stringValue);
return ValidationResult.Success;
}
catch (FormatException)
{
return new ValidationResult(errorMessage);
}
}
}
\ No newline at end of file
namespace WebAPI;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WebAPI.DTO;
public class AuthenticateUserModel
{
[DisplayName("Username")]
[Required(ErrorMessage = "Username is required")]
public string Username { get; set; }
[DisplayName("Password")]
[Required(ErrorMessage = "Password is required")]
public string Password { get; set; }
}
\ No newline at end of file
namespace WebAPI;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using WebAPI.DTO.Attribute;
namespace WebAPI.DTO.External;
public class SourceCodeExt
{
......
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WebAPI.DTO;
public class RegisterUserModel : TokenDTO
{
[DisplayName("Username")]
[Required(ErrorMessage = "Username is required")]
public string Username { get; set; }
[DisplayName("Password")]
[Required(ErrorMessage = "Password is required")]
public string Password { get; set; }
}
\ No newline at end of file
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WebAPI.DTO;
public class RemoveCodeModel : TokenDTO
{
[DisplayName("Id")]
[Required(ErrorMessage = "Id is required")]
[Range(1, int.MaxValue, ErrorMessage = "Id must be greater than 0")]
public int Id { get; set; }
}
\ No newline at end of file
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace WebAPI.DTO;
public abstract class TokenDTO
{
[DisplayName("Token")]
[Required(ErrorMessage = "Token is required")]
[RegularExpression(@"^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$", ErrorMessage = "Invalid GUID format for Token")]
public string Token { get; set; }
}
\ No newline at end of file
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using WebAPI.DTO.Attribute;
namespace WebAPI.DTO;
public class UploadCodeModel : TokenDTO
{
[DisplayName("Code")]
[Required(ErrorMessage = "Code is required")]
[Base64(ErrorMessage = "Code must be a valid base64 string.")]
public string Code { get; set; }
}
\ No newline at end of file
namespace WebAPI;
public class ListCodeModel
{
public string Token { get; set; }
public int[] Ids { get; set; }
}
\ No newline at end of file
namespace WebAPI;
public class RegisterUserModel
{
public string Token { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
\ No newline at end of file
namespace WebAPI;
public class RemoveCodeModel
{
public string Token { get; set; }
public int Id { get; set; }
}
\ No newline at end of file
namespace WebAPI;
public class UploadCodeModel
{
public string Token { get; set; }
public string Code { get; set; }
}
\ No newline at end of file
version: '3'
services:
codeToXMI_dev:
container_name: CodeToXMI_API_dev
image: webapi:dev
build:
context: ./WebAPI/
dockerfile: Dockerfile
ports:
- "7080:80"
environment:
- ASPNETCORE_ENVIRONMENT=Development
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment