diff --git a/assets/web/css/styles.css b/assets/web/css/styles.css index 0931783..611b274 100644 --- a/assets/web/css/styles.css +++ b/assets/web/css/styles.css @@ -102,16 +102,6 @@ body, h1 a { } } -.forms { - margin: 0 auto; - width: 40%; -} - -form { - display: inline-block; - width: 30%; -} - @media only screen and (max-width: 1170px) { .grid-lg { display: block; @@ -200,7 +190,14 @@ button { background-color: var(--blue); } -.item { +.item, .forms { display: flex; +} +.item { justify-content: center; +} +.forms { + width: 40%; + margin: 0 auto; + justify-content: space-around; } \ No newline at end of file diff --git a/assets/web/javascript/app.js b/assets/web/javascript/app.js index cc81d04..8f4d0ff 100644 --- a/assets/web/javascript/app.js +++ b/assets/web/javascript/app.js @@ -27,7 +27,7 @@ function getFileListing(provider, path = "") {
- +
@@ -81,7 +81,6 @@ function getProviders() { // Dumb router function for passing around values from the hash. function router(event = null) { let hash = location.hash.replace("#", "") - console.log(hash) // If hash is empty, "redirect" to index. if (hash === "") { getProviders() diff --git a/files/backblaze.go b/files/backblaze.go index b414c9e..ce09b97 100644 --- a/files/backblaze.go +++ b/files/backblaze.go @@ -138,7 +138,11 @@ func (bp *BackblazeProvider) GetDirectory(path string) Directory { return finalDir } -func (bp *BackblazeProvider) ViewFile(path string, w io.Writer) { +func (bp *BackblazeProvider) ViewFile(path string) string { + return "" +} + +func (bp *BackblazeProvider) RemoteFile(path string, w io.Writer) { client := &http.Client{} // Get bucket name >:( bucketIdPayload := fmt.Sprintf(`{"accountId": "%s", "bucketId": "%s"}`, bp.Name, bp.Bucket) @@ -244,7 +248,6 @@ func (bp *BackblazeProvider) SaveFile(file io.Reader, filename string, path stri req.Header.Add("X-Bz-Content-Sha1", fmt.Sprintf("%x", fileSha.Sum(nil))) req.ContentLength = int64(len(bodyBytes)) - // Upload in background. res, err = client.Do(req) if err != nil { fmt.Println(err.Error()) @@ -254,10 +257,10 @@ func (bp *BackblazeProvider) SaveFile(file io.Reader, filename string, path stri return true } -func (bp *BackblazeProvider) DetermineType(path string) string { +func (bp *BackblazeProvider) ObjectInfo(path string) (string, string) { // B2 is really a "flat" filesystem, with directories being virtual. // Therefore, we can assume everything is a file ;) - return "file" + return "file", "remote" } func (bp *BackblazeProvider) CreateDirectory(path string) bool { diff --git a/files/disk.go b/files/disk.go index 004bb51..aea3f45 100644 --- a/files/disk.go +++ b/files/disk.go @@ -42,16 +42,13 @@ func (dp *DiskProvider) GetDirectory(path string) Directory { } } -func (dp *DiskProvider) ViewFile(path string, w io.Writer) { - file := strings.Join([]string{dp.Location,path}, "/") - fileReader, err := os.Open(file) - if err != nil { - return - } - _, err = io.Copy(w, fileReader) - if err != nil { - return - } +func (dp *DiskProvider) ViewFile(path string) string { + rp := strings.Join([]string{dp.Location,path}, "/") + return rp +} + +func (dp *DiskProvider) RemoteFile(path string, writer io.Writer) { + return } func (dp *DiskProvider) SaveFile(file io.Reader, filename string, path string) bool { @@ -71,17 +68,18 @@ func (dp *DiskProvider) SaveFile(file io.Reader, filename string, path string) b return true } -func (dp *DiskProvider) DetermineType(path string) string { +func (dp *DiskProvider) ObjectInfo(path string) (string, string) { rp := strings.Join([]string{dp.Location,path}, "/") - file, err := os.Stat(rp) + fileStat, err := os.Stat(rp) if err != nil { - return "" - } - if file.IsDir() { - return "directory" + fmt.Printf("error stat'ing file %v: %v", rp, err.Error()) + return "", "" } - return "file" + if fileStat.IsDir() { + return "directory", "" + } + return "file", "local" } func (dp *DiskProvider) CreateDirectory(path string) bool { diff --git a/files/fileprovider.go b/files/fileprovider.go index ab1163e..15b9dbe 100644 --- a/files/fileprovider.go +++ b/files/fileprovider.go @@ -31,9 +31,10 @@ type FileContents struct { type FileProviderInterface interface { Setup(args map[string]string) bool GetDirectory(path string) Directory - ViewFile(path string, w io.Writer) + ViewFile(path string) string + RemoteFile(path string, writer io.Writer) SaveFile(file io.Reader, filename string, path string) bool - DetermineType(path string) string + ObjectInfo(path string) (string, string) CreateDirectory(path string) bool Delete(path string) bool } @@ -47,7 +48,11 @@ func (f FileProvider) GetDirectory(path string) Directory { return Directory{} } -func (f FileProvider) ViewFile(path string, w io.Writer) { +func (f FileProvider) ViewFile(path string) string { + return "" +} + +func (f FileProvider) RemoteFile(path string, writer io.Writer) { return } @@ -55,8 +60,8 @@ func (f FileProvider) SaveFile(file io.Reader, filename string, path string) boo return false } -func (f FileProvider) DetermineType(path string) string { - return "" +func (f FileProvider) ObjectInfo(path string) (string, string) { + return "", "" } func (f FileProvider) CreateDirectory(path string) bool { @@ -65,5 +70,4 @@ func (f FileProvider) CreateDirectory(path string) bool { func (f FileProvider) Delete(path string) bool { return false -} - +} \ No newline at end of file diff --git a/files/files_test.go b/files/files_test.go index b32607b..7d09b34 100644 --- a/files/files_test.go +++ b/files/files_test.go @@ -24,8 +24,7 @@ func TestFileProvider(t *testing.T) { t.Errorf("Default FileProvider GetDirectory() files returned %v, expected none.", getdirectory.Files) } - var w bytes.Buffer - fp.ViewFile("", &w); if len(w.Bytes()) > 0 { + viewfile := fp.ViewFile(""); if viewfile != "" { t.Errorf("Default FileProvider ViewFile() %v, expected nothing.", w) } @@ -33,8 +32,8 @@ func TestFileProvider(t *testing.T) { t.Errorf("Default FileProvider SaveFile() attempted to save a file.") } - determinetype := fp.DetermineType(""); if determinetype != "" { - t.Errorf("Default FileProvider DetermineType() did not return an empty string.") + determinetype := fp.ObjectInfo(""); if determinetype != "" { + t.Errorf("Default FileProvider ObjectInfo() did not return an empty string.") } createdirectory := fp.CreateDirectory(""); if createdirectory { @@ -88,10 +87,8 @@ func TestDiskProvider(t *testing.T) { t.Errorf("DiskProvider GetDirectory() files returned %v, expected 1.", getdirectory.Files) } - var w bytes.Buffer - dp.ViewFile("testing.txt", &w); if w.String() != "testing file!" { - fmt.Println(w) - t.Errorf("DiskProvider ViewFile() returned %v, expected \"testing file!\".", w.String()) + viewfile := dp.ViewFile("testing.txt"); if viewfile != DISK_TESTING_GROUNDS + "testing.txt"{ + t.Errorf("DiskProvider ViewFile() returned %v, expected path.", viewfile) } testfile := bytes.NewReader([]byte("second test file!")) @@ -99,8 +96,8 @@ func TestDiskProvider(t *testing.T) { t.Errorf("DiskProvider SaveFile() could not save a file.") } - determinetype := dp.DetermineType("second_test.txt"); if determinetype != "file" { - t.Errorf("DiskProvider DetermineType() returned %v, expected \"file\".", determinetype) + determinetype := dp.ObjectInfo("second_test.txt"); if determinetype != "file" { + t.Errorf("DiskProvider ObjectInfo() returned %v, expected \"file\".", determinetype) } createdirectory := dp.CreateDirectory("test_dir"); if !createdirectory { diff --git a/router/filerouter.go b/router/filerouter.go index 61dfe4f..e5f4561 100644 --- a/router/filerouter.go +++ b/router/filerouter.go @@ -7,8 +7,10 @@ import ( "github.com/gorilla/mux" "net/http" "net/url" + "os" "sort" "strings" + "time" ) func HandleProvider() Handler { @@ -29,7 +31,8 @@ func HandleProvider() Handler { StatusCode: http.StatusInternalServerError, } } - fileType := provider.DetermineType(filename) + fileType, location := provider.ObjectInfo(filename) + if fileType == "" { return &HTTPError{ Message: fmt.Sprintf("error determining filetype for %s\n", filename), @@ -37,7 +40,16 @@ func HandleProvider() Handler { } } if fileType == "file" { - provider.ViewFile(filename, w) + if location == "local" { + rp := provider.ViewFile(filename) + if rp != "" { + f, _ := os.Open(rp) + http.ServeContent(w, r, filename, time.Time{}, f) + } + } + if location == "remote" { + provider.RemoteFile(filename, w) + } return nil } fileList = provider.GetDirectory(filename)