11package api
22
33import (
4+ "errors"
45 "net/http"
56
67 "github.com/semaphoreui/semaphore/api/helpers"
@@ -15,8 +16,10 @@ type SystemInfoController struct {
1516 subscriptionService pro_interfaces.SubscriptionService
1617}
1718
18- func NewSystemInfoController () * SystemInfoController {
19- return & SystemInfoController {}
19+ func NewSystemInfoController (subscriptionService pro_interfaces.SubscriptionService ) * SystemInfoController {
20+ return & SystemInfoController {
21+ subscriptionService ,
22+ }
2023}
2124
2225func (c * SystemInfoController ) GetSystemInfo (w http.ResponseWriter , r * http.Request ) {
@@ -47,20 +50,39 @@ func (c *SystemInfoController) GetSystemInfo(w http.ResponseWriter, r *http.Requ
4750 return
4851 }
4952
53+ var plan string
54+
5055 token , err := c .subscriptionService .GetToken ()
56+
57+ if errors .Is (err , db .ErrNotFound ) {
58+ err = nil
59+ }
60+
5161 if err != nil {
5262 log .WithError (err ).Error ("Failed to get subscription plan" )
5363 http .Error (w , http .StatusText (http .StatusInternalServerError ), http .StatusInternalServerError )
5464 return
5565 }
5666
67+ switch {
68+ case errors .Is (err , db .ErrNotFound ):
69+ err = nil
70+ plan = ""
71+ case err != nil :
72+ log .WithError (err ).Error ("Failed to get subscription plan" )
73+ http .Error (w , http .StatusText (http .StatusInternalServerError ), http .StatusInternalServerError )
74+ return
75+ default :
76+ plan = token .Plan
77+ }
78+
5779 body := map [string ]any {
5880 "version" : util .Version (),
5981 "ansible" : util .AnsibleVersion (),
6082 "web_host" : util .Config .WebHost ,
6183 "use_remote_runner" : util .Config .UseRemoteRunner ,
6284 "auth_methods" : authMethods ,
63- "premium_features" : proFeatures .GetFeatures (user , token . Plan ),
85+ "premium_features" : proFeatures .GetFeatures (user , plan ),
6486 "git_client" : util .Config .GitClientId ,
6587 "schedule_timezone" : timezone ,
6688 "teams" : util .Config .Teams ,
0 commit comments