From 17602f169a0f143cdf388c2d4b4b516bdc722323 Mon Sep 17 00:00:00 2001 From: Roland Osborne Date: Sat, 15 Jan 2022 14:54:49 -0800 Subject: [PATCH] validating create token in test --- doc/api.oa3 | 5 +++ net/server/internal/README.md | 25 ----------- net/server/internal/addAccount_test.go | 22 +++++++-- .../internal/addNodeAccount_endpoint.go | 3 ++ net/server/internal/adminLogin.go | 3 ++ net/server/internal/api_account.go | 5 --- .../internal/getAccountToken_endpoint.go | 45 +++++++++++++++++++ 7 files changed, 75 insertions(+), 33 deletions(-) delete mode 100644 net/server/internal/README.md create mode 100644 net/server/internal/getAccountToken_endpoint.go diff --git a/doc/api.oa3 b/doc/api.oa3 index 08b85197..c3c19016 100644 --- a/doc/api.oa3 +++ b/doc/api.oa3 @@ -355,6 +355,11 @@ paths: responses: '200': description: success + content: + application/json: + schema: + type: string + '401': '401': description: permission denied '500': diff --git a/net/server/internal/README.md b/net/server/internal/README.md deleted file mode 100644 index 8f90abf8..00000000 --- a/net/server/internal/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Go API Server for databag - -DataBag provides storage for decentralized identity based self-hosting apps. It is intended to support sharing of personal data and hosting group conversations. - -## Overview -This server was generated by the [swagger-codegen] -(https://github.com/swagger-api/swagger-codegen) project. -By using the [OpenAPI-Spec](https://github.com/OAI/OpenAPI-Specification) from a remote server, you can easily generate a server stub. -- - -To see how to make this your own, look here: - -[README](https://github.com/swagger-api/swagger-codegen/blob/master/README.md) - -- API version: 0.0.1 -- Build date: 2022-01-13T17:14:57.205Z[GMT] - - -### Running the server -To run the server, follow these simple steps: - -``` -go run main.go -``` - diff --git a/net/server/internal/addAccount_test.go b/net/server/internal/addAccount_test.go index 49088578..30d5c1ed 100644 --- a/net/server/internal/addAccount_test.go +++ b/net/server/internal/addAccount_test.go @@ -1,7 +1,7 @@ package databag import ( - "fmt" + "log" "testing" "net/http/httptest" "encoding/base64" @@ -10,12 +10,12 @@ import ( func TestAccount(t *testing.T) { + // acquire new token for creating accounts auth := base64.StdEncoding.EncodeToString([]byte("admin:pass")) r := httptest.NewRequest("POST", "/admin/accounts", nil) r.Header.Add("Authorization","Basic " + auth) w := httptest.NewRecorder() AddNodeAccount(w, r); - resp := w.Result(); dec := json.NewDecoder(resp.Body); var token string; @@ -24,5 +24,21 @@ func TestAccount(t *testing.T) { t.Errorf("failed to create account") } - fmt.Println(token); + // validate account token + r = httptest.NewRequest("GET", "/account/token", nil) + r.Header.Add("Authorization","Bearer " + token) + w = httptest.NewRecorder() + GetAccountToken(w, r); + resp = w.Result(); + if resp.StatusCode != 200 { + t.Errorf("invalid token value") + } + dec = json.NewDecoder(resp.Body); + var tokenType string; + dec.Decode(&tokenType); + if tokenType != "create" { + t.Errorf("invalid token type") + } + + log.Println("TestAccount: done"); } diff --git a/net/server/internal/addNodeAccount_endpoint.go b/net/server/internal/addNodeAccount_endpoint.go index 4abb3980..06173270 100644 --- a/net/server/internal/addNodeAccount_endpoint.go +++ b/net/server/internal/addNodeAccount_endpoint.go @@ -27,12 +27,15 @@ func AddNodeAccount(w http.ResponseWriter, r *http.Request) { token := store.AccountToken{TokenType: "create", Token: data }; if res := store.DB.Create(&token).Error; res != nil { log.Println("AddNodeAccount - failed to store token"); + w.WriteHeader(http.StatusInternalServerError); return } body, err := json.Marshal(data); if err != nil { log.Println("GetNodeConfig - failed to marshal response"); + w.WriteHeader(http.StatusInternalServerError); + return } w.Write(body) w.Header().Set("Content-Type", "application/json; charset=UTF-8") diff --git a/net/server/internal/adminLogin.go b/net/server/internal/adminLogin.go index 3b0b8a8d..f05969ac 100644 --- a/net/server/internal/adminLogin.go +++ b/net/server/internal/adminLogin.go @@ -32,3 +32,6 @@ func adminLogin(r *http.Request) bool { return true; } +func bearerAuth(r *http.Request) string { +return ""; +} diff --git a/net/server/internal/api_account.go b/net/server/internal/api_account.go index 03d089e2..b5980588 100644 --- a/net/server/internal/api_account.go +++ b/net/server/internal/api_account.go @@ -63,11 +63,6 @@ func GetAccountStatus(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) } -func GetAccountToken(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "application/json; charset=UTF-8") - w.WriteHeader(http.StatusOK) -} - func GetAccountUsername(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") w.WriteHeader(http.StatusOK) diff --git a/net/server/internal/getAccountToken_endpoint.go b/net/server/internal/getAccountToken_endpoint.go new file mode 100644 index 00000000..6461b4dc --- /dev/null +++ b/net/server/internal/getAccountToken_endpoint.go @@ -0,0 +1,45 @@ +package databag + +import ( + "log" + "strings" + "errors" + "net/http" + "encoding/json" + "gorm.io/gorm" + "databag/internal/store" +) + +func GetAccountToken(w http.ResponseWriter, r *http.Request) { + + // extract token + auth := r.Header.Get("Authorization") + token := strings.TrimSpace(strings.TrimPrefix(auth, "Bearer")) + + // lookup token + var accountToken store.AccountToken + err := store.DB.Where("token = ?", token).First(&accountToken).Error + if err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + log.Println("GetAccountToken - token not found"); + w.WriteHeader(http.StatusNotFound) + } else { + log.Println("GetAccountToken - failed to retrieve token"); + w.WriteHeader(http.StatusInternalServerError) + } + return + } + + // return token type + body, err := json.Marshal(accountToken.TokenType); + if err != nil { + log.Println("GetNodeConfig - failed to marshal response"); + w.WriteHeader(http.StatusInternalServerError); + return + } + w.Write(body); + w.Header().Set("Content-Type", "application/json charset=UTF-8") + w.WriteHeader(http.StatusOK) +} + +