Skip to content

Commit 144d4e7

Browse files
misc: updated to use relay and connector terminologies
1 parent fc62acd commit 144d4e7

10 files changed

Lines changed: 658 additions & 631 deletions

File tree

packages/api/api.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ const (
3939
operationCallRegisterGatewayIdentityV1 = "CallRegisterGatewayIdentityV1"
4040
operationCallExchangeRelayCertV1 = "CallExchangeRelayCertV1"
4141
operationCallGatewayHeartBeatV1 = "CallGatewayHeartBeatV1"
42-
operationCallGatewayHeartBeatV2 = "CallGatewayHeartBeatV2"
42+
operationCallConnectorHeartBeat = "CallConnectorHeartBeat"
4343
operationCallBootstrapInstance = "CallBootstrapInstance"
44-
operationCallRegisterInstanceProxy = "CallRegisterInstanceProxy"
45-
operationCallRegisterOrgProxy = "CallRegisterOrgProxy"
44+
operationCallRegisterInstanceRelay = "CallRegisterInstanceRelay"
45+
operationCallRegisterOrgRelay = "CallRegisterOrgRelay"
4646
operationCallRegisterGateway = "CallRegisterGateway"
4747
)
4848

@@ -656,18 +656,18 @@ func CallGatewayHeartBeatV1(httpClient *resty.Client) error {
656656
return nil
657657
}
658658

