Read-only is working

This commit is contained in:
Quentin 2021-08-20 08:02:36 +02:00
parent 8f7e8d2c73
commit 55e9aa7018
1 changed files with 51 additions and 9 deletions

60
main.go
View File

@ -29,12 +29,20 @@ type garageCtx struct {
StatCache map[string]*GarageStat
}
func EnvOrDefault(key, def string) string {
if val, ok := os.LookupEnv(key); ok {
return val
}
return def
}
func main() {
pathPrefix := "/webdav"
UserBaseDN := "ou=users,dc=deuxfleurs,dc=fr"
UserNameAttr := "cn"
Endpoint := "garage.deuxfleurs.fr"
UseSSL := true
pathPrefix := EnvOrDefault("BAGAGE_WEBDAV_PREFIX", "/webdav")
LdapServer := EnvOrDefault("BAGAGE_LDAP_ENDPOINT", "127.0.0.1:1389")
UserBaseDN := EnvOrDefault("BAGAGE_LDAP_USER_BASE_DN", "ou=users,dc=deuxfleurs,dc=fr")
UserNameAttr := EnvOrDefault("BAGAGE_LDAP_USERNAME_ATTR", "cn")
Endpoint := EnvOrDefault("BAGAGE_S3_ENDPOINT", "garage.deuxfleurs.fr")
UseSSL := EnvOrDefault("BAGAGE_S3_SSL", "true") == "true"
srv := &webdav.Handler{
Prefix: pathPrefix,
@ -54,7 +62,7 @@ func main() {
return
}
ldapSock, err := ldap.Dial("tcp", "127.0.0.1:1389")
ldapSock, err := ldap.Dial("tcp", LdapServer)
if err != nil {
log.Println(err)
InternalError(w, r)
@ -177,6 +185,8 @@ func (s *GarageFS) Stat(ctx context.Context, name string) (os.FileInfo, error) {
type GarageFile struct {
ctx context.Context
mc *minio.Client
obj *minio.Object
stat *GarageStat
path string
}
@ -185,15 +195,44 @@ func NewGarageFile(ctx context.Context, path string) (webdav.File, error) {
gf.ctx = ctx
gf.mc = ctx.Value(garageEntry).(garageCtx).MC
gf.path = path
stat, err := NewGarageStat(ctx, path)
if err != nil {
return nil, err
}
gf.stat = stat
return gf, nil
}
func (gf *GarageFile) Close() error {
return errors.New("not implemented Close")
if gf.obj == nil {
return nil
}
err := gf.obj.Close()
gf.obj = nil
return err
}
func (gf *GarageFile) loadObject() error {
if gf.obj == nil {
log.Println("Called GetObject on", gf.path)
obj, err := gf.mc.GetObject(gf.ctx, gf.stat.bucket, gf.stat.obj.Key, minio.GetObjectOptions{})
if err != nil {
return err
}
gf.obj = obj
}
return nil
}
func (gf *GarageFile) Read(p []byte) (n int, err error) {
return 0, errors.New("not implemented Read")
if gf.stat.Mode().IsDir() {
return 0, os.ErrInvalid
}
if err := gf.loadObject(); err != nil {
return 0, err
}
return gf.obj.Read(p)
}
func (gf *GarageFile) Write(p []byte) (n int, err error) {
@ -201,7 +240,10 @@ func (gf *GarageFile) Write(p []byte) (n int, err error) {
}
func (gf *GarageFile) Seek(offset int64, whence int) (int64, error) {
return 0, errors.New("not implemented Seek")
if err := gf.loadObject(); err != nil {
return 0, err
}
return gf.obj.Seek(offset, whence)
}
/*