aboutsummaryrefslogtreecommitdiff
path: root/cluefs_frontend/fe_fs.go
diff options
context:
space:
mode:
Diffstat (limited to 'cluefs_frontend/fe_fs.go')
-rw-r--r--cluefs_frontend/fe_fs.go46
1 files changed, 46 insertions, 0 deletions
diff --git a/cluefs_frontend/fe_fs.go b/cluefs_frontend/fe_fs.go
new file mode 100644
index 0000000..2b12da6
--- /dev/null
+++ b/cluefs_frontend/fe_fs.go
@@ -0,0 +1,46 @@
+package cluefs_frontend
+
+// frontend sits between FUSE and ClueFS
+// and uses cryptfs for all crypto operations
+//
+// cryptfs
+// ^
+// |
+// v
+// FUSE <-> frontend <-> ClueFS
+//
+// This file handles just the root directory
+
+import (
+ "github.com/rfjakob/gocryptfs/cryptfs"
+ "github.com/rfjakob/cluefs/lib/cluefs"
+ fusefs "bazil.org/fuse/fs"
+)
+
+type FS struct {
+ *cryptfs.CryptFS
+ *cluefs.ClueFS
+ backing string
+}
+
+type nullTracer struct {}
+
+func (nullTracer) Trace(op cluefs.FsOperTracer) {}
+
+func NewFS(key [16]byte, backing string, useOpenssl bool) (*FS, error) {
+ var tracer nullTracer
+ clfs, err := cluefs.NewClueFS(backing, tracer)
+ if err != nil {
+ return nil, err
+ }
+ return &FS {
+ CryptFS: cryptfs.NewCryptFS(key, useOpenssl),
+ ClueFS: clfs,
+ backing: backing,
+ }, nil
+}
+
+func (fs *FS) Root() (fusefs.Node, error) {
+ cryptfs.Debug.Printf("Root\n")
+ return NewDir("", fs.backing, fs), nil
+}