wip: registration PDF, auth setup, CLI, Windows/Linux installers
This commit is contained in:
parent
c075478783
commit
4f1d90cf64
1 changed files with 1257 additions and 42 deletions
|
|
@ -21,6 +21,8 @@ func main() {
|
|||
switch os.Args[1] {
|
||||
case "stamp":
|
||||
os.Exit(runStamp(os.Args[2:]))
|
||||
case "setup", "login":
|
||||
os.Exit(runSetup())
|
||||
case "install-macos":
|
||||
os.Exit(runInstallMacOS(os.Args[2:]))
|
||||
case "install-printer":
|
||||
|
|
@ -30,9 +32,9 @@ func main() {
|
|||
case "help", "-h", "--help":
|
||||
usage()
|
||||
default:
|
||||
// PDF Services may invoke the binary with the PDF path as argv[1]
|
||||
if strings.HasSuffix(strings.ToLower(os.Args[1]), ".pdf") && fileExists(os.Args[1]) {
|
||||
os.Exit(runStamp([]string{"-channel", envOr("VERAE_PRINT_CHANNEL", "verae"), os.Args[1]}))
|
||||
// PDF Services / drop-target may invoke the binary with the file as argv[1]
|
||||
if fileExists(os.Args[1]) {
|
||||
os.Exit(runStamp([]string{"-channel", string(auth.PreferredChannel()), os.Args[1]}))
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "unknown command %q\n", os.Args[1])
|
||||
usage()
|
||||
|
|
@ -44,14 +46,18 @@ func usage() {
|
|||
fmt.Fprintf(os.Stderr, `verae-print %s — stamp a printed PDF with Verae (digests only)
|
||||
|
||||
Usage:
|
||||
verae-print setup # first run: create customer account + save xVerae- signing key
|
||||
verae-print stamp [--channel=verae|zapier] [--out-dir DIR] [--name STEM] [--open] <file.pdf>
|
||||
verae-print install-printer # Destination list: Verae Timestamping (recommended)
|
||||
verae-print install-macos # also install PDF Services menu items (legacy)
|
||||
verae-print version
|
||||
|
||||
First install opens https://customer.verae.ai/portal/ so you can create an account
|
||||
and mint an xVerae- signing key (Security tab). The key is stored in Keychain.
|
||||
|
||||
Channels:
|
||||
verae (default) api.veraetime.net + ~/.verae/auth.properties JWT
|
||||
zapier zap.verae.ai + xVerae- token (XVERAE_TOKEN / ~/.verae/xverae-token / Keychain)
|
||||
zapier (default) zap.verae.ai + customer xVerae- signing key
|
||||
verae api.veraetime.net + ~/.verae/auth.properties JWT
|
||||
|
||||
Outputs in --out-dir (default ~/Documents/Verae Timestamps):
|
||||
{name}.pdf
|
||||
|
|
@ -60,12 +66,27 @@ Outputs in --out-dir (default ~/Documents/Verae Timestamps):
|
|||
`, job.HelperVersion)
|
||||
}
|
||||
|
||||
func runSetup() int {
|
||||
if auth.HasXVeraeToken() {
|
||||
fmt.Println("Signing key already saved (xVerae-).")
|
||||
fmt.Println("Portal:", auth.PortalSignupURL)
|
||||
return 0
|
||||
}
|
||||
if err := auth.RunFirstRunSetup(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
return 1
|
||||
}
|
||||
fmt.Println("Signing key saved. Print → Destination → Verae Timestamping is ready.")
|
||||
return 0
|
||||
}
|
||||
|
||||
func runStamp(args []string) int {
|
||||
fs := flag.NewFlagSet("stamp", flag.ExitOnError)
|
||||
channel := fs.String("channel", envOr("VERAE_PRINT_CHANNEL", "verae"), "verae | zapier")
|
||||
channel := fs.String("channel", string(auth.PreferredChannel()), "verae | zapier")
|
||||
outDir := fs.String("out-dir", "", "output directory")
|
||||
name := fs.String("name", "", "document stem override")
|
||||
openFolder := fs.Bool("open", false, "open output folder on success (macOS)")
|
||||
skipSetup := fs.Bool("skip-setup", false, "do not open first-run account dialog")
|
||||
_ = fs.Parse(args)
|
||||
if fs.NArg() < 1 {
|
||||
fmt.Fprintln(os.Stderr, "stamp: PDF path required")
|
||||
|
|
@ -79,6 +100,19 @@ func runStamp(args []string) int {
|
|||
return 2
|
||||
}
|
||||
|
||||
// First-run: customer account + xVerae- signing key (preferred path)
|
||||
if ch == auth.ChannelZapier && !auth.HasXVeraeToken() {
|
||||
if *skipSetup {
|
||||
fmt.Fprintf(os.Stderr, "no xVerae- signing key — run: verae-print setup\nPortal: %s\n", auth.PortalSignupURL)
|
||||
return 1
|
||||
}
|
||||
if err := auth.EnsureReady(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
notify("Create a Verae customer account to get your signing key", auth.PortalSignupURL)
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
client := &veraeapi.Client{Channel: ch}
|
||||
switch ch {
|
||||
case auth.ChannelZapier:
|
||||
|
|
@ -91,7 +125,7 @@ func runStamp(args []string) int {
|
|||
default:
|
||||
tok, err := auth.LoadVeraeJWT()
|
||||
if err != nil {
|
||||
fmt.Fprintln(os.Stderr, err)
|
||||
fmt.Fprintf(os.Stderr, "%v\nTip: run verae-print setup to create a customer account and xVerae- key instead.\n", err)
|
||||
return 1
|
||||
}
|
||||
client.VeraeToken = tok
|
||||
|
|
|
|||
Loading…
Reference in a new issue