implement create and delete api

Signed-off-by: Jörn Friedrich Dreyer <jfd@butonic.de>
This commit is contained in:
Jörn Friedrich Dreyer
2020-06-16 18:57:50 +02:00
parent c2668daae8
commit a27ca2fe5c
5 changed files with 270 additions and 136 deletions

2
go.mod
View File

@@ -12,6 +12,7 @@ require (
github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 // indirect
github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 // indirect
github.com/go-test/deep v1.0.6 // indirect
github.com/gofrs/uuid v3.2.0+incompatible
github.com/gogo/protobuf v1.3.1 // indirect
github.com/golang/protobuf v1.4.1
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
@@ -27,6 +28,7 @@ require (
github.com/rs/zerolog v1.17.2
github.com/spf13/viper v1.6.3
github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect
github.com/tredoe/osutil v1.0.5
google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb
honnef.co/go/tools v0.0.1-2020.1.0.20200427215036-cd1ad299aeab // indirect
)

4
go.sum
View File

@@ -765,6 +765,10 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc h1:yUaosF
github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4=
github.com/transip/gotransip v0.0.0-20190812104329-6d8d9179b66f/go.mod h1:i0f4R4o2HM0m3DZYQWsj6/MEowD57VzoH0v3d7igeFY=
github.com/tredoe/fileutil v1.0.0/go.mod h1:PBayWPFCURwkmW0u6E8E8C6Jtd9ZzWq/U1iMa6BLRPg=
github.com/tredoe/goutil v0.0.0-20200111155331-68cefb6d3cdc/go.mod h1:dp4VPOLeEFYbsf1ikgd+uytWDnpCdMiTHMg6mh7hHuQ=
github.com/tredoe/osutil v1.0.5 h1:mfXjHBJU46GoJDOUcHyV895fauUuVikR9U8yRbGBrqw=
github.com/tredoe/osutil v1.0.5/go.mod h1:DDO4G4Mwys6NJi5JmEVLnfFbQWIfVVri8L6HuXb/v98=
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=

View File

@@ -372,7 +372,8 @@ type Account struct {
DisplayName string `protobuf:"bytes,6,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
// The username
// posixaccount MUST uid
Username string `protobuf:"bytes,7,opt,name=username,proto3" json:"username,omitempty"`
PreferredName string `protobuf:"bytes,7,opt,name=preferred_name,json=preferredName,proto3" json:"preferred_name,omitempty"`
// TODO rename to on_premise_? or move to extension? see https://docs.microsoft.com/en-us/graph/extensibility-open-users
// used for exposing the user using ldap
// posixaccount MUST uidnumber
UidNumber int64 `protobuf:"varint,8,opt,name=uid_number,json=uidNumber,proto3" json:"uid_number,omitempty"`
@@ -512,9 +513,9 @@ func (m *Account) GetDisplayName() string {
return ""
}
func (m *Account) GetUsername() string {
func (m *Account) GetPreferredName() string {
if m != nil {
return m.Username
return m.PreferredName
}
return ""
}
@@ -1684,128 +1685,128 @@ func init() {
func init() { proto.RegisterFile("accounts.proto", fileDescriptor_e1e7723af4c007b7) }
var fileDescriptor_e1e7723af4c007b7 = []byte{
// 1955 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xeb, 0x6e, 0xdc, 0xc6,
0x15, 0xc6, 0x4a, 0x96, 0xb4, 0x3a, 0x2b, 0x59, 0xd2, 0x68, 0x2d, 0x51, 0xab, 0x8b, 0x37, 0xf4,
0x25, 0xb2, 0x94, 0x4a, 0x86, 0x9a, 0xf4, 0xe2, 0x34, 0x05, 0x64, 0xc9, 0x76, 0x85, 0xda, 0x8e,
0xb0, 0x72, 0x1a, 0xf4, 0x82, 0x10, 0x14, 0x39, 0xbb, 0x9a, 0x78, 0x79, 0xc9, 0xcc, 0x70, 0xad,
0x4d, 0x11, 0xa0, 0xe8, 0x0b, 0xf4, 0x47, 0x1f, 0xa4, 0x97, 0x17, 0xe9, 0x8f, 0xbe, 0x40, 0x7e,
0xf4, 0x57, 0xdf, 0xa1, 0x40, 0x31, 0x17, 0x92, 0xc3, 0xe5, 0x5e, 0x52, 0x24, 0x40, 0x61, 0x20,
0xbf, 0xb4, 0x9c, 0x73, 0xe6, 0xfb, 0xce, 0x9c, 0x73, 0x38, 0xf3, 0x71, 0x04, 0x37, 0x5d, 0xcf,
0x8b, 0x92, 0x90, 0xb3, 0x83, 0x98, 0x46, 0x3c, 0x42, 0x55, 0x86, 0x39, 0x27, 0x61, 0x87, 0x35,
0x6e, 0x77, 0xa2, 0xa8, 0xd3, 0xc5, 0x87, 0x6e, 0x4c, 0x0e, 0xdb, 0x04, 0x77, 0x7d, 0xe7, 0x12,
0x5f, 0xb9, 0x3d, 0x12, 0x51, 0xe5, 0xda, 0xd8, 0x32, 0x1c, 0xdc, 0x30, 0x8c, 0xb8, 0xcb, 0x49,
0x14, 0x6a, 0xa0, 0xc6, 0xa6, 0xb6, 0xca, 0xa7, 0xcb, 0xa4, 0x7d, 0x88, 0x83, 0x98, 0xf7, 0xb5,
0xb1, 0x39, 0x68, 0x54, 0x04, 0x81, 0xcb, 0x5e, 0x6b, 0x8f, 0xdb, 0x83, 0x1e, 0x9c, 0x04, 0x98,
0x71, 0x37, 0x88, 0x95, 0x83, 0xfd, 0xb7, 0x0a, 0xac, 0x3e, 0x27, 0x8c, 0x1f, 0xeb, 0xf8, 0x5b,
0xf8, 0x8b, 0x04, 0x33, 0x8e, 0x9a, 0x30, 0x1f, 0xbb, 0x1d, 0xec, 0x30, 0xf2, 0x25, 0xb6, 0x2a,
0xcd, 0xca, 0xee, 0xcc, 0xe3, 0xe9, 0xaf, 0x8f, 0x2b, 0xad, 0xaa, 0x18, 0xbd, 0x20, 0x5f, 0x62,
0x64, 0x03, 0x48, 0x0f, 0x1e, 0xbd, 0xc6, 0xa1, 0x35, 0xd5, 0xac, 0xec, 0xce, 0x2b, 0x17, 0x39,
0xf1, 0x95, 0x18, 0x45, 0x3f, 0x05, 0xc8, 0x43, 0xb2, 0xa6, 0x9b, 0x95, 0xdd, 0xda, 0x51, 0xe3,
0x40, 0xc5, 0x74, 0x90, 0xc6, 0x74, 0xf0, 0x54, 0xb8, 0xbc, 0x70, 0xd9, 0xeb, 0xd6, 0x7c, 0x3b,
0xfd, 0x89, 0x36, 0x60, 0xe6, 0x8b, 0x04, 0xd3, 0xbe, 0x75, 0x23, 0x47, 0x56, 0x23, 0x76, 0x00,
0xf5, 0x62, 0xc8, 0x2c, 0x8e, 0x42, 0x86, 0xd1, 0x0f, 0xa0, 0x9a, 0x96, 0xc1, 0xaa, 0x34, 0xa7,
0x77, 0x6b, 0x47, 0x2b, 0x07, 0x69, 0x1d, 0x0e, 0xb4, 0x77, 0x2b, 0x73, 0x41, 0xf7, 0x61, 0x29,
0xc4, 0xd7, 0xdc, 0x19, 0x5c, 0x45, 0x6b, 0x51, 0x0c, 0x9f, 0xa7, 0x8b, 0xb0, 0xef, 0xc0, 0xca,
0x33, 0x9c, 0xb2, 0xa5, 0xf9, 0xb9, 0x09, 0x53, 0xc4, 0x97, 0x89, 0x99, 0x6f, 0x4d, 0x11, 0xdf,
0xbe, 0x80, 0xfa, 0x09, 0xc5, 0x2e, 0xc7, 0xe3, 0xfd, 0xd0, 0x3e, 0xcc, 0xe9, 0x00, 0x24, 0xd9,
0xd0, 0x10, 0x53, 0x0f, 0xfb, 0x0f, 0x15, 0xa8, 0x7f, 0x12, 0xfb, 0x65, 0x54, 0x03, 0xa5, 0x32,
0x09, 0x05, 0x7d, 0x08, 0xb5, 0x44, 0x82, 0xa8, 0x2a, 0x4c, 0x4d, 0xac, 0x02, 0x28, 0x77, 0xf1,
0xdb, 0xbe, 0x0f, 0xf5, 0x53, 0xdc, 0xc5, 0x93, 0xd6, 0x65, 0xff, 0x67, 0x01, 0xe6, 0xb4, 0x4b,
0x69, 0xcd, 0xef, 0xc2, 0x92, 0x8e, 0xc5, 0xc1, 0xa1, 0x7b, 0xd9, 0xc5, 0xbe, 0x0c, 0xa2, 0xda,
0x4a, 0xdf, 0x9a, 0x27, 0x6a, 0x14, 0x1d, 0xc0, 0x2a, 0x61, 0x0e, 0xc5, 0x2c, 0x4a, 0xa8, 0x87,
0x9d, 0x74, 0x89, 0xd3, 0xd2, 0x79, 0x85, 0x88, 0x4a, 0x4b, 0x4b, 0x4a, 0x74, 0x07, 0x16, 0x3d,
0x91, 0x74, 0x12, 0x85, 0x0e, 0xef, 0xc7, 0x58, 0xf5, 0x4a, 0x6b, 0x21, 0x1d, 0x7c, 0xd5, 0x8f,
0x31, 0x7a, 0x1f, 0x80, 0xf8, 0x38, 0xe4, 0x84, 0x13, 0xcc, 0xac, 0x19, 0xd9, 0x17, 0xf5, 0x3c,
0x5d, 0x67, 0x99, 0xad, 0x65, 0xf8, 0xa1, 0x77, 0x60, 0xc1, 0x27, 0x2c, 0xee, 0xba, 0x7d, 0x27,
0x74, 0x03, 0x6c, 0xcd, 0x4a, 0xe4, 0x9a, 0x1e, 0x7b, 0xe9, 0x06, 0x18, 0x35, 0xa0, 0x9a, 0x30,
0x4c, 0xa5, 0x79, 0x4e, 0x9a, 0xb3, 0x67, 0xb4, 0x0d, 0x90, 0x10, 0xdf, 0x09, 0x93, 0xe0, 0x12,
0x53, 0xab, 0xda, 0xac, 0xec, 0x4e, 0xb7, 0xe6, 0x13, 0xe2, 0xbf, 0x94, 0x03, 0xc2, 0xdc, 0xc9,
0xcd, 0xf3, 0xca, 0xdc, 0xc9, 0xcc, 0x08, 0x6e, 0x04, 0x2e, 0xe9, 0x5a, 0x20, 0x51, 0xe5, 0x6f,
0xd4, 0x84, 0x9a, 0x8f, 0x99, 0x47, 0x49, 0x2c, 0x56, 0x66, 0xd5, 0x74, 0x3c, 0xf9, 0x10, 0x3a,
0x85, 0xe5, 0xd8, 0x65, 0xec, 0x4d, 0x44, 0x7d, 0x27, 0xa6, 0x51, 0x9b, 0x74, 0xb1, 0xb5, 0x20,
0x8b, 0xbd, 0x91, 0x2f, 0xf7, 0x5c, 0x7b, 0x9c, 0x2b, 0x87, 0xd6, 0x52, 0x5c, 0x1c, 0x40, 0xfb,
0x50, 0x0d, 0xb0, 0x88, 0xe2, 0xe3, 0xb6, 0xb5, 0x28, 0x93, 0xb5, 0x94, 0xcf, 0x7e, 0x46, 0xa3,
0x24, 0x6e, 0x65, 0x0e, 0xe8, 0x29, 0xac, 0xc8, 0x5c, 0x63, 0xdf, 0x91, 0x0d, 0x26, 0x76, 0x17,
0x6b, 0x79, 0x44, 0x83, 0xbd, 0x4a, 0xb7, 0x9e, 0xd6, 0x92, 0x9e, 0x74, 0xea, 0x72, 0x2c, 0x46,
0x05, 0x8e, 0x2f, 0xbb, 0xcc, 0xc4, 0x59, 0x99, 0x8c, 0xa3, 0x27, 0x65, 0x38, 0x3f, 0x06, 0x2b,
0x0a, 0x9d, 0x98, 0xe2, 0x80, 0x30, 0xcc, 0x1c, 0xd6, 0x0f, 0xbd, 0xac, 0xe5, 0xea, 0xb2, 0x8b,
0x6e, 0x45, 0xe1, 0xb9, 0x36, 0x5f, 0xf4, 0x43, 0x2f, 0xed, 0xbc, 0x81, 0x89, 0x24, 0x08, 0x12,
0x2e, 0x2c, 0x0e, 0xf1, 0xad, 0x5b, 0x32, 0xd5, 0xc6, 0xc4, 0xb3, 0xd4, 0x7a, 0xe6, 0xa3, 0x27,
0x70, 0xbb, 0xc0, 0x88, 0xbd, 0x84, 0x12, 0xde, 0x77, 0x54, 0x2b, 0xb5, 0x09, 0xa6, 0xd6, 0x9a,
0x9c, 0xbf, 0x65, 0x10, 0x6b, 0xa7, 0xb3, 0xcc, 0x07, 0x9d, 0xc0, 0x8e, 0x09, 0xe3, 0x13, 0x26,
0x12, 0x9e, 0x10, 0x76, 0x85, 0x7d, 0xd5, 0x80, 0xeb, 0x12, 0x65, 0x33, 0x47, 0x39, 0x35, 0x7d,
0x64, 0x43, 0xfe, 0x1c, 0xb6, 0x0a, 0xb1, 0xb8, 0x41, 0xfa, 0x0a, 0x29, 0x08, 0x4b, 0x42, 0x58,
0x46, 0x20, 0x6e, 0xa0, 0x5f, 0x25, 0x39, 0xff, 0x03, 0x58, 0x2f, 0x04, 0x11, 0x05, 0x2e, 0x09,
0xd5, 0xd4, 0x0d, 0x39, 0xb5, 0x6e, 0xb0, 0x4b, 0xa3, 0x9c, 0x76, 0x5a, 0x4c, 0x81, 0x78, 0x07,
0x9c, 0x98, 0x92, 0xd0, 0x23, 0xb1, 0xdb, 0x55, 0xd3, 0x1b, 0x83, 0xc1, 0x7f, 0xc2, 0x30, 0x3d,
0x4f, 0x7d, 0x24, 0x8a, 0x53, 0x44, 0xe9, 0xba, 0x8c, 0xab, 0xfa, 0xe5, 0x0d, 0xb1, 0x35, 0xb1,
0x21, 0x1a, 0x39, 0xc3, 0x73, 0x97, 0x71, 0x51, 0xe1, 0xac, 0x37, 0xba, 0x45, 0x82, 0x98, 0x46,
0x3d, 0xc2, 0x48, 0x14, 0x92, 0xb0, 0xe3, 0x60, 0x4a, 0x23, 0xca, 0xac, 0x6d, 0xd9, 0xef, 0xf7,
0xf2, 0x7e, 0xff, 0x38, 0x83, 0x3b, 0x37, 0xdc, 0x9f, 0x08, 0x6f, 0xb3, 0xa0, 0x25, 0x23, 0x13,
0x5b, 0x19, 0xbe, 0xe6, 0x62, 0x37, 0xe8, 0xaa, 0x8c, 0x30, 0xee, 0x72, 0x6c, 0xed, 0xca, 0x44,
0xac, 0xa4, 0x26, 0x91, 0x86, 0x0b, 0x61, 0x40, 0x04, 0xee, 0x0e, 0xf1, 0x77, 0xbc, 0x2b, 0x37,
0xec, 0x60, 0x23, 0x07, 0x0f, 0x26, 0xe6, 0xe0, 0x76, 0x09, 0xfc, 0x44, 0x82, 0x64, 0x89, 0xe8,
0xc0, 0x1d, 0x8a, 0xdb, 0x14, 0xb3, 0x2b, 0x75, 0xea, 0x31, 0xa7, 0xe7, 0x76, 0x89, 0xef, 0xb4,
0x69, 0x14, 0x18, 0x4c, 0x3f, 0x9b, 0xc8, 0xb4, 0xa3, 0x61, 0xe4, 0x31, 0xc9, 0x7e, 0x25, 0x40,
0x9e, 0xd2, 0x28, 0xc8, 0x88, 0x3e, 0x87, 0x7b, 0x8c, 0x74, 0x42, 0x87, 0x84, 0x0e, 0xc3, 0x4c,
0xe4, 0x67, 0x04, 0xd5, 0x47, 0x93, 0x17, 0x25, 0x80, 0xce, 0xc2, 0x0b, 0x0d, 0x53, 0xe2, 0xb2,
0x39, 0x40, 0xbe, 0x93, 0xa3, 0x26, 0x2c, 0xa4, 0xcc, 0xf2, 0x5c, 0x50, 0x67, 0x11, 0x28, 0x10,
0x79, 0x2a, 0xac, 0xc1, 0x2c, 0x61, 0x2c, 0xc1, 0x54, 0x9f, 0xf9, 0xfa, 0x09, 0xbd, 0x07, 0x48,
0xfd, 0x72, 0x5c, 0x26, 0xdc, 0xb1, 0x2f, 0xb6, 0x80, 0x69, 0xe9, 0xb3, 0xac, 0x2c, 0xc7, 0xda,
0x70, 0xe6, 0xdb, 0x5f, 0x4f, 0xc1, 0xd2, 0xc0, 0x8e, 0x2a, 0x8e, 0x85, 0x74, 0x4f, 0xd5, 0xbc,
0xd9, 0x33, 0xfa, 0x0c, 0x76, 0x64, 0x63, 0x67, 0xfb, 0x74, 0xa9, 0xbe, 0x53, 0x93, 0x7b, 0x5c,
0x20, 0xa4, 0xa4, 0x03, 0xa5, 0xdd, 0x87, 0x95, 0xfc, 0x08, 0x88, 0xba, 0xc4, 0x13, 0x47, 0xde,
0x74, 0x73, 0x5a, 0x04, 0x9f, 0x6d, 0xf4, 0x7a, 0x1c, 0x9d, 0x81, 0xdd, 0x8e, 0xc4, 0x39, 0xab,
0x83, 0xc8, 0x66, 0x4a, 0x55, 0xa4, 0xf3, 0x27, 0x8f, 0xd4, 0x6a, 0x6b, 0x5b, 0x7a, 0x2a, 0xb6,
0x94, 0xfb, 0x25, 0xbe, 0xe6, 0x17, 0x32, 0xa3, 0xe8, 0xd7, 0xb0, 0x3f, 0x19, 0xca, 0x79, 0x43,
0xf8, 0x95, 0x13, 0xb4, 0x5d, 0x6b, 0x46, 0x62, 0xde, 0x1d, 0x8b, 0xf9, 0x29, 0xe1, 0x57, 0x2f,
0xda, 0xae, 0xfd, 0x97, 0x0a, 0xac, 0x08, 0xb5, 0x27, 0x8f, 0x9e, 0xb7, 0x42, 0x9e, 0x62, 0x40,
0x66, 0xc0, 0x5a, 0x9c, 0xbe, 0x0b, 0xb3, 0x1d, 0x39, 0xa2, 0xa5, 0x69, 0xe9, 0x54, 0xd5, 0xe6,
0x6f, 0x2c, 0x4b, 0xdf, 0x81, 0xa5, 0x67, 0x58, 0xb1, 0x8c, 0x12, 0x65, 0xbf, 0x04, 0xa4, 0x44,
0xe9, 0x38, 0x2f, 0x74, 0x0f, 0x66, 0x24, 0xb5, 0xee, 0xbd, 0x52, 0x60, 0xca, 0x6a, 0x5f, 0x03,
0x52, 0x5a, 0xb4, 0x00, 0x96, 0x4d, 0xae, 0x8c, 0x9b, 0xfc, 0xed, 0x34, 0xe8, 0x5d, 0x40, 0x4a,
0x83, 0x8e, 0x5d, 0xac, 0x0d, 0xcb, 0xc7, 0xbe, 0xff, 0x42, 0x4a, 0x93, 0x51, 0x3e, 0xf7, 0x60,
0xb5, 0x85, 0x83, 0xa8, 0x87, 0xc7, 0xbb, 0xfd, 0xb5, 0xa2, 0x4a, 0xa8, 0xbc, 0xde, 0x8a, 0xa6,
0xfb, 0x5c, 0x7d, 0xc6, 0x65, 0x11, 0xeb, 0xae, 0xdb, 0x87, 0x39, 0x25, 0xd6, 0xc6, 0x7c, 0x11,
0xa5, 0x1e, 0xdf, 0xb8, 0xf3, 0xfe, 0x5d, 0x85, 0x19, 0x59, 0x8a, 0x52, 0x2b, 0x0d, 0xaa, 0xe6,
0xa9, 0xb2, 0x6a, 0x36, 0x22, 0x9a, 0x9e, 0x18, 0xd1, 0x03, 0x98, 0x8d, 0xde, 0x84, 0xc2, 0xf7,
0xc6, 0x28, 0x5f, 0xed, 0x30, 0xa8, 0x8f, 0x67, 0xca, 0xfa, 0xb8, 0x28, 0xba, 0x67, 0x07, 0x45,
0xf7, 0x50, 0x2d, 0x3b, 0xf7, 0x1d, 0x69, 0xd9, 0xea, 0xff, 0xae, 0x65, 0x9f, 0x43, 0x1d, 0x5f,
0xc7, 0x84, 0xaa, 0xcf, 0x9b, 0x1c, 0x6a, 0x7e, 0x22, 0x14, 0xca, 0xe7, 0x65, 0x68, 0x1f, 0xc0,
0xfa, 0x15, 0xf1, 0xb1, 0x3a, 0x79, 0x5d, 0xdf, 0xa7, 0x98, 0x31, 0xa7, 0x4b, 0x18, 0x67, 0xf2,
0x2b, 0xa3, 0xda, 0xaa, 0x0b, 0xb3, 0x38, 0x52, 0x8f, 0x95, 0x51, 0x74, 0x13, 0x43, 0x3b, 0x00,
0x42, 0xd9, 0x5c, 0x92, 0x2e, 0xe1, 0x7d, 0xfd, 0xd1, 0x61, 0x8c, 0x7c, 0x2f, 0xb8, 0xff, 0x1f,
0x82, 0xfb, 0x27, 0xb0, 0x61, 0x4e, 0x0b, 0x31, 0x77, 0x2e, 0x49, 0xc4, 0x4c, 0xa9, 0x6d, 0x24,
0xef, 0x25, 0xe6, 0x8f, 0x49, 0xc4, 0xe4, 0xcc, 0x93, 0xc9, 0x22, 0x7b, 0x53, 0xce, 0xff, 0x96,
0x42, 0x7a, 0xeb, 0x3b, 0x13, 0xd2, 0xf6, 0x3f, 0x2a, 0xb0, 0x39, 0x66, 0xb6, 0x90, 0x5b, 0x9e,
0xcb, 0x71, 0x27, 0xa2, 0xfd, 0x54, 0x6e, 0xa5, 0xcf, 0xe8, 0x17, 0x80, 0x22, 0xcf, 0x4b, 0x28,
0x2d, 0xbc, 0x8b, 0x93, 0x25, 0xd6, 0x72, 0x3a, 0x2b, 0x5b, 0xf3, 0xfb, 0xb0, 0x16, 0xd3, 0x28,
0xc6, 0x94, 0xf7, 0x1d, 0xcf, 0x4d, 0x58, 0xb6, 0x56, 0x2d, 0x0d, 0xeb, 0xa9, 0xf5, 0x44, 0x19,
0x55, 0x6c, 0x75, 0x98, 0xe9, 0xb9, 0xdd, 0x24, 0xbd, 0x97, 0x50, 0x0f, 0x47, 0x7f, 0xba, 0x01,
0x4b, 0xe9, 0xdd, 0xd5, 0x05, 0xa6, 0x3d, 0xe2, 0x61, 0xe4, 0xc1, 0x82, 0x79, 0xa5, 0x85, 0xb6,
0xf3, 0xd4, 0x0d, 0xb9, 0x9d, 0x6b, 0xec, 0x8c, 0x32, 0xab, 0x6d, 0xdf, 0xae, 0xff, 0xf1, 0x9f,
0xff, 0xfa, 0xf3, 0xd4, 0x4d, 0xb4, 0x70, 0xd8, 0x7b, 0x78, 0x98, 0x5d, 0x78, 0xfd, 0x0e, 0x20,
0xbf, 0xc8, 0x42, 0x9b, 0xc6, 0x51, 0x3d, 0x78, 0xbd, 0xd5, 0x28, 0x6f, 0xb4, 0xf6, 0x8e, 0xc4,
0xb4, 0xd0, 0xaa, 0x89, 0x79, 0xf8, 0x7b, 0xe2, 0x7f, 0xb4, 0xf7, 0xd5, 0xa3, 0xca, 0x1e, 0x72,
0x61, 0xb1, 0x70, 0x03, 0x86, 0x8c, 0x20, 0x87, 0x5d, 0x8d, 0x0d, 0xe3, 0xd8, 0x96, 0x1c, 0xeb,
0x76, 0x21, 0xee, 0x47, 0xd9, 0x4d, 0x56, 0x0c, 0x8b, 0x85, 0xeb, 0x30, 0x93, 0x62, 0xd8, 0x3d,
0xd9, 0x30, 0x8a, 0xf7, 0x24, 0xc5, 0xfd, 0xa3, 0xcd, 0xe2, 0x32, 0xf4, 0xaf, 0x03, 0xb5, 0x9c,
0x8c, 0xd1, 0x87, 0xc5, 0xc2, 0xf5, 0x97, 0xc9, 0x38, 0xec, 0x5e, 0xac, 0xb1, 0x56, 0x6a, 0xab,
0x27, 0x41, 0xcc, 0xfb, 0xf6, 0xa6, 0xa4, 0xbd, 0xb5, 0x37, 0x2c, 0x7b, 0x47, 0x7f, 0x9f, 0x85,
0x45, 0x25, 0x17, 0xd3, 0x7e, 0xf8, 0x2d, 0x40, 0xae, 0x21, 0xcd, 0x52, 0x95, 0xa4, 0x70, 0x63,
0x6b, 0xb8, 0x51, 0x77, 0x02, 0x92, 0xbc, 0x0b, 0x08, 0x04, 0xaf, 0x56, 0x98, 0xaf, 0xa0, 0x9a,
0x2a, 0x47, 0xb4, 0x51, 0xe8, 0x02, 0x53, 0x60, 0x35, 0x06, 0xb5, 0x9c, 0xbd, 0x25, 0xb1, 0xd6,
0xd0, 0x4a, 0x8e, 0x65, 0xd4, 0xff, 0x53, 0xa8, 0x19, 0x62, 0x13, 0x6d, 0x0d, 0x56, 0x7f, 0x3c,
0xf6, 0x86, 0xc4, 0x5e, 0xb5, 0x8d, 0x38, 0x1f, 0x69, 0xed, 0xe8, 0x43, 0xcd, 0x10, 0x9e, 0x26,
0x70, 0x59, 0x8f, 0x96, 0x81, 0xef, 0x4b, 0xe0, 0xe6, 0xd1, 0xba, 0x19, 0xb4, 0xfc, 0xab, 0x6b,
0xad, 0x59, 0x3e, 0x83, 0x9a, 0x21, 0x32, 0x4d, 0x96, 0xb2, 0xf6, 0x1c, 0x59, 0x65, 0xbd, 0x8a,
0xbd, 0x72, 0x86, 0x90, 0x07, 0xf3, 0x99, 0x3c, 0x45, 0x0d, 0xa3, 0x2f, 0x07, 0x34, 0x6b, 0x79,
0x05, 0x0f, 0x24, 0xe8, 0x1d, 0x7b, 0xa7, 0x04, 0x7a, 0xa8, 0x75, 0xd2, 0xe1, 0x5d, 0x8a, 0xdb,
0xa2, 0x06, 0x3d, 0x58, 0x30, 0xf5, 0xad, 0xb9, 0x8d, 0x0c, 0xd1, 0xbd, 0x65, 0xaa, 0x1f, 0x49,
0xaa, 0x87, 0x7b, 0xfb, 0xa3, 0xa9, 0x8c, 0x37, 0xe5, 0xab, 0x8c, 0x97, 0x42, 0xcd, 0x50, 0x9f,
0x68, 0xa0, 0x25, 0x8b, 0x32, 0xba, 0xb1, 0x3d, 0xc2, 0xaa, 0x3b, 0x56, 0x17, 0x0c, 0x4d, 0x58,
0xee, 0xe3, 0xfa, 0x6f, 0x50, 0xfc, 0xba, 0xa3, 0xfe, 0xb3, 0x71, 0xd8, 0x7b, 0xf8, 0xa1, 0x2a,
0xc5, 0xac, 0xfc, 0xf3, 0xc3, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9c, 0x9a, 0x29, 0x88, 0x91,
0x19, 0x00, 0x00,
// 1959 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0x5b, 0x6f, 0x1b, 0xc7,
0x15, 0x06, 0x25, 0x4b, 0xa2, 0x0e, 0x25, 0x4b, 0x1c, 0x31, 0xd2, 0x8a, 0xba, 0x98, 0x59, 0x5b,
0x8e, 0x2c, 0xa5, 0xa2, 0xa1, 0x26, 0xbd, 0x38, 0x4d, 0x01, 0x59, 0xb2, 0x5d, 0xa1, 0xb6, 0x23,
0x50, 0x4e, 0x83, 0x5e, 0x90, 0xc5, 0x6a, 0x77, 0x48, 0x4d, 0xcc, 0xbd, 0x64, 0x66, 0x96, 0x16,
0x53, 0x04, 0x28, 0xfa, 0xd4, 0xb7, 0x3e, 0xf4, 0x87, 0xf4, 0xf2, 0x47, 0xfa, 0xd0, 0x3f, 0x90,
0x87, 0x3e, 0xf5, 0x57, 0x14, 0x73, 0xd9, 0xdd, 0x21, 0x97, 0x97, 0x04, 0x09, 0x50, 0x04, 0xe8,
0x93, 0x76, 0xe7, 0x7c, 0xf3, 0x9d, 0x33, 0xe7, 0x1c, 0xce, 0x7c, 0x3b, 0x82, 0xdb, 0xae, 0xe7,
0x45, 0x49, 0xc8, 0xd9, 0x51, 0x4c, 0x23, 0x1e, 0xa1, 0x32, 0xc3, 0x9c, 0x93, 0xb0, 0xc3, 0xea,
0x77, 0x3a, 0x51, 0xd4, 0xe9, 0xe2, 0xa6, 0x1b, 0x93, 0x66, 0x9b, 0xe0, 0xae, 0xef, 0x5c, 0xe1,
0x6b, 0xb7, 0x47, 0x22, 0xaa, 0xa0, 0xf5, 0x6d, 0x03, 0xe0, 0x86, 0x61, 0xc4, 0x5d, 0x4e, 0xa2,
0x50, 0x13, 0xd5, 0xb7, 0xb4, 0x55, 0xbe, 0x5d, 0x25, 0xed, 0x26, 0x0e, 0x62, 0xde, 0xd7, 0xc6,
0xc6, 0xb0, 0x51, 0x39, 0x08, 0x5c, 0xf6, 0x5a, 0x23, 0xee, 0x0c, 0x23, 0x38, 0x09, 0x30, 0xe3,
0x6e, 0x10, 0x2b, 0x80, 0xfd, 0xf7, 0x12, 0xac, 0x3d, 0x27, 0x8c, 0x9f, 0xe8, 0xf8, 0x5b, 0xf8,
0xf3, 0x04, 0x33, 0x8e, 0x1a, 0xb0, 0x18, 0xbb, 0x1d, 0xec, 0x30, 0xf2, 0x05, 0xb6, 0x4a, 0x8d,
0xd2, 0xfe, 0xdc, 0xe3, 0xd9, 0xaf, 0x4e, 0x4a, 0xad, 0xb2, 0x18, 0xbd, 0x24, 0x5f, 0x60, 0x64,
0x03, 0x48, 0x04, 0x8f, 0x5e, 0xe3, 0xd0, 0x9a, 0x69, 0x94, 0xf6, 0x17, 0x15, 0x44, 0x4e, 0x7c,
0x25, 0x46, 0xd1, 0x4f, 0x01, 0xf2, 0x90, 0xac, 0xd9, 0x46, 0x69, 0xbf, 0x72, 0x5c, 0x3f, 0x52,
0x31, 0x1d, 0xa5, 0x31, 0x1d, 0x3d, 0x15, 0x90, 0x17, 0x2e, 0x7b, 0xdd, 0x5a, 0x6c, 0xa7, 0x8f,
0x68, 0x13, 0xe6, 0x3e, 0x4f, 0x30, 0xed, 0x5b, 0xb7, 0x72, 0x66, 0x35, 0x62, 0x07, 0x50, 0x1b,
0x0c, 0x99, 0xc5, 0x51, 0xc8, 0x30, 0xfa, 0x01, 0x94, 0xd3, 0x32, 0x58, 0xa5, 0xc6, 0xec, 0x7e,
0xe5, 0xb8, 0x7a, 0x94, 0xd6, 0xe1, 0x48, 0xa3, 0x5b, 0x19, 0x04, 0xdd, 0x87, 0x95, 0x10, 0xdf,
0x70, 0x67, 0x78, 0x15, 0xad, 0x65, 0x31, 0x7c, 0x91, 0x2e, 0xc2, 0xbe, 0x0b, 0xd5, 0x67, 0x38,
0xf5, 0x96, 0xe6, 0xe7, 0x36, 0xcc, 0x10, 0x5f, 0x26, 0x66, 0xb1, 0x35, 0x43, 0x7c, 0xfb, 0x12,
0x6a, 0xa7, 0x14, 0xbb, 0x1c, 0x4f, 0xc6, 0xa1, 0x43, 0x58, 0xd0, 0x01, 0x48, 0x67, 0x23, 0x43,
0x4c, 0x11, 0xf6, 0x1f, 0x4a, 0x50, 0xfb, 0x38, 0xf6, 0x8b, 0xac, 0x06, 0x4b, 0x69, 0x1a, 0x0b,
0xfa, 0x00, 0x2a, 0x89, 0x24, 0x51, 0x55, 0x98, 0x99, 0x5a, 0x05, 0x50, 0x70, 0xf1, 0x6c, 0xdf,
0x87, 0xda, 0x19, 0xee, 0xe2, 0x69, 0xeb, 0xb2, 0xff, 0xb4, 0x0c, 0x0b, 0x1a, 0x52, 0x58, 0xf3,
0x3b, 0xb0, 0xa2, 0x63, 0x71, 0x70, 0xe8, 0x5e, 0x75, 0xb1, 0x2f, 0x83, 0x28, 0xb7, 0xd2, 0x5f,
0xcd, 0x13, 0x35, 0x8a, 0x8e, 0x60, 0x8d, 0x30, 0x87, 0x62, 0x16, 0x25, 0xd4, 0xc3, 0x4e, 0xba,
0xc4, 0x59, 0x09, 0xae, 0x12, 0x51, 0x69, 0x69, 0x49, 0x1d, 0xdd, 0x85, 0x65, 0x4f, 0x24, 0x9d,
0x44, 0xa1, 0xc3, 0xfb, 0x31, 0x56, 0xbd, 0xd2, 0x5a, 0x4a, 0x07, 0x5f, 0xf5, 0x63, 0x8c, 0xde,
0x03, 0x20, 0x3e, 0x0e, 0x39, 0xe1, 0x04, 0x33, 0x6b, 0x4e, 0xf6, 0x45, 0x2d, 0x4f, 0xd7, 0x79,
0x66, 0x6b, 0x19, 0x38, 0xf4, 0x36, 0x2c, 0xf9, 0x84, 0xc5, 0x5d, 0xb7, 0xef, 0x84, 0x6e, 0x80,
0xad, 0x79, 0xc9, 0x5c, 0xd1, 0x63, 0x2f, 0xdd, 0x00, 0xa3, 0x3d, 0xb8, 0x1d, 0x53, 0xdc, 0xc6,
0x94, 0x62, 0x5f, 0x81, 0x16, 0x54, 0xfb, 0x64, 0xa3, 0x12, 0xb6, 0x03, 0x90, 0x10, 0xdf, 0x09,
0x93, 0xe0, 0x0a, 0x53, 0xab, 0xdc, 0x28, 0xed, 0xcf, 0xb6, 0x16, 0x13, 0xe2, 0xbf, 0x94, 0x03,
0xc2, 0xdc, 0xc9, 0xcd, 0x8b, 0xca, 0xdc, 0xc9, 0xcc, 0x08, 0x6e, 0x05, 0x2e, 0xe9, 0x5a, 0x20,
0xa9, 0xe5, 0x33, 0x6a, 0x40, 0xc5, 0xc7, 0xcc, 0xa3, 0x24, 0x16, 0x8b, 0xb4, 0x2a, 0x3a, 0xb4,
0x7c, 0x08, 0x9d, 0xc1, 0x6a, 0xec, 0x32, 0xf6, 0x26, 0xa2, 0xbe, 0x13, 0xd3, 0xa8, 0x4d, 0xba,
0xd8, 0x5a, 0x92, 0x75, 0xdf, 0xcc, 0x57, 0x7e, 0xa1, 0x11, 0x17, 0x0a, 0xd0, 0x5a, 0x89, 0x07,
0x07, 0xd0, 0x21, 0x94, 0x03, 0x2c, 0xa2, 0xf8, 0xa8, 0x6d, 0x2d, 0xcb, 0xbc, 0xad, 0xe4, 0xb3,
0x9f, 0xd1, 0x28, 0x89, 0x5b, 0x19, 0x00, 0x3d, 0x85, 0xaa, 0x4c, 0x3b, 0xf6, 0x1d, 0xd9, 0x6b,
0x62, 0xa3, 0xb1, 0x56, 0xc7, 0xf4, 0xda, 0xab, 0x74, 0x17, 0x6a, 0xad, 0xe8, 0x49, 0x67, 0x2e,
0xc7, 0x62, 0x54, 0xf0, 0xf8, 0xb2, 0xe1, 0x4c, 0x9e, 0xea, 0x74, 0x1e, 0x3d, 0x29, 0xe3, 0xf9,
0x31, 0x58, 0x51, 0xe8, 0xc4, 0x14, 0x07, 0x84, 0x61, 0xe6, 0xb0, 0x7e, 0xe8, 0x65, 0xdd, 0x57,
0x93, 0x0d, 0xf5, 0x56, 0x14, 0x5e, 0x68, 0xf3, 0x65, 0x3f, 0xf4, 0xd2, 0x26, 0x1c, 0x9a, 0x48,
0x82, 0x20, 0xe1, 0xc2, 0xe2, 0x10, 0xdf, 0x7a, 0x4b, 0xa6, 0xda, 0x98, 0x78, 0x9e, 0x5a, 0xcf,
0x7d, 0xf4, 0x04, 0xee, 0x0c, 0x78, 0xc4, 0x5e, 0x42, 0x09, 0xef, 0x3b, 0xaa, 0xab, 0xda, 0x04,
0x53, 0x6b, 0x5d, 0xce, 0xdf, 0x36, 0x1c, 0x6b, 0xd0, 0x79, 0x86, 0x41, 0xa7, 0xb0, 0x6b, 0xd2,
0xf8, 0x84, 0x89, 0x84, 0x27, 0x84, 0x5d, 0xa7, 0x6d, 0xb6, 0x21, 0x59, 0xb6, 0x72, 0x96, 0x33,
0x13, 0x23, 0x9b, 0xee, 0xe7, 0xb0, 0x3d, 0x10, 0x8b, 0x1b, 0xa4, 0xbf, 0x26, 0x45, 0x61, 0x49,
0x0a, 0xcb, 0x08, 0xc4, 0x0d, 0xf4, 0xaf, 0x4a, 0xce, 0x7f, 0x1f, 0x36, 0x06, 0x82, 0x88, 0x02,
0x97, 0x84, 0x6a, 0xea, 0xa6, 0x9c, 0x5a, 0x33, 0xbc, 0x4b, 0xa3, 0x9c, 0x76, 0x36, 0x98, 0x82,
0x84, 0x61, 0xea, 0xc4, 0x94, 0x84, 0x1e, 0x89, 0xdd, 0xae, 0x9a, 0x5e, 0x1f, 0x0e, 0xfe, 0x63,
0x86, 0xe9, 0x45, 0x8a, 0x91, 0x2c, 0xce, 0x20, 0x4b, 0xd7, 0x65, 0x5c, 0xd5, 0x2f, 0x6f, 0x88,
0xed, 0xa9, 0x0d, 0x51, 0xcf, 0x3d, 0x3c, 0x77, 0x19, 0x17, 0x15, 0xce, 0x7a, 0xa3, 0x3b, 0xe8,
0x20, 0xa6, 0x51, 0x8f, 0x30, 0x12, 0x85, 0x24, 0xec, 0x38, 0x98, 0xd2, 0x88, 0x32, 0x6b, 0x47,
0xf6, 0xfb, 0x5e, 0xde, 0xef, 0x1f, 0x65, 0x74, 0x17, 0x06, 0xfc, 0x89, 0x40, 0x9b, 0x05, 0x2d,
0x18, 0x99, 0xd8, 0xd5, 0xf0, 0x0d, 0xc7, 0x34, 0x74, 0xbb, 0x2a, 0x23, 0x8c, 0xbb, 0x1c, 0x5b,
0xfb, 0x32, 0x11, 0xd5, 0xd4, 0x24, 0xd2, 0x70, 0x29, 0x0c, 0x88, 0xc0, 0xbd, 0x11, 0x78, 0xc7,
0xbb, 0x76, 0xc3, 0x0e, 0x36, 0x72, 0xf0, 0x60, 0x6a, 0x0e, 0xee, 0x14, 0xc8, 0x4f, 0x25, 0x49,
0x96, 0x88, 0x0e, 0xdc, 0xa5, 0xb8, 0x4d, 0x31, 0xbb, 0x56, 0x07, 0x20, 0x73, 0x7a, 0x6e, 0x97,
0xf8, 0x4e, 0x9b, 0x46, 0x81, 0xe1, 0xe9, 0x67, 0x53, 0x3d, 0xed, 0x6a, 0x1a, 0x79, 0x62, 0xb2,
0x5f, 0x09, 0x92, 0xa7, 0x34, 0x0a, 0x32, 0x47, 0x9f, 0xc1, 0x1e, 0x23, 0x9d, 0xd0, 0x21, 0xa1,
0xc3, 0x30, 0x13, 0xf9, 0x19, 0xe3, 0xea, 0xc3, 0xe9, 0x8b, 0x12, 0x44, 0xe7, 0xe1, 0xa5, 0xa6,
0x29, 0xf8, 0xb2, 0x39, 0x40, 0xbe, 0xa9, 0xa3, 0x06, 0x2c, 0xa5, 0x9e, 0xe5, 0x11, 0xa1, 0x8e,
0x25, 0x50, 0x24, 0xf2, 0x80, 0x58, 0x87, 0x79, 0xc2, 0x58, 0x82, 0xa9, 0x3e, 0xfe, 0xf5, 0x1b,
0x7a, 0x17, 0x90, 0x7a, 0x72, 0x5c, 0x26, 0xe0, 0xd8, 0x17, 0x5b, 0xc0, 0xac, 0xc4, 0xac, 0x2a,
0xcb, 0x89, 0x36, 0x9c, 0xfb, 0xf6, 0x57, 0x33, 0xb0, 0x32, 0xb4, 0xa3, 0xa2, 0x3a, 0x94, 0xd3,
0x3d, 0x55, 0xfb, 0xcd, 0xde, 0xd1, 0xa7, 0xb0, 0x2b, 0x1b, 0x3b, 0xdb, 0xa7, 0x0b, 0xf5, 0x9d,
0x99, 0xde, 0xe3, 0x82, 0x21, 0x75, 0x3a, 0x54, 0xda, 0x43, 0xa8, 0xe6, 0x47, 0x40, 0xd4, 0x25,
0x9e, 0x38, 0xfd, 0x66, 0x1b, 0xb3, 0x22, 0xf8, 0x6c, 0xa3, 0xd7, 0xe3, 0xe8, 0x1c, 0xec, 0x76,
0x24, 0x8e, 0x5c, 0x1d, 0x44, 0x36, 0x53, 0x0a, 0x24, 0x9d, 0x3f, 0x79, 0xba, 0x96, 0x5b, 0x3b,
0x12, 0xa9, 0xbc, 0xa5, 0xbe, 0x5f, 0xe2, 0x1b, 0x7e, 0x29, 0x33, 0x8a, 0x7e, 0x0d, 0x87, 0xd3,
0xa9, 0x9c, 0x37, 0x84, 0x5f, 0x3b, 0x41, 0xdb, 0xb5, 0xe6, 0x24, 0xe7, 0xbd, 0x89, 0x9c, 0x9f,
0x10, 0x7e, 0xfd, 0xa2, 0xed, 0xda, 0x7f, 0x2d, 0x41, 0x55, 0x08, 0x3f, 0x79, 0xf4, 0x7c, 0x2f,
0x94, 0x2a, 0x06, 0x64, 0x06, 0xac, 0x75, 0xea, 0x3b, 0x30, 0xdf, 0x91, 0x23, 0x5a, 0xa5, 0x16,
0x4e, 0x55, 0x6d, 0xfe, 0xda, 0x0a, 0xf5, 0x6d, 0x58, 0x79, 0x86, 0x95, 0x97, 0x71, 0xfa, 0xec,
0x97, 0x80, 0x94, 0x3e, 0x9d, 0x84, 0x42, 0x7b, 0x30, 0x27, 0x5d, 0xeb, 0xde, 0x2b, 0x04, 0xa6,
0xac, 0xf6, 0x0d, 0x20, 0x25, 0x4b, 0x07, 0xc8, 0xb2, 0xc9, 0xa5, 0x49, 0x93, 0xbf, 0x9d, 0x1c,
0xbd, 0x07, 0x48, 0xc9, 0xd1, 0x89, 0x8b, 0xb5, 0x61, 0xf5, 0xc4, 0xf7, 0x5f, 0x48, 0x69, 0x32,
0x0e, 0xb3, 0x07, 0x6b, 0x2d, 0x1c, 0x44, 0x3d, 0x3c, 0x19, 0xf6, 0xb7, 0x92, 0x2a, 0xa1, 0x42,
0x7d, 0x2f, 0x9a, 0xee, 0x33, 0xf5, 0x45, 0x97, 0x45, 0xac, 0xbb, 0xee, 0x10, 0x16, 0x94, 0x58,
0x9b, 0xf0, 0x71, 0x94, 0x22, 0xbe, 0x76, 0xe7, 0xfd, 0xa7, 0x0c, 0x73, 0xb2, 0x14, 0x85, 0x56,
0x1a, 0x16, 0xd0, 0x33, 0x45, 0x01, 0x6d, 0x44, 0x34, 0x3b, 0x35, 0xa2, 0x07, 0x30, 0x1f, 0xbd,
0x09, 0x05, 0xf6, 0xd6, 0x38, 0xac, 0x06, 0x0c, 0xeb, 0xe3, 0xb9, 0xa2, 0x3e, 0x1e, 0x14, 0xdd,
0xf3, 0xc3, 0xa2, 0x7b, 0xa4, 0x96, 0x5d, 0xf8, 0x8e, 0xb4, 0x6c, 0xf9, 0x9b, 0x6b, 0xd9, 0xe7,
0x50, 0xc3, 0x37, 0x31, 0xa1, 0xea, 0x4b, 0x27, 0xa7, 0x5a, 0x9c, 0x4a, 0x85, 0xf2, 0x79, 0x19,
0xdb, 0xfb, 0xb0, 0x71, 0x4d, 0x7c, 0xac, 0x4e, 0x5e, 0xd7, 0xf7, 0x29, 0x66, 0xcc, 0xe9, 0x12,
0xc6, 0x99, 0xfc, 0xca, 0x28, 0xb7, 0x6a, 0xc2, 0x2c, 0x8e, 0xd4, 0x13, 0x65, 0x14, 0xdd, 0xc4,
0xd0, 0x2e, 0x80, 0x50, 0x36, 0x57, 0xa4, 0x4b, 0x78, 0x5f, 0x7f, 0x74, 0x18, 0x23, 0xff, 0x17,
0xdc, 0xff, 0x0b, 0xc1, 0xfd, 0x13, 0xd8, 0x34, 0xa7, 0x85, 0x98, 0x3b, 0x57, 0x24, 0x62, 0xa6,
0xd4, 0x36, 0x92, 0xf7, 0x12, 0xf3, 0xc7, 0x24, 0x62, 0x72, 0xe6, 0xe9, 0x74, 0x91, 0xbd, 0x25,
0xe7, 0x7f, 0x4b, 0x21, 0xbd, 0xfd, 0x9d, 0x09, 0x69, 0xfb, 0x9f, 0x25, 0xd8, 0x9a, 0x30, 0x5b,
0xc8, 0x2d, 0xcf, 0xe5, 0xb8, 0x13, 0xd1, 0x7e, 0x2a, 0xb7, 0xd2, 0x77, 0xf4, 0x0b, 0x40, 0x91,
0xe7, 0x25, 0xf2, 0x5b, 0xfd, 0x9b, 0x48, 0xac, 0xd5, 0x74, 0x56, 0xb6, 0xe6, 0xf7, 0x60, 0x3d,
0xa6, 0x51, 0x8c, 0x29, 0xef, 0x3b, 0x9e, 0x9b, 0xb0, 0x6c, 0xad, 0x5a, 0x1a, 0xd6, 0x52, 0xeb,
0xa9, 0x32, 0xaa, 0xd8, 0x6a, 0x30, 0xd7, 0x73, 0xbb, 0x49, 0x7a, 0x45, 0xa1, 0x5e, 0x8e, 0xff,
0x7c, 0x0b, 0x56, 0xd2, 0x6b, 0xac, 0x4b, 0x4c, 0x7b, 0xc4, 0xc3, 0xc8, 0x83, 0x25, 0xf3, 0x76,
0x0b, 0xed, 0xe4, 0xa9, 0x1b, 0x71, 0x51, 0x57, 0xdf, 0x1d, 0x67, 0x56, 0xdb, 0xbe, 0x5d, 0xfb,
0xe3, 0xbf, 0xfe, 0xfd, 0x97, 0x99, 0xdb, 0x68, 0xa9, 0xd9, 0x7b, 0xd8, 0xcc, 0xee, 0xbe, 0x7e,
0x07, 0x90, 0xdf, 0x69, 0xa1, 0x2d, 0xe3, 0xa8, 0x1e, 0xbe, 0xe9, 0xaa, 0x17, 0x37, 0x5a, 0x7b,
0x57, 0x72, 0x5a, 0x68, 0xcd, 0xe4, 0x6c, 0xfe, 0x9e, 0xf8, 0x1f, 0x1e, 0x7c, 0xf9, 0xa8, 0x74,
0x80, 0x5c, 0x58, 0x1e, 0xb8, 0x0c, 0x43, 0x46, 0x90, 0xa3, 0x6e, 0xc9, 0x46, 0xf9, 0xd8, 0x91,
0x3e, 0x36, 0xec, 0x81, 0xb8, 0x1f, 0x65, 0x97, 0x5a, 0x31, 0x2c, 0x0f, 0xdc, 0x8c, 0x99, 0x2e,
0x46, 0x5d, 0x99, 0x8d, 0x72, 0xf1, 0xae, 0x74, 0x71, 0xff, 0x78, 0x6b, 0x70, 0x19, 0xfa, 0xe9,
0x48, 0x2d, 0x27, 0xf3, 0xe8, 0xc3, 0xf2, 0xc0, 0x4d, 0x98, 0xe9, 0x71, 0xd4, 0x15, 0x59, 0x7d,
0xbd, 0xd0, 0x56, 0x4f, 0x82, 0x98, 0xf7, 0xed, 0x2d, 0xe9, 0xf6, 0xad, 0x83, 0x51, 0xd9, 0x3b,
0xfe, 0xc7, 0x3c, 0x2c, 0x2b, 0xb9, 0x98, 0xf6, 0xc3, 0x6f, 0x01, 0x72, 0x0d, 0x69, 0x96, 0xaa,
0x20, 0x85, 0xeb, 0xdb, 0xa3, 0x8d, 0xba, 0x13, 0x90, 0xf4, 0xbb, 0x84, 0x40, 0xf8, 0xd5, 0x0a,
0xf3, 0x15, 0x94, 0x53, 0xe5, 0x88, 0x36, 0x07, 0xba, 0xc0, 0x14, 0x58, 0xf5, 0x61, 0x2d, 0x67,
0x6f, 0x4b, 0xae, 0x75, 0x54, 0xcd, 0xb9, 0x8c, 0xfa, 0x7f, 0x02, 0x15, 0x43, 0x6c, 0xa2, 0xed,
0xe1, 0xea, 0x4f, 0xe6, 0xde, 0x94, 0xdc, 0x6b, 0xb6, 0x11, 0xe7, 0x23, 0xad, 0x1d, 0x7d, 0xa8,
0x18, 0xc2, 0xd3, 0x24, 0x2e, 0xea, 0xd1, 0x22, 0xf1, 0x7d, 0x49, 0xdc, 0x38, 0xde, 0x30, 0x83,
0x96, 0x7f, 0x75, 0xad, 0xb5, 0x97, 0x4f, 0xa1, 0x62, 0x88, 0x4c, 0xd3, 0x4b, 0x51, 0x7b, 0x8e,
0xad, 0xb2, 0x5e, 0xc5, 0x41, 0x31, 0x43, 0xc8, 0x83, 0xc5, 0x4c, 0x9e, 0xa2, 0xba, 0xd1, 0x97,
0x43, 0x9a, 0xb5, 0xb8, 0x82, 0x07, 0x92, 0xf4, 0xae, 0xbd, 0x5b, 0x20, 0x6d, 0x6a, 0x9d, 0xd4,
0xbc, 0x47, 0x71, 0x5b, 0xd4, 0xa0, 0x07, 0x4b, 0xa6, 0xbe, 0x35, 0xb7, 0x91, 0x11, 0xba, 0xb7,
0xe8, 0xea, 0x47, 0xd2, 0xd5, 0xc3, 0x83, 0xc3, 0xf1, 0xae, 0x8c, 0x5f, 0xca, 0x97, 0x99, 0x5f,
0x0a, 0x15, 0x43, 0x7d, 0xa2, 0xa1, 0x96, 0x1c, 0x94, 0xd1, 0xf5, 0x9d, 0x31, 0x56, 0xdd, 0xb1,
0xba, 0x60, 0x68, 0xca, 0x72, 0x1f, 0xd7, 0x7e, 0x83, 0xe2, 0xd7, 0x1d, 0xf5, 0x4f, 0x8e, 0x66,
0xef, 0xe1, 0x07, 0xaa, 0x14, 0xf3, 0xf2, 0xcf, 0x0f, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x83,
0xbc, 0xbd, 0x54, 0x9c, 0x19, 0x00, 0x00,
}

View File

@@ -242,8 +242,9 @@ message Account {
// The username
// posixaccount MUST uid
string username = 7;
string preferred_name = 7;
// TODO rename to on_premise_? or move to extension? see https://docs.microsoft.com/en-us/graph/extensibility-open-users
// used for exposing the user using ldap
// posixaccount MUST uidnumber
int64 uid_number = 8;

View File

@@ -4,14 +4,17 @@ import (
"context"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"regexp"
"strings"
"github.com/CiscoM31/godata"
"github.com/blevesearch/bleve"
"github.com/blevesearch/bleve/search/query"
"github.com/gofrs/uuid"
"github.com/golang/protobuf/ptypes/empty"
mclient "github.com/micro/go-micro/v2/client"
"github.com/owncloud/ocis-accounts/pkg/config"
@@ -20,6 +23,13 @@ import (
olog "github.com/owncloud/ocis-pkg/v2/log"
settings "github.com/owncloud/ocis-settings/pkg/proto/v0"
"github.com/rs/zerolog/log"
"github.com/tredoe/osutil/user/crypt"
// register crypt functions
_ "github.com/tredoe/osutil/user/crypt/apr1_crypt"
_ "github.com/tredoe/osutil/user/crypt/md5_crypt"
_ "github.com/tredoe/osutil/user/crypt/sha256_crypt"
_ "github.com/tredoe/osutil/user/crypt/sha512_crypt"
)
// New returns a new instance of Service
@@ -80,17 +90,30 @@ type Service struct {
index bleve.Index
}
// the auth request is currently hardcoded and has to macth this regex
// userName eq \"teddy\" and password eq \"F&1!b90t111!\"
var authQuery = regexp.MustCompile(`^username eq '(.*)' and password eq '(.*)'$`) // TODO how is ' escaped in the password?
// an auth request is currently hardcoded and has to match this regex
// login eq \"teddy\" and password eq \"F&1!b90t111!\"
var authQuery = regexp.MustCompile(`^login eq '(.*)' and password eq '(.*)'$`) // TODO how is ' escaped in the password?
// ListAccounts implements the AccountsServiceHandler interface
// the query contains account properties
// TODO id vs onpremiseimmutableid
func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest, res *proto.ListAccountsResponse) (err error) {
var password string
var query query.Query
// check if this looks like an auth request
match := authQuery.FindStringSubmatch(in.Query)
if len(match) == 3 {
in.Query = fmt.Sprintf("preferred_name eq '%s'", match[1]) // todo fetch email? make query configurable
password = match[2]
if password == "" {
return fmt.Errorf("password must not be empty")
}
}
if in.Query != "" {
// parse the query like an odata filter
var q *godata.GoDataFilterQuery
@@ -112,7 +135,8 @@ func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest
log.Debug().Interface("query", query).Msg("using query")
searchRequest := bleve.NewSearchRequest(query)
searchResult, err := s.index.Search(searchRequest)
var searchResult *bleve.SearchResult
searchResult, err = s.index.Search(searchRequest)
log.Debug().Interface("result", searchResult).Msg("result")
res.Accounts = make([]*proto.Account, 0)
@@ -120,7 +144,8 @@ func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest
for _, hit := range searchResult.Hits {
path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", hit.ID)
data, err := ioutil.ReadFile(path)
var data []byte
data, err = ioutil.ReadFile(path)
if err != nil {
log.Error().Err(err).Str("path", path).Msg("could not read account")
continue
@@ -132,20 +157,106 @@ func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest
continue
}
log.Debug().Interface("account", a).Msg("found account")
if password != "" {
if a.PasswordProfile == nil {
log.Debug().Interface("account", a).Msg("no password profile")
return fmt.Errorf("invalid password")
}
if !s.passwordIsValid(a.PasswordProfile.Password, password) {
return fmt.Errorf("invalid password")
}
}
res.Accounts = append(res.Accounts, &a)
}
return nil
}
func (s Service) passwordIsValid(hash string, pwd string) (ok bool) {
defer func() {
if r := recover(); r != nil {
log.Error().Err(fmt.Errorf("%s", r)).Str("hash", hash).Msg("password lib panicked")
}
}()
c := crypt.NewFromHash(hash)
return c.Verify(hash, []byte(pwd)) == nil
}
func cleanupID(id string) (string, error) {
id = filepath.Clean(id)
if id == "." || strings.Contains(id, "/") {
return "", errors.New("bad request")
}
return id, nil
}
// GetAccount implements the AccountsServiceHandler interface
func (s Service) GetAccount(c context.Context, req *proto.GetAccountRequest, res *proto.Account) (err error) {
return errors.New("not implemented")
var id string
if id, err = cleanupID(req.Id); err != nil {
return
}
path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id)
var data []byte
data, err = ioutil.ReadFile(path)
if err != nil {
log.Error().Err(err).Str("path", path).Msg("could not read account")
// TODO we need error handling ... eg Not Found
return fmt.Errorf("account not found")
}
err = json.Unmarshal(data, res)
if err != nil {
log.Error().Err(err).Str("path", path).Msg("could not unmarshal account")
return fmt.Errorf("internal server error")
}
log.Debug().Interface("account", res).Msg("found account")
return
}
// CreateAccount implements the AccountsServiceHandler interface
func (s Service) CreateAccount(c context.Context, req *proto.CreateAccountRequest, res *proto.Account) (err error) {
return errors.New("not implemented")
var id string
if req.Id == "" {
req.Id = uuid.Must(uuid.NewV4()).String()
}
// we are always ignoring the id in the account here ... hmm just do away with the extra id property?
req.Account.Id = req.Id
if id, err = cleanupID(req.Id); err != nil {
return
}
path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id)
if req.Account.PasswordProfile != nil && req.Account.PasswordProfile.Password != "" {
// encrypt password
c := crypt.New(crypt.SHA512)
if req.Account.PasswordProfile.Password, err = c.Generate([]byte(req.Account.PasswordProfile.Password), nil); err != nil {
req.Account.PasswordProfile.Password = "***REMOVED***"
log.Error().Err(err).Str("id", id).Interface("account", req.Account).Msg("could not hash password")
return
}
}
var bytes []byte
bytes, err = json.Marshal(req.GetAccount)
if err = ioutil.WriteFile(path, bytes, 0600); err != nil {
req.Account.PasswordProfile.Password = "***REMOVED***"
log.Error().Err(err).Str("id", id).Str("path", path).Interface("account", req.Account).Msg("could not persist new account")
return
}
if err = s.index.Index(id, req.Account); err != nil {
req.Account.PasswordProfile.Password = "***REMOVED***"
log.Error().Err(err).Str("id", id).Str("path", path).Interface("account", req.Account).Msg("could not index new account")
return
}
return
}
// UpdateAccount implements the AccountsServiceHandler interface
@@ -155,7 +266,22 @@ func (s Service) UpdateAccount(c context.Context, req *proto.UpdateAccountReques
// DeleteAccount implements the AccountsServiceHandler interface
func (s Service) DeleteAccount(c context.Context, req *proto.DeleteAccountRequest, res *empty.Empty) (err error) {
return errors.New("not implemented")
var id string
if id, err = cleanupID(req.Id); err != nil {
return
}
path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id)
if err = os.Remove(path); err != nil {
log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove account")
return
}
if err = s.index.Delete(id); err != nil {
log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove account from index")
return
}
return os.Remove(path)
}
// ListGroups implements the AccountsServiceHandler interface