diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2016-06-15 10:55:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-15 10:55:48 +0200 |
commit | e305c47ed628770d99754207031b45bbb7a44517 (patch) | |
tree | 6bb3981cf8f624c7d7b31dbdca9ebbc4288643bb /cshared/auth_method_cshared.go | |
parent | 9774edbe34656802102536949a6428e7f5e76607 (diff) | |
parent | bea415417e87fbb403095e8cd3fb8512a1a97af8 (diff) | |
download | go-git-e305c47ed628770d99754207031b45bbb7a44517.tar.gz |
Merge pull request #54 from vmarkovtsev/cshared
Add cshared files to allow building wrappers in other languages
Diffstat (limited to 'cshared/auth_method_cshared.go')
-rw-r--r-- | cshared/auth_method_cshared.go | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/cshared/auth_method_cshared.go b/cshared/auth_method_cshared.go new file mode 100644 index 0000000..3e1479e --- /dev/null +++ b/cshared/auth_method_cshared.go @@ -0,0 +1,192 @@ +// +build ignore +package main + +import ( + "C" + "strings" + + "golang.org/x/crypto/ssh" + "gopkg.in/src-d/go-git.v3/clients/http" + gssh "gopkg.in/src-d/go-git.v3/clients/ssh" +) + +//export c_NewBasicAuth +func c_NewBasicAuth(username, password string) uint64 { + auth := http.NewBasicAuth(CopyString(username), CopyString(password)) + return uint64(RegisterObject(auth)) +} + +//export c_ParseRawPrivateKey +func c_ParseRawPrivateKey(pemBytes []byte) (uint64, int, *C.char) { + pkey, err := ssh.ParseRawPrivateKey(pemBytes) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + // pointer is received - no need for & + return uint64(RegisterObject(pkey)), ErrorCodeSuccess, nil +} + +//export c_ParsePrivateKey +func c_ParsePrivateKey(pemBytes []byte) (uint64, int, *C.char) { + signer, err := ssh.ParsePrivateKey(pemBytes) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(&signer)), ErrorCodeSuccess, nil +} + +//export c_NewPublicKey +func c_NewPublicKey(key uint64) (uint64, int, *C.char) { + obj, ok := GetObject(Handle(key)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + key_obj := obj.(ssh.PublicKey) + pkey, err := ssh.NewPublicKey(key_obj) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(&pkey)), ErrorCodeSuccess, nil +} + +//export c_NewSignerFromKey +func c_NewSignerFromKey(key uint64) (uint64, int, *C.char) { + obj, ok := GetObject(Handle(key)) + if !ok { + return IH, ErrorCodeNotFound, C.CString(MessageNotFound) + } + signer, err := ssh.NewSignerFromKey(obj) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(&signer)), ErrorCodeSuccess, nil +} + +//export c_MarshalAuthorizedKey +func c_MarshalAuthorizedKey(key uint64) (*C.char, int) { + obj, ok := GetObject(Handle(key)) + if !ok { + return nil, 0 + } + obj_key := obj.(ssh.PublicKey) + mak := ssh.MarshalAuthorizedKey(obj_key) + return C.CString(string(mak)), len(mak) +} + +//export c_ParsePublicKey +func c_ParsePublicKey(in []byte) (uint64, int, *C.char) { + pkey, err := ssh.ParsePublicKey(in) + if err != nil { + return IH, ErrorCodeInternal, C.CString(err.Error()) + } + return uint64(RegisterObject(&pkey)), ErrorCodeSuccess, nil +} + +//export c_ParseAuthorizedKey +func c_ParseAuthorizedKey(in []byte) (uint64, *C.char, *C.char, *C.char, int, int, *C.char) { + pkey, comment, options, rest, err := ssh.ParseAuthorizedKey(in) + if err != nil { + return IH, nil, nil, nil, 0, ErrorCodeInternal, + C.CString(err.Error()) + } + pkey_handle := RegisterObject(&pkey) + mopt := strings.Join(options, "\xff") + return uint64(pkey_handle), C.CString(comment), C.CString(mopt), + C.CString(string(rest)), len(rest), ErrorCodeSuccess, nil +} + +//export c_ssh_Password_New +func c_ssh_Password_New(user, pass string) uint64 { + obj := gssh.Password{User: CopyString(user), Pass: CopyString(pass)} + return uint64(RegisterObject(&obj)) +} + +//export c_ssh_Password_get_User +func c_ssh_Password_get_User(p uint64) *C.char { + obj, ok := GetObject(Handle(p)) + if !ok { + return nil + } + return C.CString(obj.(*gssh.Password).User) +} + +//export c_ssh_Password_set_User +func c_ssh_Password_set_User(p uint64, v string) { + obj, ok := GetObject(Handle(p)) + if !ok { + return + } + obj.(*gssh.Password).User = CopyString(v) +} + +//export c_ssh_Password_get_Pass +func c_ssh_Password_get_Pass(p uint64) *C.char { + obj, ok := GetObject(Handle(p)) + if !ok { + return nil + } + return C.CString(obj.(*gssh.Password).Pass) +} + +//export c_ssh_Password_set_Pass +func c_ssh_Password_set_Pass(p uint64, v string) { + obj, ok := GetObject(Handle(p)) + if !ok { + return + } + obj.(*gssh.Password).Pass = CopyString(v) +} + +//c_ssh_PublicKeys_New +func c_ssh_PublicKeys_New(user string, signer uint64) uint64 { + obj, ok := GetObject(Handle(signer)) + if !ok { + return IH + } + pk := gssh.PublicKeys{User: CopyString(user), Signer: obj.(ssh.Signer)} + return uint64(RegisterObject(&pk)) +} + +//export c_ssh_PublicKeys_get_User +func c_ssh_PublicKeys_get_User(p uint64) *C.char { + obj, ok := GetObject(Handle(p)) + if !ok { + return nil + } + return C.CString(obj.(*gssh.PublicKeys).User) +} + +//export c_ssh_PublicKeys_set_User +func c_ssh_PublicKeys_set_User(p uint64, v string) { + obj, ok := GetObject(Handle(p)) + if !ok { + return + } + obj.(*gssh.PublicKeys).User = CopyString(v) +} + +//export c_ssh_PublicKeys_get_Signer +func c_ssh_PublicKeys_get_Signer(p uint64) uint64 { + obj, ok := GetObject(Handle(p)) + if !ok { + return IH + } + handle, ok := GetHandle(&obj.(*gssh.PublicKeys).Signer) + if !ok { + return IH + } + return uint64(handle) +} + +//export c_ssh_PublicKeys_set_Signer +func c_ssh_PublicKeys_set_Signer(p uint64, v uint64) { + obj, ok := GetObject(Handle(p)) + if !ok { + return + } + signer, ok := GetObject(Handle(v)) + if !ok { + return + } + obj.(*gssh.PublicKeys).Signer = *signer.(*ssh.Signer) +}
\ No newline at end of file |