diff --git a/ui/pages/signup.vue b/ui/pages/signup.vue
index 6e2700a..bbf2288 100644
--- a/ui/pages/signup.vue
+++ b/ui/pages/signup.vue
@@ -45,9 +45,9 @@ onUnmounted(() => {
Signup
-
-
-
+
+
+
{{ error }}
diff --git a/ui/types/user.ts b/ui/types/user.ts
index d1ad8d2..ca31ba9 100644
--- a/ui/types/user.ts
+++ b/ui/types/user.ts
@@ -2,11 +2,13 @@ export interface User {
id: string,
username: string,
email: string,
- plan: {
- id: number,
- max_storage: number
- },
+ plan: Plan,
usage: number,
created_at: string,
is_admin: boolean,
}
+
+export interface Plan {
+ id: number,
+ max_storage: number
+}
\ No newline at end of file
diff --git a/utils.go b/utils.go
new file mode 100644
index 0000000..23f93d4
--- /dev/null
+++ b/utils.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "os/exec"
+ "os/signal"
+ "syscall"
+
+ "github.com/labstack/echo/v4"
+)
+
+func spawnProcess(cmd string, args []string, e *echo.Echo) error {
+ shutdown := make(chan os.Signal, 1)
+ signal.Notify(shutdown, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
+ go func() {
+ cmd := exec.Command(cmd, args...)
+ cmd.Stderr = os.Stderr
+
+ // use a preocess group since otherwise the node processes spawned by bun wont die
+ cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}
+
+ err := cmd.Start()
+ if err != nil {
+ if err := syscall.Kill(-cmd.Process.Pid, syscall.SIGTERM); err != nil {
+ fmt.Println("Error sending SIGTERM to sub process group:", err)
+ }
+
+ fmt.Println("Error starting sub process:", err)
+ return
+ }
+
+ go func() {
+ <-shutdown
+
+ if err := syscall.Kill(-cmd.Process.Pid, syscall.SIGTERM); err != nil {
+ fmt.Println("Error sending SIGTERM to sub process group:", err)
+ }
+ }()
+
+ if err := cmd.Wait(); err != nil {
+ fmt.Println("Error waiting for sub process to exit:", err)
+ }
+
+ fmt.Println("sub process server stopped")
+
+ if err := e.Shutdown(context.Background()); err != nil {
+ fmt.Println("Error shutting down HTTP server:", err)
+ }
+ }()
+
+ return nil
+}