Add server sent events, change vfs structure, dark mode error pages and dark mode anonydrop
All checks were successful
Build and Deploy on Tag / build-arch (push) Successful in 14m44s
Build and Deploy on Tag / update-tap (push) Successful in 19s

This commit is contained in:
2026-04-30 07:04:45 -05:00
parent c55f0c0f4f
commit 86b062771a
13 changed files with 84 additions and 132 deletions

View File

@@ -13,7 +13,7 @@ jobs:
runs-on: arch-builder runs-on: arch-builder
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- run: pacman --noconfirm -Sy mbedtls curl - run: pacman --noconfirm -Sy mbedtls curl zip zig ninja
- run: pacman --config /opt/cross/ppc/pacman.conf --noconfirm -Sy mbedtls - run: pacman --config /opt/cross/ppc/pacman.conf --noconfirm -Sy mbedtls
- run: cp Packaging/Linux/PKGBUILD /home/build/PKGBUILD - run: cp Packaging/Linux/PKGBUILD /home/build/PKGBUILD
- run: cp Packaging/Linux/build-arch.sh /home/build/build-arch.sh - run: cp Packaging/Linux/build-arch.sh /home/build/build-arch.sh
@@ -21,6 +21,14 @@ jobs:
- run: chown build:build /home/build/PKGBUILD - run: chown build:build /home/build/PKGBUILD
- run: chown build:build /home/build/build-arch.sh - run: chown build:build /home/build/build-arch.sh
- run: su build -c /home/build/build-arch.sh - run: su build -c /home/build/build-arch.sh
- run: env -C Packaging/Tools bash build.sh
- uses: akkuman/gitea-release-action@v1
env:
NODE_OPTIONS: '--experimental-fetch' # if nodejs < 18
with:
prerelease: true
files: |-
artifacts/**
update-tap: update-tap:
runs-on: ubuntu-latest runs-on: ubuntu-latest

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ builds
.vscode .vscode
out out
/.vs /.vs
artifacts

View File

@@ -137,11 +137,6 @@ else()
target_compile_definitions(TessesFramework PUBLIC TESSESFRAMEWORK_CERT_BUNDLE_FILE=${TESSESFRAMEWORK_CERT_BUNDLE_FILE}) target_compile_definitions(TessesFramework PUBLIC TESSESFRAMEWORK_CERT_BUNDLE_FILE=${TESSESFRAMEWORK_CERT_BUNDLE_FILE})
endif() endif()
if(NOT TESSESFRAMEWORK_FETCHCONTENT) if(NOT TESSESFRAMEWORK_FETCHCONTENT)
if(MBEDTLS_DIR STREQUAL "")
else()
target_include_directories(${TessesFramework_TARGET} PUBLIC ${MBEDTLS_DIR}/include)
target_link_directories(${TessesFramework_TARGET} PUBLIC ${MBEDTLS_DIR}/lib)
endif()
target_link_libraries(${TessesFramework_TARGET} PUBLIC mbedtls mbedx509 mbedcrypto) target_link_libraries(${TessesFramework_TARGET} PUBLIC mbedtls mbedx509 mbedcrypto)
endif() endif()
endif() endif()
@@ -219,7 +214,7 @@ if(TESSESFRAMEWORK_FETCHCONTENT)
target_link_libraries(tessesframework_shared PUBLIC mbedtls mbedx509 mbedcrypto everest p256m) target_link_libraries(tessesframework_shared PUBLIC mbedtls mbedx509 mbedcrypto everest p256m)
else() else()
target_link_libraries(tessesframework_shared PUBLIC MbedTLS::mbedcrypto MbedTLS::mbedtls MbedTLS::mbedx509) target_link_libraries(tessesframework_shared PUBLIC mbedtls mbedx509 mbedcrypto)
endif() endif()
endif() endif()

View File

@@ -1,90 +0,0 @@
{
"version": 3,
"configurePresets": [
{
"name": "linux-debug",
"displayName": "Linux Debug",
"description": "Target the Windows Subsystem for Linux (WSL) or a remote Linux system.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" },
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
},
"vendor": { "microsoft.com/VisualStudioRemoteSettings/CMake/2.0": { "remoteSourceRootDir": "$env{HOME}/.vs/$ms{projectDirName}" } }
},
{
"name": "macos-debug",
"displayName": "macOS Debug",
"description": "Target a remote macOS system.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" },
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Darwin"
},
"vendor": { "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}" } }
},
{
"name": "windows-base",
"description": "Target Windows with the Visual Studio development environment.",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"installDir": "${sourceDir}/out/install/${presetName}",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe",
"TESSESFRAMEWORK_ENABLE_MBED": false,
"TESSESFRAMEWORK_FETCHCONTENT": false
},
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
}
},
{
"name": "x64-debug",
"displayName": "x64 Debug",
"description": "Target Windows (64-bit) with the Visual Studio development environment. (Debug)",
"inherits": "windows-base",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
},
{
"name": "x64-release",
"displayName": "x64 Release",
"description": "Target Windows (64-bit) with the Visual Studio development environment. (RelWithDebInfo)",
"inherits": "x64-debug",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
},
{
"name": "x86-debug",
"displayName": "x86 Debug",
"description": "Target Windows (32-bit) with the Visual Studio development environment. (Debug)",
"inherits": "windows-base",
"architecture": {
"value": "x86",
"strategy": "external"
},
"cacheVariables": { "CMAKE_BUILD_TYPE": "Debug" }
},
{
"name": "x86-release",
"displayName": "x86 Release",
"description": "Target Windows (32-bit) with the Visual Studio development environment. (RelWithDebInfo)",
"inherits": "x86-debug",
"cacheVariables": { "CMAKE_BUILD_TYPE": "Release" }
}
]
}

35
Packaging/Tools/build.sh Normal file
View File

@@ -0,0 +1,35 @@
mkdir -p ../../artifacts
mkdir -p builds
git clone --depth 1 https://git.tesses.org/tesses50/zig-cross builds/zig-cross
for tripple in x86_64-linux-musl x86-linux-musl aarch64-linux-musl arm-linux-musleabi riscv64-linux-musl powerpc-linux-musleabihf; do
export BUILDDIR=builds/$tripple
mkdir -p $BUILDDIR
cmake -S ../.. -B $BUILDDIR --toolchain $PWD/builds/zig-cross/$tripple\.cmake -DCMAKE_BUILD_TYPE=Release -DTESSESFRAMEWORK_INSTALL_DEVELOPMENT=OFF -DTESSESFRAMEWORK_ENABLE_EXAMPLES=OFF -DTESSESFRAMEWORK_ENABLE_SHARED=OFF -DTESSESFRAMEWORK_ENABLE_STATIC=ON -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++ -static -Wl,--strip-all" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja
cmake --build $BUILDDIR || exit 1
cmake --install $BUILDDIR --prefix $BUILDDIR/out
tar cvzf ../../artifacts/tessesframework-tools-$tripple\.tar.gz -C $BUILDDIR/out/ bin
done
for tripple in x86_64-windows-gnu x86-windows-gnu aarch64-windows-gnu; do
export BUILDDIR=builds/$tripple
mkdir -p $BUILDDIR
cmake -S ../.. -B $BUILDDIR --toolchain $PWD/builds/zig-cross/$tripple\.cmake -DCMAKE_BUILD_TYPE=Release -DTESSESFRAMEWORK_INSTALL_DEVELOPMENT=OFF -DTESSESFRAMEWORK_ENABLE_EXAMPLES=OFF -DTESSESFRAMEWORK_ENABLE_SHARED=OFF -DTESSESFRAMEWORK_ENABLE_STATIC=ON -DCMAKE_EXE_LINKER_FLAGS="-static-libgcc -static-libstdc++ -static -Wl,--strip-all" -DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja
cmake --build $BUILDDIR || exit 1
cmake --install $BUILDDIR --prefix $BUILDDIR/out
env -C $BUILDDIR/out zip -r ../../../../../artifacts/tessesframework-tools-$tripple\.zip bin
done
for tripple in x86_64-macos-none aarch64-macos-none; do
export BUILDDIR=builds/$tripple
mkdir -p $BUILDDIR
cmake -S ../.. -B $BUILDDIR --toolchain $PWD/builds/zig-cross/$tripple\.cmake -DCMAKE_BUILD_TYPE=Release -DTESSESFRAMEWORK_INSTALL_DEVELOPMENT=OFF -DTESSESFRAMEWORK_ENABLE_EXAMPLES=OFF -DTESSESFRAMEWORK_ENABLE_SHARED=OFF -DTESSESFRAMEWORK_ENABLE_STATIC=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -GNinja -DCMAKE_EXE_LINKER_FLAGS="-Wl,--strip-all"
cmake --build $BUILDDIR || exit 1
cmake --install $BUILDDIR --prefix $BUILDDIR/out
tar cvzf ../../artifacts/tessesframework-tools-$tripple\.tar.gz -C $BUILDDIR/out/ bin
done

View File

@@ -50,7 +50,7 @@ int main(int argc, char** argv)
.SendText( .SendText(
"<!DOCTYPE html>" "<!DOCTYPE html>"
"<html>" "<html>"
"<head><title>AnonyDrop - Uploaded successfully</title>" "<head><meta name=\"color-scheme\" content=\"dark light\"><title>AnonyDrop - Uploaded successfully</title></head>"
"<body>" "<body>"
"<h1>Uploaded successfully</h1>" "<h1>Uploaded successfully</h1>"
"<a href=\"./\">Back</a>" "<a href=\"./\">Back</a>"

View File

@@ -33,9 +33,17 @@ namespace Tesses::Framework::Filesystem
#endif #endif
bool LocalFilesystem::Stat(VFSPath path, StatData& sfs) bool LocalFilesystem::Stat(VFSPath path, StatData& sfs)
{ {
std::string s = VFSPathToSystem(path); std::string s = VFSPathToSystem(path);
#if defined(_WIN32)
struct __stat64 st;
if(_stat64(s.c_str(),&st) == 0)
#else
struct stat st; struct stat st;
if(stat(s.c_str(),&st) == 0) if(stat(s.c_str(),&st) == 0)
#endif
{ {
sfs.Device = (uint64_t)st.st_dev; sfs.Device = (uint64_t)st.st_dev;
@@ -46,8 +54,13 @@ namespace Tesses::Framework::Filesystem
sfs.GroupId = (uint32_t)st.st_gid; sfs.GroupId = (uint32_t)st.st_gid;
sfs.DeviceId = (uint64_t)st.st_rdev; sfs.DeviceId = (uint64_t)st.st_rdev;
sfs.Size = (uint64_t)st.st_size; sfs.Size = (uint64_t)st.st_size;
#if defined(_WIN32)
sfs.BlockSize = 512;
sfs.BlockCount = sfs.Size / sfs.BlockSize;
#else
sfs.BlockSize = (uint64_t)st.st_blksize; sfs.BlockSize = (uint64_t)st.st_blksize;
sfs.BlockCount = (uint64_t)st.st_blocks; sfs.BlockCount = (uint64_t)st.st_blocks;
#endif
sfs.LastAccess = Date::DateTime((int64_t)st.st_atime); sfs.LastAccess = Date::DateTime((int64_t)st.st_atime);
sfs.LastModified = Date::DateTime((int64_t)st.st_mtime); sfs.LastModified = Date::DateTime((int64_t)st.st_mtime);
sfs.LastStatus = Date::DateTime((int64_t)st.st_ctime); sfs.LastStatus = Date::DateTime((int64_t)st.st_ctime);

View File

@@ -493,7 +493,7 @@ namespace Tesses::Framework::Http
static bool parseUntillBoundaryEnd(std::shared_ptr<Tesses::Framework::Streams::Stream> src, std::shared_ptr<Tesses::Framework::Streams::Stream> dest, std::string boundary) static bool parseUntillBoundaryEnd(std::shared_ptr<Tesses::Framework::Streams::Stream> src, std::shared_ptr<Tesses::Framework::Streams::Stream> dest, std::string boundary)
{ {
bool hasMore=true; bool hasMore=true;
uint8_t* checkBuffer = new uint8_t[boundary.size()]; std::vector<uint8_t> checkBuffer(boundary.size());
int b; int b;
size_t i = 0; size_t i = 0;
@@ -558,8 +558,6 @@ namespace Tesses::Framework::Http
{ {
dest->Write(buffer,offsetInMem); dest->Write(buffer,offsetInMem);
} }
delete[] checkBuffer;
return hasMore; return hasMore;
} }
@@ -1128,10 +1126,9 @@ namespace Tesses::Framework::Http
if(ctx.requestHeaders.TryGetFirst("Content-Type",type) && type == "application/x-www-form-urlencoded" && ctx.requestHeaders.TryGetFirstInt("Content-Length",length)) if(ctx.requestHeaders.TryGetFirst("Content-Type",type) && type == "application/x-www-form-urlencoded" && ctx.requestHeaders.TryGetFirstInt("Content-Length",length))
{ {
size_t len = (size_t)length; size_t len = (size_t)length;
uint8_t* buffer = new uint8_t[len]; std::vector<uint8_t> buffer(len);
len = bStrm->ReadBlock(buffer,len); len = bStrm->ReadBlock(buffer.data(),len);
std::string query((const char*)buffer,len); std::string query((const char*)buffer.data(),len);
delete[] buffer;
HttpUtils::QueryParamsDecode(ctx.queryParams, query); HttpUtils::QueryParamsDecode(ctx.queryParams, query);
} }

View File

@@ -739,6 +739,7 @@ namespace Tesses::Framework::Streams {
} }
void NetworkStream::SetReusePort(bool reuse) void NetworkStream::SetReusePort(bool reuse)
{ {
#if !defined(_WIN32)
if(!this->success) return; if(!this->success) return;
int no = reuse ? 1 : 0; int no = reuse ? 1 : 0;
if (NETWORK_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEPORT, (const char*)&no, sizeof(no)) != 0) if (NETWORK_SETSOCKOPT(sock, SOL_SOCKET, SO_REUSEPORT, (const char*)&no, sizeof(no)) != 0)
@@ -748,6 +749,7 @@ namespace Tesses::Framework::Streams {
NETWORK_CLOSE(this->sock); NETWORK_CLOSE(this->sock);
} }
#endif
} }
void NetworkStream::SetMulticastTTL(uint8_t ttl) void NetworkStream::SetMulticastTTL(uint8_t ttl)
{ {

View File

@@ -108,36 +108,34 @@ namespace Tesses::Framework::Streams {
void Stream::CopyToLimit(std::shared_ptr<Stream> strm,uint64_t len, size_t buffSize) void Stream::CopyToLimit(std::shared_ptr<Stream> strm,uint64_t len, size_t buffSize)
{ {
size_t read; size_t read;
uint8_t* buffer = new uint8_t[buffSize]; std::vector<uint8_t> buffer(buffSize);
uint64_t offset = 0; uint64_t offset = 0;
do { do {
if(offset >= len) break; if(offset >= len) break;
read = (size_t)std::min(len-offset,(uint64_t)buffSize); read = (size_t)std::min(len-offset,(uint64_t)buffer.size());
read = this->Read(buffer,read); read = this->Read(buffer.data(),read);
strm->WriteBlock(buffer, read); strm->WriteBlock(buffer.data(), read);
offset += read; offset += read;
} while(read > 0 && !strm->EndOfStream()); } while(read > 0 && !strm->EndOfStream());
strm->Flush(); strm->Flush();
delete[] buffer;
} }
void Stream::CopyTo(std::shared_ptr<Stream> strm, size_t buffSize) void Stream::CopyTo(std::shared_ptr<Stream> strm, size_t buffSize)
{ {
size_t read; size_t read;
uint8_t* buffer = new uint8_t[buffSize]; std::vector<uint8_t> buffer(buffSize);
do { do {
read = this->Read(buffer,buffSize); read = this->Read(buffer.data(),buffer.size());
strm->WriteBlock(buffer, read); strm->WriteBlock(buffer.data(), read);
} while(read > 0 && !strm->EndOfStream()); } while(read > 0 && !strm->EndOfStream());
strm->Flush(); strm->Flush();
delete[] buffer;
} }
Stream::~Stream() Stream::~Stream()

View File

@@ -16,12 +16,12 @@ namespace Tesses::Framework::Text {
uint64_t total = 0; uint64_t total = 0;
size_t read; size_t read;
uint8_t* data = new uint8_t[BLK_SZ]; std::vector<uint8_t> data(BLK_SZ);
bool first=true; bool first=true;
do { do {
read = strm->ReadBlock(data, BLK_SZ); read = strm->ReadBlock(data.data(), data.size());
for(size_t i = 0; i < read; i++) for(size_t i = 0; i < read; i++)
{ {
@@ -33,7 +33,6 @@ namespace Tesses::Framework::Text {
} while(read != 0); } while(read != 0);
delete data;
writer->WriteLine("};"); writer->WriteLine("};");
writer->Write("const size_t "); writer->Write("const size_t ");

View File

@@ -9,23 +9,18 @@ namespace Tesses::Framework::TextStreams
} }
bool ConsoleReader::ReadBlock(std::string& str,size_t len) bool ConsoleReader::ReadBlock(std::string& str,size_t len)
{ {
#if defined(_WIN32) std::vector<uint8_t> buff(len);
uint8_t* buff = new uint8_t[len];
#else
uint8_t buff[len];
#endif
size_t read=0; size_t read=0;
size_t readTotal=0; size_t readTotal=0;
uint8_t* buffOff=buff; uint8_t* buffOff=buff.data();
do { do {
read=fread(buffOff,1,len,stdin); read=fread(buffOff,1,len,stdin);
if(read != 0) {readTotal+= read;len-=read; buffOff+=read;} if(read != 0) {readTotal+= read;len-=read; buffOff+=read;}
} while(read != 0); } while(read != 0);
if(readTotal == 0) return false; if(readTotal == 0) return false;
str.append((const char*)buff, readTotal); str.append((const char*)buff.data(), readTotal);
#if defined(_WIN32)
delete buff;
#endif
return true; return true;
} }

View File

@@ -30,13 +30,12 @@ namespace Tesses::Framework::TextStreams {
bool StreamReader::ReadBlock(std::string& str, size_t len) bool StreamReader::ReadBlock(std::string& str, size_t len)
{ {
uint8_t* buff = new uint8_t[len]; std::vector<uint8_t> buff(len);
len = strm->ReadBlock(buff,len); len = strm->ReadBlock(buff.data(),len);
if(len == 0) {delete buff; return false;} if(len == 0) { return false;}
str.append((const char*)buff, len); str.append((const char*)buff.data(), len);
delete buff;
return true; return true;
} }