Monorepo for Tangled tangled.org

appview/settings/pipelines: allow adding multiple secrets #988

closed opened by samanthanguyen.me targeting master from samanthanguyen.me/tangled-core: master
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:smd2mvg2dao4rqnnz6qexdov/sh.tangled.repo.pull/3mco2qtvv3i22
+53 -35
Diff #0
+4 -10
appview/pages/templates/repo/settings/pipelines.html
··· 110 110 class="flex flex-col gap-2" 111 111 > 112 112 <p class="uppercase p-0 font-bold">ADD SECRET</p> 113 - <p class="text-sm text-gray-500 dark:text-gray-400">Secrets are available as environment variables in the workflow.</p> 114 - <input 115 - type="text" 116 - id="secret-key" 117 - name="key" 118 - required 119 - placeholder="SECRET_NAME" 120 - /> 113 + <p class="text-sm text-gray-500 dark:text-gray-400">Secrets are available as environment variables in the workflow. You can add multiple secrets.</p> 121 114 <textarea 122 115 type="text" 123 116 id="secret-value" 124 - name="value" 117 + name="values" 125 118 required 126 - placeholder="secret value"></textarea> 119 + placeholder="SECRET1=VALUE 120 + SECRET2=VALUE"></textarea> 127 121 <div class="flex gap-2 pt-2"> 128 122 <button 129 123 type="button"
+49 -25
appview/repo/settings.go
··· 79 79 } 80 80 81 81 func (rp *Repo) Secrets(w http.ResponseWriter, r *http.Request) { 82 - user := rp.oauth.GetMultiAccountUser(r) 82 + user := rp.oauth.GetUser(r) 83 83 l := rp.logger.With("handler", "Secrets") 84 - l = l.With("did", user.Active.Did) 84 + l = l.With("did", user.Did) 85 85 86 86 f, err := rp.repoResolver.Resolve(r) 87 87 if err != nil { ··· 111 111 return 112 112 } 113 113 114 - key := r.FormValue("key") 115 - if key == "" { 116 - w.WriteHeader(http.StatusBadRequest) 117 - return 118 - } 119 - 120 114 switch r.Method { 121 115 case http.MethodPut: 122 116 errorId := "add-secret-error" 123 117 124 - value := r.FormValue("value") 118 + value := r.FormValue("values") 125 119 if value == "" { 126 120 w.WriteHeader(http.StatusBadRequest) 127 121 return 128 122 } 129 123 130 - err = tangled.RepoAddSecret( 131 - r.Context(), 132 - spindleClient, 133 - &tangled.RepoAddSecret_Input{ 134 - Repo: f.RepoAt().String(), 135 - Key: key, 136 - Value: value, 137 - }, 138 - ) 139 - if err != nil { 140 - l.Error("Failed to add secret.", "err", err) 141 - rp.pages.Notice(w, errorId, "Failed to add secret.") 142 - return 124 + secretsMap := parseSecrets(value) 125 + for secretKey, secretValue := range secretsMap { 126 + err = tangled.RepoAddSecret( 127 + r.Context(), 128 + spindleClient, 129 + &tangled.RepoAddSecret_Input{ 130 + Repo: f.RepoAt().String(), 131 + Key: secretKey, 132 + Value: secretValue, 133 + }, 134 + ) 135 + if err != nil { 136 + l.Error("Failed to add secret.", "err", err) 137 + rp.pages.Notice(w, errorId, "Failed to add secret.") 138 + return 139 + } 143 140 } 144 141 145 142 case http.MethodDelete: 146 143 errorId := "operation-error" 147 144 145 + key := r.FormValue("key") 146 + if key == "" { 147 + w.WriteHeader(http.StatusBadRequest) 148 + return 149 + } 150 + 148 151 err = tangled.RepoRemoveSecret( 149 152 r.Context(), 150 153 spindleClient, ··· 163 166 rp.pages.HxRefresh(w) 164 167 } 165 168 169 + func parseSecrets(content string) map[string]string { 170 + secrets := make(map[string]string) 171 + lines := strings.SplitSeq(content, "\n") 172 + 173 + for line := range lines { 174 + line = strings.TrimSpace(line) 175 + if line == "" { 176 + continue 177 + } 178 + 179 + parts := strings.SplitN(line, "=", 2) 180 + if len(parts) == 2 { 181 + key := strings.TrimSpace(parts[0]) 182 + value := strings.TrimSpace(parts[1]) 183 + secrets[key] = value 184 + } 185 + } 186 + 187 + return secrets 188 + } 189 + 166 190 func (rp *Repo) Settings(w http.ResponseWriter, r *http.Request) { 167 191 tabVal := r.URL.Query().Get("tab") 168 192 if tabVal == "" { ··· 185 209 l := rp.logger.With("handler", "generalSettings") 186 210 187 211 f, err := rp.repoResolver.Resolve(r) 188 - user := rp.oauth.GetMultiAccountUser(r) 212 + user := rp.oauth.GetUser(r) 189 213 190 214 scheme := "http" 191 215 if !rp.config.Core.Dev { ··· 271 295 l := rp.logger.With("handler", "accessSettings") 272 296 273 297 f, err := rp.repoResolver.Resolve(r) 274 - user := rp.oauth.GetMultiAccountUser(r) 298 + user := rp.oauth.GetUser(r) 275 299 276 300 collaborators, err := func(repo *models.Repo) ([]pages.Collaborator, error) { 277 301 repoCollaborators, err := rp.enforcer.E.GetImplicitUsersForResourceByDomain(repo.DidSlashRepo(), repo.Knot) ··· 318 342 l := rp.logger.With("handler", "pipelineSettings") 319 343 320 344 f, err := rp.repoResolver.Resolve(r) 321 - user := rp.oauth.GetMultiAccountUser(r) 345 + user := rp.oauth.GetUser(r) 322 346 323 347 // all spindles that the repo owner is a member of 324 348 spindles, err := rp.enforcer.GetSpindlesForUser(f.Did)

History

1 round 0 comments
sign up or login to add to the discussion
1 commit
expand
appview/settings/pipelines: allow adding multiple secrets
expand 0 comments
closed without merging