Merge remote-tracking branch 'origin/main'

This commit is contained in:
atef 2023-02-23 14:08:39 +01:00
commit e850f9746c
1009 changed files with 708 additions and 55882 deletions

BIN
.fslckout

Binary file not shown.

12
.gitignore vendored
View File

@ -1,6 +1,6 @@
/typescript/Frontend/node_modules **/node_modules
/typescript/Frontend/node_modules/* **/bin
*/Debug/* **/obj
*/Release/* *.DotSettings.user
*/db.sqlite **/.idea/workspace.xml
*.fossil **/.idea/tasks.xml

View File

@ -14,17 +14,5 @@
</introspection-scope> </introspection-scope>
</schema-mapping> </schema-mapping>
</data-source> </data-source>
<data-source name="db [2]" uuid="90dbce14-c550-4450-973e-ce471278a4c1">
<database-info product="SQLite" version="3.39.2" jdbc-version="2.1" driver-name="SQLite JDBC" driver-version="3.39.2.0" dbms="SQLITE" exact-version="3.39.2" exact-driver-version="3.39">
<identifier-quote-string>&quot;</identifier-quote-string>
</database-info>
<case-sensitivity plain-identifiers="mixed" quoted-identifiers="mixed" />
<auth-provider>no-auth</auth-provider>
<schema-mapping>
<introspection-scope>
<node kind="schema" qname="@" />
</introspection-scope>
</schema-mapping>
</data-source>
</component> </component>
</project> </project>

View File

@ -8,17 +8,5 @@
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/app/Backend/db.sqlite</jdbc-url> <jdbc-url>jdbc:sqlite:$PROJECT_DIR$/app/Backend/db.sqlite</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir> <working-dir>$ProjectFileDir$</working-dir>
</data-source> </data-source>
<data-source source="LOCAL" name="db [2]" uuid="90dbce14-c550-4450-973e-ce471278a4c1">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>
<jdbc-url>jdbc:sqlite:$PROJECT_DIR$/app/Backend/db.sqlite-original</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
<libraries>
<library>
<url>file://$APPLICATION_CONFIG_DIR$/jdbc-drivers/Xerial SQLiteJDBC/3.39.2/sqlite-jdbc-3.39.2.jar</url>
</library>
</libraries>
</data-source>
</component> </component>
</project> </project>

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
<mapping directory="$PROJECT_DIR$/.." vcs="Git" /> <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component> </component>
</project> </project>

File diff suppressed because it is too large Load Diff

View File

