hub

package
v0.0.0-...-59bb441 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 25, 2026 License: MIT Imports: 40 Imported by: 0

README

Besides the test files, the important stuff here is:

  • hub.go
  • hub.pf

hub.pf is the Pipefish service that the user talks to when they talk to the hub. hub.go actually inmplements it.

Much of the logic has to be in hub.go, with hub.pf a thin skin over the top, because there are lots of things that can only be done from Go and not from Pipefish, e.g. compiling and running Pipefish services. A few things would be better off in hub.pf but are in hub.go for historical reasons.

The way it works is that the hub.pf file has a type Hub wrapping io.Writer, and a variable initialized as HUB Hub? = NULL. On creation of the hub service, we inject an io.Writer into the variable, where the Write method tells the hub.pf to do the thing in question.

(The reason we do it this way rather than injecting the Go *hub.Hub object itself is that this requires the production of an .so file which takes over a minute to compile and is larger than the main executable.)

Documentation

Index

Constants

View Source
const HELP = "\nUsage: pipefish [-v | --version] [-h | --help]\n" +
	"                <command> [args]\n\n" +
	"Commands are:\n\n" +
	"  tui           Starts the Pipfish TUI (text user interface).\n" +
	"  run <file>    Runs a Pipefish script if it has a `main` command.\n\n"

Variables

View Source
var (
	MARGIN         = 92
	GREEN_OK       = ("\033[32mOK\033[0m")
	WAS            = Green("was") + ": "
	GOT            = Red("got") + ": "
	TEST_PASSED    = Green("Test passed!") + "\n"
	VERSION        = "0.6.8"
	BULLET         = "  ▪ "
	BULLET_SPACING = "    " // I.e. whitespace the same width as BULLET.
	GOOD_BULLET    = Green("  ▪ ")
	BROKEN         = Red("  ✖ ")
	PROMPT         = "→ "
	INDENT_PROMPT  = "  "
	ERROR          = text.ERROR
	RT_ERROR       = text.ERROR
	HUB_ERROR      = "<R>Hub error</>: "
)
View Source
var SqlDrivers = []string{"postgres", "firebirdsql", "mysql", "sqlserver", "mysql",
	"oracle", "postgres", "snowflake", "sqlite", "mysql"}

Matches with the enum above, e.g. COCKROACH_DB uses the postgres driver.

Functions

func AddAdmin

func AddAdmin(db *sql.DB, username, firstName, lastName, email, password string) error

func AddGroup

func AddGroup(db *sql.DB, groupName string) error

func AddUser

func AddUser(db *sql.DB, username, firstName, lastName, email, password string) error

func AddUserToGroup

func AddUserToGroup(db *sql.DB, username, groupName string, owner bool) error

func ChangePassword

func ChangePassword(db *sql.DB, username, newPassword string) error

func Cyan

func Cyan(s string) string

func DoesUserHaveAccess

func DoesUserHaveAccess(db *sql.DB, username, serviceName string) (bool, error)

func DropTables

func DropTables(db *sql.DB)

func GetDriverOptions

func GetDriverOptions() string

func GetGroupsOfService

func GetGroupsOfService(db *sql.DB, serviceName string) (string, error)

func GetGroupsOfUser

func GetGroupsOfUser(db *sql.DB, username string, ownGroups bool) (string, error)

func GetServicesOfGroup

func GetServicesOfGroup(db *sql.DB, groupName string) (string, error)

func GetServicesOfUser

func GetServicesOfUser(db *sql.DB, username string, ownServices bool) (string, error)

func GetSortedDrivers

func GetSortedDrivers() []string

func GetUsersOfGroup

func GetUsersOfGroup(db *sql.DB, groupName string) (string, error)

func GetUsersOfService

func GetUsersOfService(db *sql.DB, serviceName string) (string, error)

func GetdB

func GetdB(driverAsPipefishEnum, hostpath string, port int, hostname, user, password string) (*sql.DB, error)

func Green

func Green(s string) string

func IsUserAdmin

func IsUserAdmin(db *sql.DB, username string) (bool, error)

func IsUserGroupOwner

func IsUserGroupOwner(db *sql.DB, username, groupName string) error

func IsUserInGroup

func IsUserInGroup(db *sql.DB, username, groupName string) (bool, error)

func LetGroupUseService

func LetGroupUseService(db *sql.DB, groupName, serviceName string) error

func LetUserOwnGroup

func LetUserOwnGroup(db *sql.DB, username, groupName string) error
func Logo() string

func MakePassword

func MakePassword() string

func ReadChar

func ReadChar() rune

func Red

func Red(s string) string

func ServiceDo

func ServiceDo(serviceToUse *pf.Service, line string) pf.Value

func StartServiceFromCli

func StartServiceFromCli()

func UnAddUserToGroup

func UnAddUserToGroup(db *sql.DB, username, groupName string) error

func UnLetGroupUseService

func UnLetGroupUseService(db *sql.DB, groupName, serviceName string) error

func UnLetUserOwnGroup

func UnLetUserOwnGroup(db *sql.DB, username, groupName string) error

func ValidateEmail

func ValidateEmail(db *sql.DB, username, email string) error

func ValidateUser

func ValidateUser(db *sql.DB, username, password string) error

Types

type Hub

type Hub struct {
	Services map[string]*pf.Service // The services the hub knows about.

	Out     io.Writer
	Sources map[string][]string
	Db      *sql.DB

	// The username and password of the person logged into the terminal.
	TerminalUsername string
	TerminalPassword string
	// contains filtered or unexported fields
}

func New

func New(path string, out io.Writer) *Hub

func (*Hub) CurrentServiceIsBroken

func (hub *Hub) CurrentServiceIsBroken() bool

func (*Hub) Do

func (hub *Hub) Do(line, username, password, passedServiceName string, external bool) (string, bool)

This takes the input from the REPL, interprets it as a hub command if it begins with 'hub'; as an instruction to the os if it begins with 'os', and as an expression to be passed to the current service if none of the above hold.

func (*Hub) DoHubCommand

func (hub *Hub) DoHubCommand(line string)

func (*Hub) GetAndReportErrors

func (hub *Hub) GetAndReportErrors(sv *pf.Service)

func (*Hub) GetPretty

func (hub *Hub) GetPretty(s string) string

func (*Hub) MakeFilepath

func (h *Hub) MakeFilepath(scriptFilepath string) string

func (*Hub) OpenHubFile

func (h *Hub) OpenHubFile(hubFilepath string)

func (*Hub) Quit

func (hub *Hub) Quit()

func (*Hub) Repl

func (hub *Hub) Repl()

func (*Hub) SaveAndPropagateHubStore

func (hub *Hub) SaveAndPropagateHubStore()

func (*Hub) StartAndMakeCurrent

func (hub *Hub) StartAndMakeCurrent(username, serviceName, scriptFilepath string) bool

func (*Hub) StartHttp

func (h *Hub) StartHttp(args []string, isHttps bool)

func (*Hub) WriteError

func (hub *Hub) WriteError(s string)

func (*Hub) WritePretty

func (hub *Hub) WritePretty(s string)

func (*Hub) WriteString

func (hub *Hub) WriteString(s string)

type SQLDriver

type SQLDriver uint32
const (
	COCKROACHDB SQLDriver = iota
	FIREBIRD_SQL
	MARIADB
	MICROSOFT_SQL_SERVER
	MYSQL
	ORACLE
	POSTGRESQL
	SNOWFLAKE
	SQLITE
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL