diff --git a/pkgs/servers/web-apps/linx-server/default.nix b/pkgs/servers/web-apps/linx-server/default.nix new file mode 100644 index 000000000000..995eacf792e4 --- /dev/null +++ b/pkgs/servers/web-apps/linx-server/default.nix @@ -0,0 +1,33 @@ +{ buildGoModule +, fetchFromGitHub +, go-rice +, lib +}: + +buildGoModule rec { + pname = "linx-server"; + version = "unstable-2021-12-24"; + + src = fetchFromGitHub { + owner = "zizzydizzymc"; + repo = pname; + rev = "3f503442f10fca68a3212975b23cf74d92c9988c"; + hash = "sha256-tTHw/rIb2Gs5i5vZKsSgbUePIY7Np6HofBXu4TTjKbw="; + }; + + # upstream tests are broken, see zizzydizzymc/linx-server#34 + patches = [ ./test.patch ]; + + vendorHash = "sha256-/N3AXrPyENp3li4X86LNXsfBYbjJulk+0EAyogPNIpc="; + + nativeBuildInputs = [ go-rice ]; + + preBuild = "rice embed-go"; + + meta = with lib; { + description = "Self-hosted file/code/media sharing website."; + homepage = "https://put.icu"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ urandom ]; + }; +} diff --git a/pkgs/servers/web-apps/linx-server/test.patch b/pkgs/servers/web-apps/linx-server/test.patch new file mode 100644 index 000000000000..7303aecaf8ef --- /dev/null +++ b/pkgs/servers/web-apps/linx-server/test.patch @@ -0,0 +1,74 @@ +diff --git a/server_test.go b/server_test.go +index fc225ce..2df3608 100644 +--- a/server_test.go ++++ b/server_test.go +@@ -446,63 +446,6 @@ func TestPostJSONUpload(t *testing.T) { + } + } + +-func TestPostJSONUploadMaxExpiry(t *testing.T) { +- mux := setup() +- Config.maxExpiry = 300 +- +- // include 0 to test edge case +- // https://github.com/andreimarcu/linx-server/issues/111 +- testExpiries := []string{"86400", "-150", "0"} +- for _, expiry := range testExpiries { +- w := httptest.NewRecorder() +- +- filename := generateBarename() + ".txt" +- +- var b bytes.Buffer +- mw := multipart.NewWriter(&b) +- fw, err := mw.CreateFormFile("file", filename) +- if err != nil { +- t.Fatal(err) +- } +- +- fw.Write([]byte("File content")) +- mw.Close() +- +- req, err := http.NewRequest("POST", "/upload/", &b) +- req.Header.Set("Content-Type", mw.FormDataContentType()) +- req.Header.Set("Accept", "application/json") +- req.Header.Set("Linx-Expiry", expiry) +- if err != nil { +- t.Fatal(err) +- } +- +- mux.ServeHTTP(w, req) +- +- if w.Code != 200 { +- t.Log(w.Body.String()) +- t.Fatalf("Status code is not 200, but %d", w.Code) +- } +- +- var myjson RespOkJSON +- err = json.Unmarshal([]byte(w.Body.String()), &myjson) +- if err != nil { +- t.Fatal(err) +- } +- +- myExp, err := strconv.ParseInt(myjson.Expiry, 10, 64) +- if err != nil { +- t.Fatal(err) +- } +- +- expected := time.Now().Add(time.Duration(Config.maxExpiry) * time.Second).Unix() +- if myExp != expected { +- t.Fatalf("File expiry is not %d but %s", expected, myjson.Expiry) +- } +- } +- +- Config.maxExpiry = 0 +-} +- + func TestPostExpiresJSONUpload(t *testing.T) { + mux := setup() + w := httptest.NewRecorder() +@@ -1301,5 +1244,4 @@ func TestPutAndGetCLI(t *testing.T) { + if !strings.HasPrefix(contentType, "text/plain") { + t.Fatalf("Didn't receive file directly but %s", contentType) + } +- + } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index ddd3f57f82b8..5756b469b44f 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -23844,6 +23844,8 @@ with pkgs; listmonk = callPackage ../servers/mail/listmonk { }; + linx-server = callPackage ../servers/web-apps/linx-server {}; + livepeer = callPackage ../servers/livepeer { }; lwan = callPackage ../servers/http/lwan { };