mirror of
https://github.com/docker/docker-credential-helpers.git
synced 2026-06-13 16:01:28 +05:30
7810dc4db9
- Bump golang.org/x/sys from 0.17.0 to 0.20.0 - Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 - Added missing constant to sys_unsupported.go to avoid breaking builds on non-Windows platforms. full diff: https://github.com/danieljoos/wincred/compare/v1.2.1...v1.2.2 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
wincred
Go wrapper around the Windows Credential Manager API functions.
Installation
go get github.com/danieljoos/wincred
Usage
See the following examples:
Create and store a new generic credential object
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
cred := wincred.NewGenericCredential("myGoApplication")
cred.CredentialBlob = []byte("my secret")
err := cred.Write()
if err != nil {
fmt.Println(err)
}
}
Retrieve a credential object
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
cred, err := wincred.GetGenericCredential("myGoApplication")
if err == nil {
fmt.Println(string(cred.CredentialBlob))
}
}
Remove a credential object
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
cred, err := wincred.GetGenericCredential("myGoApplication")
if err != nil {
fmt.Println(err)
return
}
cred.Delete()
}
List all available credentials
package main
import (
"fmt"
"github.com/danieljoos/wincred"
)
func main() {
creds, err := wincred.List()
if err != nil {
fmt.Println(err)
return
}
for i := range(creds) {
fmt.Println(creds[i].TargetName)
}
}
Hints
Encoding
The credential objects simply store byte arrays without specific meaning or encoding. For sharing between different applications, it might make sense to apply an explicit string encoding - for example UTF-16 LE (used nearly everywhere in the Win32 API).
package main
import (
"fmt"
"os"
"github.com/danieljoos/wincred"
"golang.org/x/text/encoding/unicode"
"golang.org/x/text/transform"
)
func main() {
cred := wincred.NewGenericCredential("myGoApplication")
encoder := unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM).NewEncoder()
blob, _, err := transform.Bytes(encoder, []byte("mysecret"))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
cred.CredentialBlob = blob
err = cred.Write()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}
Limitations
The size of a credential blob is limited to 2560 Bytes by the Windows API.