credential added

This commit is contained in:
crusader 2018-08-30 18:57:59 +09:00
parent cfa3f94692
commit 7b804b2da2
6 changed files with 164 additions and 0 deletions

View File

@ -0,0 +1,44 @@
package credential
import (
"encoding/json"
"errors"
"git.loafle.net/overflow/model/meta"
)
type Credential struct {
}
type CredentialMap map[string]*Credential
func (m *CredentialMap) UnmarshalJSON(data []byte) error {
credentials := make(map[string]json.RawMessage)
err := json.Unmarshal(data, &credentials)
if nil != err {
return err
}
result := make(CredentialMap)
for k, v := range credentials {
var i interface{}
switch meta.ToMetaCredentialTypeEnum(&meta.MetaCredentialType{Key: k}) {
case meta.MetaCredentialTypeEnumSNMP:
i = &SNMPCredential{}
case meta.MetaCredentialTypeEnumWindows:
i = &WindowsCredential{}
default:
return errors.New("Unrecognized Credential")
}
err := json.Unmarshal(v, i)
if nil != err {
return err
}
result[k] = i.(*Credential)
}
*m = result
return nil
}

View File

@ -0,0 +1,17 @@
package credential
import "encoding/json"
type SNMPCredential struct {
Credential
Version string `json:"version,omitempty"`
Community string `json:"community,omitempty"`
AuthenticationType string `json:"authenticationType,omitempty"`
User string `json:"user,omitempty"`
Password string `json:"password,omitempty"`
EncryptionType string `json:"encryptionType,omitempty"`
DataEncryptionKey string `json:"dataEncryptionKey,omitempty"`
ContextName string `json:"contextName,omitempty"`
Port json.Number `json:"port,Number,omitempty"`
Timeout json.Number `json:"timeout,Number,omitempty"`
}

View File

@ -0,0 +1,15 @@
package credential
import "encoding/json"
type UnixCredential struct {
Credential
User string `json:"user,omitempty"`
LoginType string `json:"loginType,omitempty"`
Password string `json:"password,omitempty"`
PrivateKey string `json:"privateKey,omitempty"`
SSHPort json.Number `json:"sshPort,Number,omitempty"`
SSHRightsElevationType string `json:"sshRightsElevationType,omitempty"`
TargetUser string `json:"targetUser,omitempty"`
TargetUserPassword string `json:"targetUserPassword,omitempty"`
}

View File

@ -0,0 +1,8 @@
package credential
type WindowsCredential struct {
Credential
DomainName string `json:"domainName,omitempty"`
User string `json:"user,omitempty"`
Password string `json:"password,omitempty"`
}

View File

@ -0,0 +1,9 @@
package discovery
import (
"git.loafle.net/overflow/model/config/credential"
)
type DiscoveryConfig struct {
Credentials credential.CredentialMap `json:"credentials,omitempty"`
}

View File

@ -0,0 +1,71 @@
package meta
import (
"encoding/json"
"git.loafle.net/overflow/model/util"
)
type MetaCredentialType struct {
ID json.Number `json:"id,Number,omitempty"`
Name string `json:"name,omitempty"`
Key string `json:"key,omitempty"`
CreateDate *util.Timestamp `json:"createDate,omitempty"`
}
type MetaCredentialTypeEnum int
const (
MetaCredentialTypeEnumNONE MetaCredentialTypeEnum = iota + 1
MetaCredentialTypeEnumWindows
MetaCredentialTypeEnumLinux
MetaCredentialTypeEnumSolaris
MetaCredentialTypeEnumMacOS
MetaCredentialTypeEnumVMWare
MetaCredentialTypeEnumXenServer
MetaCredentialTypeEnumSNMP
MetaCredentialTypeEnumDatabase
MetaCredentialTypeEnumAmazoneCloudWatch
)
var (
metaCredentialTypeEnumID = map[MetaCredentialTypeEnum]string{
MetaCredentialTypeEnumNONE: "NONE",
MetaCredentialTypeEnumWindows: "WINDOWS",
MetaCredentialTypeEnumLinux: "LINUX",
MetaCredentialTypeEnumSolaris: "SOLARIS",
MetaCredentialTypeEnumMacOS: "MACOS",
MetaCredentialTypeEnumVMWare: "VMWARE",
MetaCredentialTypeEnumXenServer: "XENSERVER",
MetaCredentialTypeEnumSNMP: "SNMP",
MetaCredentialTypeEnumDatabase: "DATABASE",
MetaCredentialTypeEnumAmazoneCloudWatch: "AMAZON_CLOUDWATCH",
}
metaCredentialTypeEnumKey = map[string]MetaCredentialTypeEnum{
"NONE": MetaCredentialTypeEnumNONE,
"WINDOWS": MetaCredentialTypeEnumWindows,
"LINUX": MetaCredentialTypeEnumLinux,
"SOLARIS": MetaCredentialTypeEnumSolaris,
"MACOS": MetaCredentialTypeEnumMacOS,
"VMWARE": MetaCredentialTypeEnumVMWare,
"XENSERVER": MetaCredentialTypeEnumXenServer,
"SNMP": MetaCredentialTypeEnumSNMP,
"DATABASE": MetaCredentialTypeEnumDatabase,
"AMAZON_CLOUDWATCH": MetaCredentialTypeEnumAmazoneCloudWatch,
}
)
func (e MetaCredentialTypeEnum) String() string {
return metaCredentialTypeEnumID[e]
}
func ToMetaCredentialTypeEnum(v *MetaCredentialType) MetaCredentialTypeEnum {
return metaCredentialTypeEnumKey[v.Key]
}
func ToMetaCredentialType(v MetaCredentialTypeEnum) *MetaCredentialType {
return &MetaCredentialType{
Key: metaCredentialTypeEnumID[v],
}
}