@ -87,6 +87,8 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FossilTui", "app/FossilTui/FossilTui.csproj", "{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FossilTui", "app/FossilTui/FossilTui.csproj", "{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}"
EndProject EndProject
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Units", "lib\Units\Units.csproj", "{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -236,6 +238,10 @@ Global
{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Debug|Any CPU.Build.0 = Debug|Any CPU {C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Release|Any CPU.ActiveCfg = Release|Any CPU {C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Release|Any CPU.Build.0 = Release|Any CPU {C40264BB-C834-4C48-9B3F-6BEF8F37C0ED}.Release|Any CPU.Build.0 = Release|Any CPU
{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution GlobalSection(NestedProjects) = preSolution
{CF4834CB-91B7-4172-AC13-ECDA8613CD17} = {145597B4-3E30-45E6-9F72-4DD43194539A} {CF4834CB-91B7-4172-AC13-ECDA8613CD17} = {145597B4-3E30-45E6-9F72-4DD43194539A}
@ -280,5 +286,6 @@ Global
{A56F58C2-B265-435B-A985-53B4D6F49B1A} = {145597B4-3E30-45E6-9F72-4DD43194539A} {A56F58C2-B265-435B-A985-53B4D6F49B1A} = {145597B4-3E30-45E6-9F72-4DD43194539A}
{C40264BB-C834-4C48-9B3F-6BEF8F37C0ED} = {145597B4-3E30-45E6-9F72-4DD43194539A} {C40264BB-C834-4C48-9B3F-6BEF8F37C0ED} = {145597B4-3E30-45E6-9F72-4DD43194539A}
{F162D50B-4B99-496D-8354-1FB68E992B2D} = {D846B46B-46FF-4EF7-9B9D-DDBEF9533C56} {F162D50B-4B99-496D-8354-1FB68E992B2D} = {D846B46B-46FF-4EF7-9B9D-DDBEF9533C56}
{C04FB6DA-23C6-46BB-9B21-8F4FBA32FFF7} = {AD5B98A8-AB7F-4DA2-B66D-5B4E63E7D854}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -1,11 +0,0 @@
<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/CodeInspection/Highlighting/AnalysisEnabled/@EntryValue">VISIBLE_FILES</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/CustomBuildToolPath/@EntryValue">/usr/lib/dotnet/sdk/6.0.113/MSBuild.dll</s:String>
<s:String x:Key="/Default/Environment/Hierarchy/Build/BuildTool/DotNetCliExePath/@EntryValue">/usr/lib/dotnet/dotnet</s:String>
<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/BuildTool/RecentDotNetCliExePaths/=_002Fusr_002Fbin_002Fdotnet/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Innov/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@ -1,486 +0,0 @@
{
"format": 1,
"restore": {
"/home/kim/code/innovenergy/new/csharp/app/API/API.csproj": {}
},
"projects": {
"/home/kim/code/innovenergy/new/csharp/app/API/API.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/app/API/API.csproj",
"projectName": "API",
"projectPath": "/home/kim/code/innovenergy/new/csharp/app/API/API.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/app/API/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Newtonsoft.Json": {
"target": "Package",
"version": "[13.0.1, )"
},
"sqlite-net-pcl": {
"target": "Package",
"version": "[1.8.116, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj",
"projectName": "OpenVpnCertificatesServer",
"projectPath": "/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/DBus.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/DBus.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"BouncyCastle": {
"target": "Package",
"version": "[1.8.9, )"
},
"Flurl.Http": {
"target": "Package",
"version": "[3.2.2, )"
},
"SharpZipLib": {
"target": "Package",
"version": "[1.3.3, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/DBus.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/DBus.csproj",
"projectName": "InnovEnergy.Lib.Protocols.DBus",
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/DBus.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/lib/Protocols/DBus/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"System.Reactive": {
"target": "Package",
"version": "[5.0.0, )"
},
"System.Reflection.Emit": {
"target": "Package",
"version": "[4.7.0, )"
},
"System.Security.Principal.Windows": {
"target": "Package",
"version": "[4.7.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/lib/Time/Time.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/lib/Time/Time.csproj",
"projectName": "Time",
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Time/Time.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/lib/Time/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj",
"projectName": "Utils",
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/lib/Utils/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"CliWrap": {
"target": "Package",
"version": "[3.3.1, )"
},
"DecimalMath.DecimalEx": {
"target": "Package",
"version": "[1.0.2, )"
},
"System.Reactive.Linq": {
"target": "Package",
"version": "[5.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj",
"projectName": "VictronVRM",
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"/home/kim/code/innovenergy/new/csharp/lib/Time/Time.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Time/Time.csproj"
},
"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Flurl.Http": {
"target": "Package",
"version": "[3.2.0, )"
},
"System.Reactive.Linq": {
"target": "Package",
"version": "[5.0.0, )"
},
"System.Text.Json": {
"target": "Package",
"version": "[6.0.2, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
},
"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj",
"projectName": "WebServer",
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj",
"packagesPath": "/home/kim/.nuget/packages/",
"outputPath": "/home/kim/code/innovenergy/new/csharp/lib/WebServer/obj/",
"projectStyle": "PackageReference",
"configFilePaths": [
"/home/kim/.nuget/NuGet/NuGet.Config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {
"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj": {
"projectPath": "/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj"
}
}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Flurl": {
"target": "Package",
"version": "[3.0.1, )"
},
"Flurl.Http": {
"target": "Package",
"version": "[3.0.1, )"
},
"System.Reactive.Linq": {
"target": "Package",
"version": "[5.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">False</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/kim/.nuget/packages/</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/kim/.nuget/packages/</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.4.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="/home/kim/.nuget/packages/" />
</ItemGroup>
</Project>

View File

@ -1,13 +0,0 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization = true
build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.EnableSingleFileAnalyzer =
build_property.EnableTrimAnalyzer = true
build_property.IncludeAllContentForSelfExtract =
build_property.RootNamespace = InnovEnergy.API
build_property.ProjectDir = /home/kim/code/innovenergy/new/csharp/app/API/

File diff suppressed because it is too large Load Diff

View File

@ -1,52 +0,0 @@
{
"version": 2,
"dgSpecHash": "txRMsA4BjmCk2iCx9W46PczSZ0GaJCkNKOobx6SK/uzt2sbt/jTboM3Q07JADBWy8hPwfpZqspriY8zteLQAzw==",
"success": false,
"projectFilePath": "/home/kim/code/innovenergy/new/csharp/app/API/API.csproj",
"expectedPackageFiles": [
"/home/kim/.nuget/packages/bouncycastle/1.8.9/bouncycastle.1.8.9.nupkg.sha512",
"/home/kim/.nuget/packages/cliwrap/3.3.1/cliwrap.3.3.1.nupkg.sha512",
"/home/kim/.nuget/packages/decimalmath.decimalex/1.0.2/decimalmath.decimalex.1.0.2.nupkg.sha512",
"/home/kim/.nuget/packages/flurl/3.0.4/flurl.3.0.4.nupkg.sha512",
"/home/kim/.nuget/packages/flurl.http/3.2.2/flurl.http.3.2.2.nupkg.sha512",
"/home/kim/.nuget/packages/microsoft.netcore.platforms/2.1.2/microsoft.netcore.platforms.2.1.2.nupkg.sha512",
"/home/kim/.nuget/packages/newtonsoft.json/13.0.1/newtonsoft.json.13.0.1.nupkg.sha512",
"/home/kim/.nuget/packages/sharpziplib/1.3.3/sharpziplib.1.3.3.nupkg.sha512",
"/home/kim/.nuget/packages/sqlite-net-pcl/1.8.116/sqlite-net-pcl.1.8.116.nupkg.sha512",
"/home/kim/.nuget/packages/sqlitepclraw.bundle_green/2.0.4/sqlitepclraw.bundle_green.2.0.4.nupkg.sha512",
"/home/kim/.nuget/packages/sqlitepclraw.core/2.0.4/sqlitepclraw.core.2.0.4.nupkg.sha512",
"/home/kim/.nuget/packages/sqlitepclraw.lib.e_sqlite3/2.0.4/sqlitepclraw.lib.e_sqlite3.2.0.4.nupkg.sha512",
"/home/kim/.nuget/packages/sqlitepclraw.provider.dynamic_cdecl/2.0.4/sqlitepclraw.provider.dynamic_cdecl.2.0.4.nupkg.sha512",
"/home/kim/.nuget/packages/system.memory/4.5.3/system.memory.4.5.3.nupkg.sha512",
"/home/kim/.nuget/packages/system.reactive/5.0.0/system.reactive.5.0.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.reactive.linq/5.0.0/system.reactive.linq.5.0.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.reflection.emit/4.7.0/system.reflection.emit.4.7.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.security.principal.windows/4.7.0/system.security.principal.windows.4.7.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.text.encoding.codepages/4.5.1/system.text.encoding.codepages.4.5.1.nupkg.sha512",
"/home/kim/.nuget/packages/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg.sha512",
"/home/kim/.nuget/packages/system.text.json/6.0.2/system.text.json.6.0.2.nupkg.sha512",
"/home/kim/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512"
],
"logs": [
{
"code": "NU1104",
"level": "Error",
"message": "Unable to find project '/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj'. Check that the project reference is valid and that the project file exists.",
"libraryId": "/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj",
"targetGraphs": [
"net6.0"
]
},
{
"code": "NU1701",
"level": "Warning",
"warningLevel": 1,
"message": "Package 'BouncyCastle 1.8.9' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8' instead of the project target framework 'net6.0'. This package may not be fully compatible with your project.",
"libraryId": "BouncyCastle",
"targetGraphs": [
"net6.0"
]
}
]
}

View File

@ -1 +0,0 @@
"restore":{"projectUniqueName":"/home/kim/code/innovenergy/new/csharp/app/API/API.csproj","projectName":"API","projectPath":"/home/kim/code/innovenergy/new/csharp/app/API/API.csproj","outputPath":"/home/kim/code/innovenergy/new/csharp/app/API/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net6.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net6.0":{"targetAlias":"net6.0","projectReferences":{"/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/app/OpenVpnCertificatesServer/OpenVpnCertificatesServer.csproj"},"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/Utils/Utils.csproj"},"/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/Victron/VictronVRM/VictronVRM.csproj"},"/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/VictronVRM/VictronVRM.csproj"},"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj":{"projectPath":"/home/kim/code/innovenergy/new/csharp/lib/WebServer/WebServer.csproj"}}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net6.0":{"targetAlias":"net6.0","dependencies":{"Newtonsoft.Json":{"target":"Package","version":"[13.0.1, )"},"sqlite-net-pcl":{"target":"Package","version":"[1.8.116, )"}},"imports":["net461","net462","net47","net471","net472","net48"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/lib/dotnet/sdk/6.0.113/RuntimeIdentifierGraph.json"}}

View File

@ -1 +0,0 @@
16769731911267901

View File

@ -6,10 +6,10 @@ using Backend.Model;
using Backend.Model.Relations; using Backend.Model.Relations;
using Backend.Utils; using Backend.Utils;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using HttpContextAccessor = Microsoft.AspNetCore.Http.HttpContextAccessor;
namespace Backend.Controllers; namespace Backend.Controllers;
[ApiController] [ApiController]
[Route("api/")] [Route("api/")]
public class Controller public class Controller
@ -17,31 +17,35 @@ public class Controller
[ProducesResponseType(200)] [ProducesResponseType(200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpPost($"{nameof(Login)}")] [HttpPost($"{nameof(Login)}")]
public Object Login(JsonElement usernamepass) public Object Login(Credentials credentials)
{ {
usernamepass.TryGetProperty("username", out var usr); if (String.IsNullOrWhiteSpace(credentials.Username) ||
usernamepass.TryGetProperty("password", out var pwd); String.IsNullOrWhiteSpace(credentials.Password))
var username = usr.ToString();
var password = pwd.ToString();
if (username is null || username == "" || password == "" || password is null)
return new HttpResponseMessage(HttpStatusCode.BadRequest); return new HttpResponseMessage(HttpStatusCode.BadRequest);
using var db = Db.Connect(); using var db = Db.Connect();
var user = db.GetUserByEmail(username); var user = db.GetUserByEmail(credentials.Username);
var hashedPassword = Crypto.ComputeHash(Encoding.UTF8.GetBytes(password),
Encoding.UTF8.GetBytes(user.Salt + "innovEnergy"));
//Same error as to not communicate if a user exists or not if (user is null)
if (user is null || user.Password != hashedPassword)
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
// if (!VerifyPassword(password, user))
// return new HttpResponseMessage(HttpStatusCode.Unauthorized);
var ses = new Session(user); var ses = new Session(user);
db.NewSession(ses); db.NewSession(ses);
return ses.Token; return ses.Token;
} }
private static Boolean VerifyPassword(String password, User user)
{
var pwdBytes = Encoding.UTF8.GetBytes(password);
var saltBytes = Encoding.UTF8.GetBytes(user.Salt + "innovEnergy");
var pwdHash = Crypto.ComputeHash(pwdBytes, saltBytes);
return user.Password == pwdHash;
}
[ProducesResponseType(200)] [ProducesResponseType(200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpPost($"{nameof(Logout)}")] [HttpPost($"{nameof(Logout)}")]
@ -72,7 +76,7 @@ public class Controller
} }
[ProducesResponseType(200)] [ProducesResponseType(typeof(User), 200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpGet($"{nameof(GetUserById)}")] [HttpGet($"{nameof(GetUserById)}")]
public Object GetUserById(Int64 id) public Object GetUserById(Int64 id)
@ -88,9 +92,9 @@ public class Controller
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return viewedUser; return viewedUser;
} }
[ProducesResponseType(200)] [ProducesResponseType(typeof(Installation), 200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpGet($"{nameof(GetInstallationById)}")] [HttpGet($"{nameof(GetInstallationById)}")]
public Object GetInstallationById(Int64 id) public Object GetInstallationById(Int64 id)
@ -99,17 +103,21 @@ public class Controller
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect(); using var db = Db.Connect();
var currentUser = (User)ctx.Items["User"]; var currentUser = (User)ctx.Items["User"];
var installation = db.GetInstallationById(id);
if(currentUser==null if (currentUser == null)
|| db.GetAllAccessibleInstallationIds(currentUser).ToList().Contains(id)) return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return installation == null ? new HttpResponseMessage(HttpStatusCode.NotFound)
: installation; var installation = db
.GetAllAccessibleInstallations(currentUser)
.FirstOrDefault(i => i.Id == id);
return new HttpResponseMessage(HttpStatusCode.Unauthorized); if (installation is null)
return new HttpResponseMessage(HttpStatusCode.NotFound);
return installation;
} }
[ProducesResponseType(200)] [ProducesResponseType(typeof(Folder), 200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpGet($"{nameof(GetFolderById)}")] [HttpGet($"{nameof(GetFolderById)}")]
public Object GetFolderById(Int64 id) public Object GetFolderById(Int64 id)
@ -118,14 +126,15 @@ public class Controller
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect(); using var db = Db.Connect();
var currentUser = (User)ctx.Items["User"]; var currentUser = (User)ctx.Items["User"];
var folder = db.GetFolderById(id);
if(currentUser==null
|| db.GetAllAccessibleFolderIds(currentUser).ToList().Contains(id))
return folder == null ? new HttpResponseMessage(HttpStatusCode.NotFound)
: folder;
return new HttpResponseMessage(HttpStatusCode.Unauthorized); var folder = db
.GetAllAccessibleFolders(currentUser!)
.FirstOrDefault(f => f.Id == id);
if(folder is null)
return new HttpResponseMessage(HttpStatusCode.NotFound);
return folder;
} }
[ProducesResponseType(200)] [ProducesResponseType(200)]
@ -137,10 +146,11 @@ public class Controller
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect(); using var db = Db.Connect();
var user = (User)ctx.Items["User"]; var user = (User)ctx.Items["User"];
if (user == null)
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
if (user != null) return db.GetAllAccessibleInstallations(user).ToList(); return db.GetAllAccessibleInstallations(user).ToList();
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
} }
[ProducesResponseType(200)] [ProducesResponseType(200)]
@ -149,13 +159,15 @@ public class Controller
public Object GetAllFolders() public Object GetAllFolders()
{ {
var ctxAccessor = new HttpContextAccessor(); var ctxAccessor = new HttpContextAccessor();
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect();
var user = (User)ctx.Items["User"]; var user = (User)ctx.Items["User"];
if (user != null) return db.GetAllAccessibleFolders(user).ToList(); using var db = Db.Connect();
if (user == null)
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return db.GetAllAccessibleFolders(user).ToList();
} }
[ProducesResponseType(200)] [ProducesResponseType(200)]
@ -181,21 +193,26 @@ public class Controller
{ {
var ctxAccessor = new HttpContextAccessor(); var ctxAccessor = new HttpContextAccessor();
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect();
var currentUser = (User)ctx.Items["User"]; var currentUser = (User)ctx.Items["User"];
if (currentUser == null || !currentUser.HasWriteAccess) if (currentUser == null || !currentUser.HasWriteAccess)
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
using var db = Db.Connect();
if(db.GetAllAccessibleInstallationIds(currentUser).ToList().Contains(updatedInstallation.Id)) var hasAccess = db.GetAllAccessibleInstallations(currentUser)
return db.GetInstallationById(updatedInstallation.Id) == null .Any(i => i.Id == updatedInstallation.Id);
? new HttpResponseMessage(HttpStatusCode.Unauthorized) if (!hasAccess)
: db.UpdateInstallation(updatedInstallation); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
// TODO: accessibility by other users etc
// TODO: sanity check changes
db.AddToAccessibleInstallations(currentUser.Id, updatedInstallation.Id); return db.UpdateInstallation(updatedInstallation);
return db.CreateInstallation(updatedInstallation);
} }
[ProducesResponseType(200)] [ProducesResponseType(200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpPut($"{nameof(UpdateFolder)}/")] [HttpPut($"{nameof(UpdateFolder)}/")]
@ -209,13 +226,16 @@ public class Controller
if (currentUser == null || !currentUser.HasWriteAccess) if (currentUser == null || !currentUser.HasWriteAccess)
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
if(db.GetAllAccessibleFolderIds(currentUser).ToList().Contains(updatedFolder.Id)) var hasAccess = db.GetAllAccessibleFolders(currentUser)
return db.GetFolderById(updatedFolder.Id) == null .Any(f => f.Id == updatedFolder.Id);
? new HttpResponseMessage(HttpStatusCode.Unauthorized)
: db.UpdateFolder(updatedFolder); if (!hasAccess)
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
db.AddToAccessibleFolders(currentUser.Id, updatedFolder.Id); // TODO: accessibility by other users etc
return db.CreateFolder(updatedFolder); // TODO: sanity check changes
return db.UpdateFolder(updatedFolder);
} }
[ProducesResponseType(200)] [ProducesResponseType(200)]
@ -241,18 +261,18 @@ public class Controller
[ProducesResponseType(200)] [ProducesResponseType(200)]
[ProducesResponseType(401)] [ProducesResponseType(401)]
[HttpDelete($"{nameof(DeleteInstallation)}/")] [HttpDelete($"{nameof(DeleteInstallation)}/")]
public Object DeleteInstallation(Int64 installationId) public Object DeleteInstallation(Int64 idOfInstallationToBeDeleted)
{ {
var ctxAccessor = new HttpContextAccessor(); var ctxAccessor = new HttpContextAccessor();
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect(); using var db = Db.Connect();
var currentUser = (User)ctx.Items["User"]; var currentUser = (User)ctx.Items["User"];
var installationToBeDeleted = db.GetInstallationById(installationId);
var installationToBeDeleted = db
.GetAllAccessibleInstallations(currentUser!)
.FirstOrDefault(i => i.Id == idOfInstallationToBeDeleted);
if (currentUser == null if (installationToBeDeleted is null)
|| installationToBeDeleted == null
|| !currentUser.HasWriteAccess
|| !db.GetAllAccessibleInstallationIds(currentUser).ToList().Contains(installationToBeDeleted.Id))
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return db.DeleteInstallation(installationToBeDeleted); return db.DeleteInstallation(installationToBeDeleted);
@ -267,15 +287,15 @@ public class Controller
var ctx = ctxAccessor.HttpContext; var ctx = ctxAccessor.HttpContext;
using var db = Db.Connect(); using var db = Db.Connect();
var currentUser = (User)ctx.Items["User"]; var currentUser = (User)ctx.Items["User"];
var folderToBeDeleted = db.GetFolderById(folderId);
var folderToDelete = db
.GetAllAccessibleFolders(currentUser!)
.FirstOrDefault(f => f.Id == folderId);
if (currentUser == null if (folderToDelete is null)
|| folderToBeDeleted == null
|| !currentUser.HasWriteAccess
|| !db.GetAllAccessibleFolderIds(currentUser).ToList().Contains(folderToBeDeleted.Id))
return new HttpResponseMessage(HttpStatusCode.Unauthorized); return new HttpResponseMessage(HttpStatusCode.Unauthorized);
return db.DeleteFolder(folderToBeDeleted); return db.DeleteFolder(folderToDelete);
} }

