Skip to content

Commit 0406104

Browse files
Merge pull request #373 from dethancosta/main
Add file importer for cachix plugin
2 parents 54ec59d + cf8db7d commit 0406104

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

plugins/cachix/auth_token.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package cachix
22

33
import (
4+
"context"
5+
"strings"
6+
47
"github.com/1Password/shell-plugins/sdk"
58
"github.com/1Password/shell-plugins/sdk/importer"
69
"github.com/1Password/shell-plugins/sdk/provision"
@@ -33,9 +36,41 @@ func AuthToken() schema.CredentialType {
3336
DefaultProvisioner: provision.EnvVars(defaultEnvVarMapping),
3437
Importer: importer.TryAll(
3538
importer.TryEnvVarPair(defaultEnvVarMapping),
39+
TryCachixConfigFile(),
3640
)}
3741
}
3842

3943
var defaultEnvVarMapping = map[string]sdk.FieldName{
4044
"CACHIX_AUTH_TOKEN": fieldname.Token,
4145
}
46+
47+
func TryCachixConfigFile() sdk.Importer {
48+
return importer.TryFile("~/.config/cachix/cachix.dhall", func(ctx context.Context, contents importer.FileContents, in sdk.ImportInput, out *sdk.ImportAttempt) {
49+
var token string
50+
51+
fileString := contents.ToString()
52+
// The dhall config file contains a single block with variables inside
53+
fileString = strings.Trim(fileString, "{}")
54+
// Remove spaces to make parsing simpler
55+
fileString = strings.Join(strings.Fields(fileString), "")
56+
// Split fields into separate strings
57+
keyVals := strings.Split(fileString, ",")
58+
59+
for i := range keyVals {
60+
kvPair := strings.Split(keyVals[i], "=")
61+
if len(kvPair) != 2 {
62+
continue
63+
}
64+
kvPair[1] = strings.Trim(kvPair[1], "\"")
65+
if strings.Contains(kvPair[0], "authToken") {
66+
token = kvPair[1]
67+
}
68+
}
69+
70+
out.AddCandidate(sdk.ImportCandidate{
71+
Fields: map[sdk.FieldName]string{
72+
fieldname.Token: token,
73+
},
74+
})
75+
})
76+
}

plugins/cachix/auth_token_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ func TestAuthTokenImporter(t *testing.T) {
3434
},
3535
},
3636
},
37+
"Cache config file": {
38+
Files: map[string]string{
39+
"~/.config/cachix/cachix.dhall": plugintest.LoadFixture(t, "cachix.dhall"),
40+
},
41+
ExpectedCandidates: []sdk.ImportCandidate{
42+
{
43+
Fields: map[sdk.FieldName]string{
44+
fieldname.Token: "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3OGRlOTA4Yi03MjhiLTRiMjUtODA1Yi1hNTRjODIxMWQ1ZjMiLCJzY29wZXMiOiJ0eCJ9.A0XjByVJtp2Di0Ui7M5KjiG1OinYW8PwVKRw5N4YETE",
45+
},
46+
},
47+
},
48+
},
3749
})
3850
}
3951

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{ authToken =
2+
"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3OGRlOTA4Yi03MjhiLTRiMjUtODA1Yi1hNTRjODIxMWQ1ZjMiLCJzY29wZXMiOiJ0eCJ9.A0XjByVJtp2Di0Ui7M5KjiG1OinYW8PwVKRw5N4YETE"
3+
, hostname = "https://cachix.org"
4+
, binaryCaches = [] : List { name : Text, secretKey : Text }
5+
}

0 commit comments

Comments
 (0)