@@ -126,6 +126,58 @@ func (c *FirecrestRemoteSessionController) Status(ctx context.Context) (state mo
126126 return c .currentStatus , c .currentStatusError
127127}
128128
129+ func (c * FirecrestRemoteSessionController ) uploadSecrets (ctx context.Context , remoteSecretsPath string ) error {
130+ var err error
131+
132+ localSessionSecretsFolder , exists := os .LookupEnv ("RENKU_SECRETS_PATH" )
133+ if ! exists {
134+ localSessionSecretsFolder = "/secrets"
135+ }
136+
137+ files , err := os .ReadDir (localSessionSecretsFolder )
138+ if err != nil {
139+ if os .IsNotExist (err ) {
140+ // The folder does not exist if there are no user secrets defined.
141+ return nil
142+ }
143+ return err
144+ }
145+
146+ // Ensure the remote folder exists
147+ err = c .mkdir (ctx , remoteSecretsPath , true )
148+ if err != nil {
149+ return err
150+ }
151+
152+ err = c .chmod (ctx , remoteSecretsPath , "700" )
153+ if err != nil {
154+ return err
155+ }
156+
157+ for _ , file := range files {
158+ if file .IsDir () {
159+ // Ignore hierarchies for now, this will also skip "." and ".." as both are folders
160+ continue
161+ }
162+ var content []byte
163+ name := file .Name ()
164+ content , err = os .ReadFile (path .Join (localSessionSecretsFolder , name ))
165+ if err != nil {
166+ return err
167+ }
168+ err = c .uploadFile (ctx , remoteSecretsPath , name , content )
169+ if err != nil {
170+ return err
171+ }
172+ err = c .chmod (ctx , path .Join (remoteSecretsPath , name ), "400" )
173+ if err != nil {
174+ return err
175+ }
176+ }
177+
178+ return nil
179+ }
180+
129181// Start sets up and starts the remote session using the FirecREST API
130182//
131183//nolint:gocyclo // TODO: can we break down session start?
@@ -211,8 +263,17 @@ func (c *FirecrestRemoteSessionController) Start(ctx context.Context) error {
211263 if err != nil {
212264 return err
213265 }
266+ err = c .chmod (startCtx , path .Join (secretsPath , "wstunnel_secret" ), "400" )
267+ if err != nil {
268+ return err
269+ }
270+ }
271+ // Upload user secrets into secretsPath
272+ userSecretsPath := path .Join (secretsPath , "user" )
273+ err = c .uploadSecrets (startCtx , userSecretsPath )
274+ if err != nil {
275+ return err
214276 }
215- // TODO: upload user secrets into secretsPath
216277
217278 // Setup git repositories
218279 renkuWorkDir := os .Getenv ("RENKU_WORKING_DIR" )
@@ -291,7 +352,7 @@ func (c *FirecrestRemoteSessionController) Start(ctx context.Context) error {
291352 env ["GIT_PROXY_HEALTH_PORT" ] = fmt .Sprintf ("%d" , 65481 ) // git proxy port
292353
293354 // Upload the session script
294- sessionScriptFinal := c .renderSessionScript (sessionScript , system .FileSystems , secretsPath )
355+ sessionScriptFinal := c .renderSessionScript (sessionScript , system .FileSystems , userSecretsPath )
295356 err = c .uploadFile (ctx , sessionPath , "session_script.sh" , []byte (sessionScriptFinal ))
296357 if err != nil {
297358 return err
0 commit comments