View File

@ -0,0 +1,3 @@
namespace Backend.Controllers;
public record Credentials(String Username, String Password);

View File

@ -97,29 +97,14 @@ public partial class Db : IDisposable
return direct.Concat(fromFolders); return direct.Concat(fromFolders);
} }
public IEnumerable<Int64> GetAllAccessibleInstallationIds(User user)
{
var direct = GetDirectlyAccessibleInstallationIds(user);
var fromFolders = GetAllAccessibleFolders(user)
.SelectMany(GetChildInstallations)
.Select(installation => installation.Id);
return direct.Concat(fromFolders);
}
public IEnumerable<Folder> GetAllAccessibleFolders(User user) public IEnumerable<Folder> GetAllAccessibleFolders(User user)
{ {
return GetDirectlyAccessibleFolders(user) return GetDirectlyAccessibleFolders(user)
.SelectMany(GetDescendantFolders); .SelectMany(GetDescendantFolders);
} }
public IEnumerable<Int64> GetAllAccessibleFolderIds(User user)
{
return GetDirectlyAccessibleFolders(user)
.SelectMany(GetDescendantFolders)
.Select(folder => folder.Id );
}
public IEnumerable<Installation> GetDirectlyAccessibleInstallations(User user) public IEnumerable<Installation> GetDirectlyAccessibleInstallations(User user)
{ {
return User2Installation return User2Installation
@ -129,14 +114,6 @@ public partial class Db : IDisposable
.NotNull(); .NotNull();
} }
public IEnumerable<Int64> GetDirectlyAccessibleInstallationIds(User user)
{
return User2Installation
.Where(r => r.UserId == user.Id)
.Select(r => r.InstallationId)
.NotNull<Int64>();
}
public IEnumerable<Folder> GetDirectlyAccessibleFolders(User user) public IEnumerable<Folder> GetDirectlyAccessibleFolders(User user)
{ {
return User2Folder return User2Folder
@ -148,10 +125,12 @@ public partial class Db : IDisposable
public Result AddToAccessibleInstallations(Int64 userId, Int64 updatedInstallationId) public Result AddToAccessibleInstallations(Int64 userId, Int64 updatedInstallationId)
{ {
var con = new User2Installation(); var con = new User2Installation
con.UserId = userId; {
con.InstallationId = updatedInstallationId; UserId = userId,
InstallationId = updatedInstallationId
};
try try
{ {
_Db.InsertOrReplace(con); _Db.InsertOrReplace(con);
@ -166,10 +145,12 @@ public partial class Db : IDisposable
public Result AddToAccessibleFolders(Int64 userId, Int64 updatedFolderId) public Result AddToAccessibleFolders(Int64 userId, Int64 updatedFolderId)
{ {
var con = new User2Folder(); var con = new User2Folder
con.UserId = userId; {
con.FolderId = updatedFolderId; UserId = userId,
FolderId = updatedFolderId
};
try try
{ {
_Db.InsertOrReplace(con); _Db.InsertOrReplace(con);
@ -213,9 +194,7 @@ public partial class Db : IDisposable
{ {
try try
{ {
Sessions Sessions.Delete(u => u.UserId == id);
.Where(u => u.UserId == id)
.Delete();
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -65,9 +65,10 @@ public partial class Db
_Db.Delete(uf); _Db.Delete(uf);
var nFolders = NbFolders; var nFolders = NbFolders;
var nUsers = NbUsers;
foreach (var user in Users) foreach (var user in Users)
while (Random.Shared.Next(5) != 0) while (Random.Shared.Next((Int32)(nUsers - user.Id + 1)) != 0)
{ {
var relation = new User2Folder var relation = new User2Folder
{ {

View File

@ -21,19 +21,20 @@ public partial class Db
//return PopulateDescendants(folder); //return PopulateDescendants(folder);
} }
public IEnumerable<Folder> GetChildFolders(Folder folder) public IEnumerable<Folder> GetChildFolders(Folder parent)
{ {
return Folders.Where(f => f.ParentId == f.Id); return Folders.Where(f => f.ParentId == parent.Id);
} }
public IEnumerable<Folder> GetDescendantFolders(Folder folder)
public IEnumerable<Folder> GetDescendantFolders(Folder parent)
{ {
return folder.Traverse(GetChildFolders); return parent.Traverse(GetChildFolders);
} }
public IEnumerable<Installation> GetChildInstallations(Folder folder) public IEnumerable<Installation> GetChildInstallations(Folder parent)
{ {
return Installations.Where(f => f.ParentId == f.Id); return Installations.Where(f => f.ParentId == parent.Id);
} }
@ -63,18 +64,14 @@ public partial class Db
public Result DeleteFolder(Folder folder) public Result DeleteFolder(Folder folder)
{ {
// Delete direct children
User2Folder User2Folder .Delete(f => f.FolderId == folder.Id);
.Where(f => f.FolderId == folder.Id) Installations.Delete(i => i.ParentId == folder.Id);
.Delete();
// recursion
Folders.Where(f => f.ParentId == folder.Id)
.ForEach(DeleteFolder);
// TODO: delete descendants? Here they are just adopted one level up
foreach (var l in Installations
.Where(i => i.ParentId == folder.Id))
{
ChangeParent(l, folder.ParentId);
}
return Delete(folder); return Delete(folder);
} }

View File

@ -24,11 +24,10 @@ public partial class Db
return Update(installation); return Update(installation);
} }
public Result DeleteInstallation(Installation installation) public Result DeleteInstallation(Installation installation)
{ {
User2Installation User2Installation.Delete(i => i.InstallationId == installation.Id);
.Where(i => i.InstallationId == installation.Id)
.Delete();
return Delete(installation); return Delete(installation);
} }

View File

@ -107,24 +107,24 @@ public partial class Db
return Result.Error("User doesn't exist"); return Result.Error("User doesn't exist");
//Checking for unchangeable things //Checking for unchangeable things
user.Id = oldUser.Id; // TODO: depends on privileges of caller
user.Id = oldUser.Id;
user.ParentId = oldUser.ParentId; user.ParentId = oldUser.ParentId;
user.Email = oldUser.Email; user.Email = oldUser.Email;
return Update(user); return Update(user);
} }
public Result DeleteUser(User user) public Result DeleteUser(User user)
{ {
User2Folder User2Folder .Delete(u => u.UserId == user.Id);
.Where(u => u.UserId == user.Id) User2Installation.Delete(u => u.UserId == user.Id);
.Delete();
User2Installation
.Where(u => u.UserId == user.Id)
.Delete();
//Todo check for orphaned Installations/Folders //Todo check for orphaned Installations/Folders
// GetChildUsers()
return Delete(user); return Delete(user);
} }

View File

@ -1 +0,0 @@
Backend.csproj Controllers/Controller.cs Controllers/DatabaseHandler.cs Models/Folder.cs Models/Installation.cs Models/Token.cs Models/User.cs Program.cs Properties/launchSettings.json ServerFunctions/RequestJsonGetters.cs ServerFunctions/ServerFunctions.cs appsettings.Development.json appsettings.json identifier.sqlite

View File

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

View File

@ -1,12 +0,0 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"ConnectionString" : "Data Source=identifier.sqlite;"
}
}

File diff suppressed because it is too large Load Diff

View File

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

View File

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

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