@@ -3,14 +3,14 @@ package main
33import (
44 "fmt"
55 "os"
6- "path/filepath"
76 "strings"
87 "time"
98
109 "github.com/kardianos/service"
1110
1211 "uni-token-service/discovery"
1312 "uni-token-service/logic"
13+ urlScheme "uni-token-service/logic/url_scheme"
1414 "uni-token-service/server"
1515 "uni-token-service/store"
1616)
@@ -94,44 +94,23 @@ func main() {
9494 }
9595 command := os .Args [1 ]
9696
97- if command == "sudo" {
98- command , err := filepath .Abs (os .Args [0 ])
99- if err != nil {
100- panic (err )
101- }
102- for _ , arg := range os .Args [2 :] {
103- command += " " + arg
104- }
105-
106- res , err := logic .SudoExec (command , & logic.SudoOptions {
107- Name : serviceDisplayName ,
108- })
109- if err != nil {
110- panic (err )
111- }
112- if res .Stdout != "" {
113- fmt .Println (res .Stdout )
114- }
115- if res .Stderr != "" {
116- fmt .Println (res .Stderr )
117- }
97+ if command == "version" {
98+ fmt .Printf ("Service Version: %d\n " , logic .GetVersion ())
11899 return
119100 }
120101
121- if command == "version " {
122- fmt . Printf ( "Service Version: %d \n " , logic . GetVersion () )
102+ if command == "url " {
103+ handleUrlScheme ( os . Args [ 2 ] )
123104 return
124105 }
125106
126107 if command == "setup" {
127- err = service .Control (s , "install" )
128- if err != nil && ! strings .Contains (err .Error (), "already exists" ) {
129- fmt .Println ("Failed to install service:" , err )
130- }
131- err = service .Control (s , "start" )
132- if err != nil {
133- panic (err )
134- }
108+ handleSetup ()
109+ return
110+ }
111+
112+ if command == "setup-in-sudo" {
113+ handleSetupInSudo (& s )
135114 return
136115 }
137116
@@ -142,3 +121,61 @@ func main() {
142121 panic (err )
143122 }
144123}
124+
125+ func handleSetup () {
126+ // Register URL scheme for the application
127+ err := urlScheme .RegisterURLScheme (urlScheme.UrlSchemeRegisterOption {
128+ Scheme : "uni-token" ,
129+ AppName : "UniToken" ,
130+ })
131+ if err != nil {
132+ panic (err )
133+ }
134+
135+ // Install and start the service
136+ execPath , err := os .Executable ()
137+ if err != nil {
138+ panic (err )
139+ }
140+ res , err := logic .SudoExec (
141+ execPath + " setup-in-sudo" ,
142+ & logic.SudoOptions {
143+ Name : serviceDisplayName ,
144+ },
145+ )
146+ if err != nil {
147+ panic (err )
148+ }
149+ if res .Stdout != "" {
150+ fmt .Println (res .Stdout )
151+ }
152+ if res .Stderr != "" {
153+ fmt .Println (res .Stderr )
154+ }
155+ }
156+
157+ func handleUrlScheme (url string ) {
158+ if ! strings .HasPrefix (url , "uni-token://" ) {
159+ fmt .Println ("Invalid URL scheme. Expected 'uni-token://'." )
160+ return
161+ }
162+ url = strings .TrimPrefix (url , "uni-token://" )
163+
164+ switch url {
165+ case "start" :
166+ handleSetup ()
167+ default :
168+ fmt .Printf ("Unknown URL action: %s\n " , url )
169+ }
170+ }
171+
172+ func handleSetupInSudo (s * service.Service ) {
173+ err := service .Control (* s , "install" )
174+ if err != nil && ! strings .Contains (err .Error (), "already exists" ) {
175+ fmt .Println ("Failed to install service:" , err )
176+ }
177+ err = service .Control (* s , "start" )
178+ if err != nil {
179+ panic (err )
180+ }
181+ }
0 commit comments