659-
func CallGatewayHeartBeatV2(httpClient *resty.Client) error {
659+
func CallConnectorHeartBeat(httpClient *resty.Client) error {
660660
response, err := httpClient.
661661
R().
662662
SetHeader("User-Agent", USER_AGENT).
663-
Post(fmt.Sprintf("%v/v2/gateways/heartbeat", config.INFISICAL_URL))
663+
Post(fmt.Sprintf("%v/v1/connectors/heartbeat", config.INFISICAL_URL))
664664

665665
if err != nil {
666-
return NewGenericRequestError(operationCallGatewayHeartBeatV2, err)
666+
return NewGenericRequestError(operationCallConnectorHeartBeat, err)
667667
}
668668

669669
if response.IsError() {
670-
return NewAPIErrorWithResponse(operationCallGatewayHeartBeatV2, response, nil)
670+
return NewAPIErrorWithResponse(operationCallConnectorHeartBeat, response, nil)
671671
}
672672

673673
return nil
@@ -693,61 +693,61 @@ func CallBootstrapInstance(httpClient *resty.Client, request BootstrapInstanceRe
693693
return resBody, nil
694694
}
695695

696-
func CallRegisterInstanceProxy(httpClient *resty.Client, request RegisterProxyRequest) (RegisterProxyResponse, error) {
697-
var resBody RegisterProxyResponse
696+
func CallRegisterInstanceRelay(httpClient *resty.Client, request RegisterRelayRequest) (RegisterRelayResponse, error) {
697+
var resBody RegisterRelayResponse
698698
response, err := httpClient.
699699
R().
700700
SetResult(&resBody).
701701
SetHeader("User-Agent", USER_AGENT).
702702
SetBody(request).
703-
Post(fmt.Sprintf("%v/v1/proxies/register-instance-proxy", config.INFISICAL_URL))
703+
Post(fmt.Sprintf("%v/v1/relays/register-instance-relay", config.INFISICAL_URL))
704704

705705
if err != nil {
706-
return RegisterProxyResponse{}, NewGenericRequestError(operationCallRegisterInstanceProxy, err)
706+
return RegisterRelayResponse{}, NewGenericRequestError(operationCallRegisterInstanceRelay, err)
707707
}
708708

709709
if response.IsError() {
710-
return RegisterProxyResponse{}, NewAPIErrorWithResponse(operationCallRegisterInstanceProxy, response, nil)
710+
return RegisterRelayResponse{}, NewAPIErrorWithResponse(operationCallRegisterInstanceRelay, response, nil)
711711
}
712712

713713
return resBody, nil
714714
}
715715

716-
func CallRegisterProxy(httpClient *resty.Client, request RegisterProxyRequest) (RegisterProxyResponse, error) {
717-
var resBody RegisterProxyResponse
716+
func CallRegisterRelay(httpClient *resty.Client, request RegisterRelayRequest) (RegisterRelayResponse, error) {
717+
var resBody RegisterRelayResponse
718718
response, err := httpClient.
719719
R().
720720
SetResult(&resBody).
721721
SetHeader("User-Agent", USER_AGENT).
722722
SetBody(request).
723-
Post(fmt.Sprintf("%v/v1/proxies/register-org-proxy", config.INFISICAL_URL))
723+
Post(fmt.Sprintf("%v/v1/relays/register-org-relay", config.INFISICAL_URL))
724724

725725
if err != nil {
726-
return RegisterProxyResponse{}, NewGenericRequestError(operationCallRegisterOrgProxy, err)
726+
return RegisterRelayResponse{}, NewGenericRequestError(operationCallRegisterOrgRelay, err)
727727
}
728728

729729
if response.IsError() {
730-
return RegisterProxyResponse{}, NewAPIErrorWithResponse(operationCallRegisterOrgProxy, response, nil)
730+
return RegisterRelayResponse{}, NewAPIErrorWithResponse(operationCallRegisterOrgRelay, response, nil)
731731
}
732732

733733
return resBody, nil
734734
}
735735

736-
func CallRegisterGateway(httpClient *resty.Client, request RegisterGatewayRequest) (RegisterGatewayResponse, error) {
737-
var resBody RegisterGatewayResponse
736+
func CallRegisterConnector(httpClient *resty.Client, request RegisterConnectorRequest) (RegisterConnectorResponse, error) {
737+
var resBody RegisterConnectorResponse
738738
response, err := httpClient.
739739
R().
740740
SetResult(&resBody).
741741
SetHeader("User-Agent", USER_AGENT).
742742
SetBody(request).
743-
Post(fmt.Sprintf("%v/v2/gateways", config.INFISICAL_URL))
743+
Post(fmt.Sprintf("%v/v1/connectors", config.INFISICAL_URL))
744744

745745
if err != nil {
746-
return RegisterGatewayResponse{}, NewGenericRequestError(operationCallRegisterGateway, err)
746+
return RegisterConnectorResponse{}, NewGenericRequestError(operationCallRegisterGateway, err)
747747
}
748748

749749
if response.IsError() {
750-
return RegisterGatewayResponse{}, NewAPIErrorWithResponse(operationCallRegisterGateway, response, nil)
750+
return RegisterConnectorResponse{}, NewAPIErrorWithResponse(operationCallRegisterGateway, response, nil)
751751
}
752752

753753
return resBody, nil

packages/api/model.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -704,12 +704,12 @@ type BootstrapUser struct {
704704
SuperAdmin bool `json:"superAdmin"`
705705
}
706706

707-
type RegisterProxyRequest struct {
707+
type RegisterRelayRequest struct {
708708
IP string `json:"ip"`
709709
Name string `json:"name"`
710710
}
711711

712-
type RegisterProxyResponse struct {
712+
type RegisterRelayResponse struct {
713713
PKI struct {
714714
ServerCertificate string `json:"serverCertificate"`
715715
ServerPrivateKey string `json:"serverPrivateKey"`
@@ -722,15 +722,15 @@ type RegisterProxyResponse struct {
722722
} `json:"ssh"`
723723
}
724724

725-
type RegisterGatewayRequest struct {
726-
ProxyName string `json:"proxyName"`
725+
type RegisterConnectorRequest struct {
726+
RelayName string `json:"relayName"`
727727
Name string `json:"name"`
728728
}
729729

730-
type RegisterGatewayResponse struct {
731-
GatewayID string `json:"gatewayId"`
732-
ProxyIP string `json:"proxyIp"`
733-
PKI struct {
730+
type RegisterConnectorResponse struct {
731+
ConnectorID string `json:"connectorId"`
732+
RelayIP string `json:"relayIp"`
733+
PKI struct {
734734
ServerCertificate string `json:"serverCertificate"`
735735
ServerPrivateKey string `json:"serverPrivateKey"`
736736
ClientCertificateChain string `json:"clientCertificateChain"`

packages/cmd/connector.go

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
package cmd
2+
3+
import (
4+
"context"
5+
"errors"
6+
"fmt"
7+
"os"
8+
"os/signal"
9+
"runtime"
10+
"sync/atomic"
11+
"syscall"
12+
"time"
13+
14+
"github.com/Infisical/infisical-merge/packages/connector"
15+
"github.com/Infisical/infisical-merge/packages/util"
16+
"github.com/rs/zerolog/log"
17+
"github.com/spf13/cobra"
18+
)
19+
20+
var connectorCmd = &cobra.Command{
21+
Use: "connector",
22+
Short: "Connector-related commands",
23+
Long: "Connector-related commands for Infisical",
24+
}
25+
26+
var connectorStartCmd = &cobra.Command{
27+
Use: "start",
28+
Short: "Start the Infisical connector component",
29+
Long: "Start the Infisical connector component. Use 'connector install' to set up the systemd service.",
30+
Example: "infisical connector start --relay=us-west-1 --name=my-connector --token=<token>",
31+
DisableFlagsInUseLine: true,
32+
Args: cobra.NoArgs,
33+
Run: func(cmd *cobra.Command, args []string) {
34+
35+
relayName, err := util.GetCmdFlagOrEnv(cmd, "relay", []string{connector.RELAY_NAME_ENV_NAME})
36+
if err != nil {
37+
util.HandleError(err, fmt.Sprintf("unable to get relay flag or %s env", connector.RELAY_NAME_ENV_NAME))
38+
}
39+
40+
connectorName, err := util.GetCmdFlagOrEnv(cmd, "name", []string{connector.CONNECTOR_NAME_ENV_NAME})
41+
if err != nil {
42+
util.HandleError(err, fmt.Sprintf("unable to get name flag or %s env", connector.CONNECTOR_NAME_ENV_NAME))
43+
}
44+
45+
connectorInstance, err := connector.NewConnector(&connector.ConnectorConfig{
46+
Name: connectorName,
47+
RelayName: relayName,
48+
ReconnectDelay: 10 * time.Second,
49+
})
50+
51+
if err != nil {
52+
util.HandleError(err, "unable to create connector instance")
53+
}
54+
55+
infisicalClient, cancelSdk, err := getInfisicalSdkInstance(cmd)
56+
if err != nil {
57+
util.HandleError(err, "unable to get infisical client")
58+
}
59+
defer cancelSdk()
60+
61+
var accessToken atomic.Value
62+
accessToken.Store(infisicalClient.Auth().GetAccessToken())
63+
64+
if accessToken.Load().(string) == "" {
65+
util.HandleError(errors.New("no access token found"))
66+
}
67+
68+
connectorInstance.SetToken(accessToken.Load().(string))
69+
70+
sigCh := make(chan os.Signal, 1)
71+
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)
72+
73+
ctx, cancelCmd := context.WithCancel(cmd.Context())
74+
defer cancelCmd()
75+
76+
go func() {
77+
<-sigCh
78+
log.Info().Msg("Received shutdown signal, shutting down connector...")
79+
cancelCmd()
80+
cancelSdk()
81+
82+
// Give graceful shutdown 10 seconds, then force exit on second signal
83+
select {
84+
case <-sigCh:
85+
log.Warn().Msg("Second signal received, force exit triggered")
86+
os.Exit(1)
87+
case <-time.After(10 * time.Second):
88+
log.Info().Msg("Graceful shutdown completed")
89+
os.Exit(0)
90+
}
91+
}()
92+
93+
// Token refresh goroutine - runs every 10 seconds
94+
go func() {
95+
tokenRefreshTicker := time.NewTicker(10 * time.Second)
96+
defer tokenRefreshTicker.Stop()
97+
98+
for {
99+
select {
100+
case <-tokenRefreshTicker.C:
101+
if ctx.Err() != nil {
102+
return
103+
}
104+
105+
newToken := infisicalClient.Auth().GetAccessToken()
106+
if newToken != "" && newToken != accessToken.Load().(string) {
107+
accessToken.Store(newToken)
108+
connectorInstance.SetToken(newToken)
109+
}
110+
111+
case <-ctx.Done():
112+
return
113+
}
114+
}
115+
}()
116+
117+
err = connectorInstance.Start(ctx)
118+
if err != nil {
119+
util.HandleError(err, "unable to start connector instance")
120+
}
121+
122+
},
123+
}
124+
125+
var connectorInstallCmd = &cobra.Command{
126+
Use: "install",
127+
Short: "Install and enable systemd service for the connector (requires sudo)",
128+
Long: "Install and enable systemd service for the connector. Must be run with sudo on Linux.",
129+
Example: "sudo infisical connector install --token=<token> --domain=<domain> --name=<name> --relay=<relay-name>",
130+
DisableFlagsInUseLine: true,
131+
Args: cobra.NoArgs,
132+
Run: func(cmd *cobra.Command, args []string) {
133+
if runtime.GOOS != "linux" {
134+
util.HandleError(fmt.Errorf("systemd service installation is only supported on Linux"))
135+
}
136+
137+
if os.Geteuid() != 0 {
138+
util.HandleError(fmt.Errorf("systemd service installation requires root/sudo privileges"))
139+
}
140+
141+
token, err := util.GetInfisicalToken(cmd)
142+
if err != nil {
143+
util.HandleError(err, "Unable to parse flag")
144+
}
145+
146+
if token == nil {
147+
util.HandleError(errors.New("Token not found"))
148+
}
149+
150+
domain, err := cmd.Flags().GetString("domain")
151+
if err != nil {
152+
util.HandleError(err, "Unable to parse domain flag")
153+
}
154+
155+
connectorName, err := cmd.Flags().GetString("name")
156+
if err != nil {
157+
util.HandleError(err, "Unable to parse name flag")
158+
}
159+
if connectorName == "" {
160+
util.HandleError(errors.New("Connector name is required"))
161+
}
162+
163+
relayName, err := cmd.Flags().GetString("relay")
164+
if err != nil {
165+
util.HandleError(err, "Unable to parse relay flag")
166+
}
167+
if relayName == "" {
168+
util.HandleError(errors.New("Relay name is required"))
169+
}
170+
171+
err = connector.InstallConnectorSystemdService(token.Token, domain, connectorName, relayName)
172+
if err != nil {
173+
util.HandleError(err, "Unable to install systemd service")
174+
}
175+
},
176+
}
177+
178+
var connectorUninstallCmd = &cobra.Command{
179+
Use: "uninstall",
180+
Short: "Uninstall and remove systemd service for the connector (requires sudo)",
181+
Long: "Uninstall and remove systemd service for the connector. Must be run with sudo on Linux.",
182+
Example: "sudo infisical connector uninstall",
183+
DisableFlagsInUseLine: true,
184+
Args: cobra.NoArgs,
185+
Run: func(cmd *cobra.Command, args []string) {
186+
if runtime.GOOS != "linux" {
187+
util.HandleError(fmt.Errorf("systemd service installation is only supported on Linux"))
188+
}
189+
190+
if os.Geteuid() != 0 {
191+
util.HandleError(fmt.Errorf("systemd service installation requires root/sudo privileges"))
192+
}
193+
194+
if err := connector.UninstallConnectorSystemdService(); err != nil {
195+
util.HandleError(err, "Failed to uninstall systemd service")
196+
}
197+
},
198+
}
199+
200+
func init() {
201+
connectorStartCmd.Flags().String("relay", "", "The name of the relay to connect to")
202+
connectorStartCmd.Flags().String("name", "", "The name of the connector")
203+
connectorStartCmd.Flags().String("token", "", "connect with Infisical using machine identity access token. if not provided, you must set the auth-method flag")
204+
connectorStartCmd.Flags().String("auth-method", "", "login method [universal-auth, kubernetes, azure, gcp-id-token, gcp-iam, aws-iam, oidc-auth]. if not provided, you must set the token flag")
205+
connectorStartCmd.Flags().String("client-id", "", "client id for universal auth")
206+
connectorStartCmd.Flags().String("client-secret", "", "client secret for universal auth")
207+
connectorStartCmd.Flags().String("machine-identity-id", "", "machine identity id for kubernetes, azure, gcp-id-token, gcp-iam, and aws-iam auth methods")
208+
connectorStartCmd.Flags().String("service-account-token-path", "", "service account token path for kubernetes auth")
209+
connectorStartCmd.Flags().String("service-account-key-file-path", "", "service account key file path for GCP IAM auth")
210+
connectorStartCmd.Flags().String("jwt", "", "JWT for jwt-based auth methods [oidc-auth, jwt-auth]")
211+
212+
connectorInstallCmd.Flags().String("token", "", "Connect with Infisical using machine identity access token")
213+
connectorInstallCmd.Flags().String("domain", "", "Domain of your self-hosted Infisical instance")
214+
connectorInstallCmd.Flags().String("name", "", "The name of the connector")
215+
connectorInstallCmd.Flags().String("relay", "", "The name of the relay")
216+
217+
connectorCmd.AddCommand(connectorStartCmd)
218+
connectorCmd.AddCommand(connectorInstallCmd)
219+
connectorCmd.AddCommand(connectorUninstallCmd)
220+
221+
rootCmd.AddCommand(connectorCmd)
222+
}

0 commit comments

Comments
 (0)