Something went wrong. Try again.
small gleam coding and persistent agent daemon with a detachable cli and a canvas ui forked from okami.mom/albedo
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103package cli
import ( "context" "errors" "fmt" "os" "path/filepath" "strconv" "time"
"albedo/cli/internal/config" "albedo/cli/internal/daemon" "albedo/cli/internal/webui" "github.com/spf13/cobra")
func managedWeb(cmd *cobra.Command, deps Dependencies, service loginService, options webui.Options, save, stop, rotate, noOpen, installed bool) error { ctx, out := cmd.Context(), cmd.OutOrStdout() if stop { if err := service.stop(ctx); err != nil { return err } fmt.Fprintln(out, "stopped albedo web. it will return at the next login; forget it with: albedo web --save") return nil } if installed && !save && (cmd.Flags().Changed("allow") || cmd.Flags().Changed("port") || cmd.Flags().Changed("local") || cmd.Flags().Changed("public-url") || cmd.Flags().Changed("tailnet-https")) { return errors.New("albedo web has a login service; use --save to change its networks or port, or albedo web --save to forget it") } if save && (options.Public != "" || options.TailnetHTTPS) { return errors.New("the web login service does not save --public-url or --tailnet-https") } for _, text := range options.Allow { if _, err := webui.ParseNetwork(text); err != nil { return err } } conn, err := deps.Application.Connect(ctx) if err != nil { return err } if save { settings, settingsErr := daemon.GetSettings(ctx, conn) if settingsErr != nil { return settingsErr } if err = daemon.SaveWebAllow(ctx, conn, settings.UI.ETag, options.Allow); err != nil { return fmt.Errorf("cannot save the allowed networks: %w", err) } if installed { if err = service.remove(ctx); err != nil { return err } } else if manifest, readErr := webui.ReadManifest(webui.ManifestPath()); readErr == nil && webui.ManifestAlive(manifest) { if err = stopDetached(manifest.PID); err != nil { return err } } if len(options.Allow) == 0 { fmt.Fprintln(out, "forgot the web networks and removed its login service.") return nil } } if rotate { if err = service.stop(ctx); err != nil { return err } if err = os.Remove(webui.KeyPath()); err != nil && !os.IsNotExist(err) { return err } } if save { if err = service.install(ctx, "--no-open", "--port", strconv.Itoa(options.Port)); err != nil { return err } } else if err = service.start(ctx); err != nil { return err } ctx, cancel := context.WithTimeout(ctx, webGrace) defer cancel() ticker := time.NewTicker(25 * time.Millisecond) defer ticker.Stop() var manifest webui.Manifest for { manifest, err = webui.ReadManifest(webui.ManifestPath()) if err == nil && webui.ManifestAlive(manifest) { break } select { case <-ctx.Done(): return fmt.Errorf("web login service did not start (check %s): %w", filepath.Join(config.HomeDir(), "web.log"), ctx.Err()) case <-ticker.C: } } key, err := os.ReadFile(webui.KeyPath()) if err != nil { return err } fmt.Fprintln(out, "albedo web is running through its login service.") fmt.Fprint(out, serviceLingerNote(ctx)) return printWebLinks(cmd, deps, string(key), manifest, noOpen)}