diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..7474209 --- /dev/null +++ b/.envrc @@ -0,0 +1,36 @@ +# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH +# SPDX-License-Identifier: Apache-2.0 + +export_or_unset() +{ + local var=$1 + + if [ -z "${!var+x}" ]; then + return + fi + + if [ -n "$2" ]; then + export $var="$2" + else + unset $var + fi + +} + +if direnv_version "2.30.0" \ +&& has nix \ +&& nix show-config experimental-features 2>/dev/null | grep -wqF flakes +then + local oldtmp="$TMP" + local oldtemp="$TEMP" + local oldtmpdir="$TMPDIR" + local oldtempdir="$TEMPDIR" + + watch_file ./nix/*.nix + use flake . + + export_or_unset TMP "$oldtmp" + export_or_unset TEMP "$oldtemp" + export_or_unset TMPDIR "$oldtmpdir" + export_or_unset TEMPDIR "$oldtempdir" +fi diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..39cbda9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH +# SPDX-License-Identifier: Apache-2.0 + +/server +/server.exe +/turn-api-auth +/turn-api-auth.exe + +.direnv diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 936c5a3..9edd99b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,9 +9,20 @@ variables: stages: +- test - packaging - latest +test:reuse: + stage: test + image: + name: fsfe/reuse:latest + entrypoint: [""] + script: + - reuse lint + tags: + - docker + pkg:docker: stage: packaging image: docker:20.10 diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 0000000..e72aafa --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,8 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: VILLASnode WebRTC Signaling Server +Upstream-Contact: Steffen Vogel +Source: https://fein-aachen.org/en/projects/villas-node/ + +Files: flake.lock +Copyright: 2023 OPAL-RT Germany GmbH +License: Apache-2.0 \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 0ed9138..d6c3a8a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,4 +1,7 @@ { + // SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH + // SPDX-License-Identifier: Apache-2.0 + // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 diff --git a/Dockerfile b/Dockerfile index f0de177..ffd702f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # SPDX-FileCopyrightText: 2023 Institute for Automation of Complex Power Systems # SPDX-License-Identifier: Apache-2.0 -FROM golang:1.20-alpine AS builder +FROM golang:1.22-alpine AS builder WORKDIR /app diff --git a/cmd/server/api.go b/cmd/server/api.go index f9ffd8e..ab1b340 100644 --- a/cmd/server/api.go +++ b/cmd/server/api.go @@ -6,11 +6,11 @@ package main import ( "errors" "fmt" + "log/slog" "net/http" "github.com/VILLASframework/signaling/pkg" "github.com/gorilla/mux" - "golang.org/x/exp/slog" ) type apiErrorResponse struct { @@ -116,6 +116,7 @@ func handleAPIPeer(w http.ResponseWriter, r *http.Request) { switch r.Method { case "POST": req := &apiPeerRequest{} + slog.Info("Reading request body", slog.Any("req", req)) if !readJSON(w, r, req) { return } diff --git a/cmd/server/api_helpers.go b/cmd/server/api_helpers.go index b4ef89f..1f9d367 100644 --- a/cmd/server/api_helpers.go +++ b/cmd/server/api_helpers.go @@ -6,9 +6,8 @@ package main import ( "encoding/json" "fmt" + "log/slog" "net/http" - - "golang.org/x/exp/slog" ) func writeJSON(w http.ResponseWriter, resp any) bool { @@ -25,11 +24,12 @@ func writeJSON(w http.ResponseWriter, resp any) bool { } func readJSON(w http.ResponseWriter, r *http.Request, req any) bool { + slog.Info("Reading request body") if err := json.NewDecoder(r.Body).Decode(req); err != nil { writeError(w, http.StatusBadRequest, fmt.Errorf("failed to parse request body: %w", err)) return false } - + slog.Info("Read request body", slog.Any("req", req)) return true } @@ -38,14 +38,16 @@ func writeError(w http.ResponseWriter, code int, err error) bool { Error: err.Error(), Status: http.StatusText(code), } + slog.Info("Writing error response", slog.Any("resp", resp)) slog.Error("Request failed", slog.Any("error", err)) - if writeJSON(w, resp) { - w.WriteHeader(code) + // if writeJSON(w, resp) { + // slog.Info("wrote json") + // w.WriteHeader(code) - return true - } + // return true + // } return false } diff --git a/cmd/server/connection.go b/cmd/server/connection.go index 98191d1..36d3ef6 100644 --- a/cmd/server/connection.go +++ b/cmd/server/connection.go @@ -6,12 +6,12 @@ package main import ( "errors" "fmt" + "log/slog" "net/http" "time" "github.com/VILLASframework/signaling/pkg" "github.com/gorilla/websocket" - "golang.org/x/exp/slog" ) type Connection struct { @@ -225,7 +225,7 @@ func (c *Connection) closed() { c.logger.Error("Failed to send control message", slog.Any("error", err)) } - // Remove peer if it does not have any signal metadata associated + // Remove peer if it does not have any signal metadata associated. if c.peer.signals == nil { if err := c.peer.session.RemovePeer(c.peer); err != nil { c.logger.Error("Failed to close peer", slog.Any("error", err)) diff --git a/cmd/server/main.go b/cmd/server/main.go index 728d3f0..4b6732e 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -7,6 +7,7 @@ import ( "context" "flag" "fmt" + "log/slog" "net/http" "os" "os/signal" @@ -18,7 +19,6 @@ import ( "github.com/gorilla/mux" "github.com/gorilla/websocket" "github.com/prometheus/client_golang/prometheus/promhttp" - "golang.org/x/exp/slog" ) type relayInfos []pkg.RelayInfo @@ -74,15 +74,35 @@ func main() { r := mux.NewRouter() - r.Use( + a := r.PathPrefix("/api/v1").Subrouter() + + a.Use( func(next http.Handler) http.Handler { return promhttp.InstrumentHandlerCounter(metricHttpRequestsTotal, next) }, func(next http.Handler) http.Handler { return promhttp.InstrumentHandlerDuration(metricHttpRequestDuration, next) }, + func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Add("Content-Type", "application/json") + next.ServeHTTP(w, r) + }) + }, ) + a.Path("/sessions"). + Methods("GET"). + HandlerFunc(basicAuth(handleAPISessions)) + + a.Path("/session/{session}"). + Methods("GET"). + HandlerFunc(handleAPISession) + + a.Path("/peer/{session}/{peer}"). + Methods("GET", "POST", "DELETE"). + HandlerFunc(handleAPIPeer) + r.Path("/metrics"). Methods("GET"). Handler(promhttp.Handler()) @@ -105,31 +125,12 @@ func main() { r.Path("/{session}/{peer}"). HandlerFunc(handleWebsocket) - a := r.PathPrefix("/api/v1").Subrouter() - - a.Use(func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - w.Header().Add("Content-Type", "application/json") - next.ServeHTTP(w, r) - }) - }) - - a.Path("/sessions"). - Methods("GET"). - HandlerFunc(basicAuth(handleAPISessions)) - - a.Path("/session/{session}"). - Methods("GET"). - HandlerFunc(handleAPISession) - - a.Path("/peer/{session}/{peer}"). - Methods("GET", "POST", "DELETE"). - HandlerFunc(handleAPIPeer) - r.PathPrefix("/"). - HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - writeError(w, http.StatusBadRequest, fmt.Errorf("invalid request")) - }) + HandlerFunc(handleWebsocket) + // HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // slog.Info("Invalid request", slog.Any("path", r.URL.Path)) + // writeError(w, http.StatusBadRequest, fmt.Errorf("invalid request")) + // }) expiryTicker := time.NewTicker(10 * time.Second) diff --git a/cmd/server/peer.go b/cmd/server/peer.go index 3b919b4..ab29057 100644 --- a/cmd/server/peer.go +++ b/cmd/server/peer.go @@ -4,11 +4,11 @@ package main import ( + "log/slog" "sync" "time" "github.com/VILLASframework/signaling/pkg" - "golang.org/x/exp/slog" ) const ( diff --git a/cmd/server/session.go b/cmd/server/session.go index cb8cf88..b3ea3f3 100644 --- a/cmd/server/session.go +++ b/cmd/server/session.go @@ -5,12 +5,12 @@ package main import ( "fmt" + "log/slog" "sync" "sync/atomic" "time" "github.com/VILLASframework/signaling/pkg" - "golang.org/x/exp/slog" ) const sessionExpiryAge = time.Hour diff --git a/cmd/server/ws.go b/cmd/server/ws.go index 53e7da2..abbe168 100644 --- a/cmd/server/ws.go +++ b/cmd/server/ws.go @@ -33,7 +33,7 @@ func handleWebsocket(w http.ResponseWriter, r *http.Request) { } if err := peer.Connect(w, r); err != nil { - writeError(w, http.StatusBadRequest, fmt.Errorf("failed to connect: %w", err)) + writeError(w, http.StatusInternalServerError, fmt.Errorf("failed to connect peer: %w", err)) return } } diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..d4bb8ec --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1686089707, + "narHash": "sha256-LTNlJcru2qJ0XhlhG9Acp5KyjB774Pza3tRH0pKIb3o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "af21c31b2a1ec5d361ed8050edd0303c31306397", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..8da5f91 --- /dev/null +++ b/flake.nix @@ -0,0 +1,63 @@ +# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH +# SPDX-License-Identifier: Apache-2.0 +{ + description = "a tool for connecting real-time power grid simulation equipment"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + }; + + outputs = { + self, + nixpkgs, + } @ inputs: let + inherit (nixpkgs) lib; + supportedSystems = ["x86_64-linux" "aarch64-linux"]; + forSupportedSystems = lib.genAttrs supportedSystems; + in { + formatter = forSupportedSystems (system: nixpkgs.legacyPackages.${system}.alejandra); + apps = forSupportedSystems ( + system: let + inherit (self.packages.${system}) server; + in { + turn-api-auth = { + type = "app"; + program = "${server}/bin/turn-api-auth"; + }; + } + ); + packages = forSupportedSystems ( + system: let + pkgs = nixpkgs.legacyPackages.${system}; + in rec { + default = server; + server = pkgs.callPackage ./packaging/nix/server.nix { + src = ./.; + }; + } + ); + devShells = forSupportedSystems ( + system: let + shellHook = ''[ -z "$PS1" ] || exec $SHELL''; + pkgs = nixpkgs.legacyPackages.${system}; + packages = [pkgs.bashInteractive]; + in { + default = pkgs.mkShell { + inherit shellHook packages; + name = "villas-signaling-server"; + inputsFrom = [self.packages.${system}.server]; + }; + } + ); + checks = forSupportedSystems ( + system: let + pkgs = nixpkgs.legacyPackages.${system}; + in { + fmt = pkgs.runCommand "check-fmt" {} '' + cd ${self} + ${pkgs.alejandra}/bin/alejandra --check . 2> $out + ''; + } + ); + }; +} diff --git a/go.mod b/go.mod index 21e2ab2..da0b1a2 100644 --- a/go.mod +++ b/go.mod @@ -3,29 +3,28 @@ module github.com/VILLASframework/signaling -go 1.20 +go 1.22 require ( - github.com/google/uuid v1.3.0 - github.com/gorilla/mux v1.8.0 - github.com/gorilla/websocket v1.5.0 - github.com/pion/stun v0.6.0 - github.com/prometheus/client_golang v1.15.1 - golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 + github.com/google/uuid v1.6.0 + github.com/gorilla/mux v1.8.1 + github.com/gorilla/websocket v1.5.1 + github.com/pion/stun v0.6.1 + github.com/prometheus/client_golang v1.18.0 ) require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect + github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/pion/dtls/v2 v2.2.7 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/transport/v2 v2.2.1 // indirect - github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.42.0 // indirect - github.com/prometheus/procfs v0.9.0 // indirect - golang.org/x/crypto v0.8.0 // indirect - golang.org/x/sys v0.7.0 // indirect - google.golang.org/protobuf v1.30.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + golang.org/x/crypto v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.15.0 // indirect + google.golang.org/protobuf v1.31.0 // indirect ) diff --git a/go.sum b/go.sum index 4a53afe..cd2ed19 100644 --- a/go.sum +++ b/go.sum @@ -5,62 +5,59 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/stun v0.6.0 h1:JHT/2iyGDPrFWE8NNC15wnddBN8KifsEDw8swQmrEmU= -github.com/pion/stun v0.6.0/go.mod h1:HPqcfoeqQn9cuaet7AOmB5e5xkObu9DwBdurwLKO9oA= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= github.com/pion/transport/v2 v2.2.1 h1:7qYnCBlpgSJNYMbLCKuSY9KbQdBFoETvPNETv0y4N7c= github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.15.1 h1:8tXpTmJbyH5lydzFPoxSIJ0J46jdh3tylbvM1xCv0LI= -github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= -github.com/prometheus/client_model v0.3.0 h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/common v0.42.0 h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= +github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= +github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= -golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -70,8 +67,9 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -88,9 +86,8 @@ golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/packaging/nix/server.nix b/packaging/nix/server.nix new file mode 100644 index 0000000..58e01c5 --- /dev/null +++ b/packaging/nix/server.nix @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: 2023 OPAL-RT Germany GmbH +# SPDX-License-Identifier: Apache-2.0 +{ + lib, + buildGoModule, + src, +}: +buildGoModule { + pname = "villas-signaling-server"; + version = "master"; + src = src; + vendorHash = "sha256-5up73J/bzMHlVlwke4w6eetXz7a+SYQJuQnTkP/L2JE="; + meta = with lib; { + mainProgram = "server"; + license = licenses.asl20; + }; +}