Decouples routers and adds auth for plans and actions call
All checks were successful
gitea-deepak/gogmagog/pipeline/head This commit looks good

This commit is contained in:
Deepak Mallubhotla 2021-01-12 16:15:28 -06:00
parent ab1dab6619
commit 417a7cf982
Signed by: deepak
GPG Key ID: 64BF53A3369104E7
9 changed files with 107 additions and 95 deletions

View File

@ -9,7 +9,8 @@ import (
"strconv"
)
func newActionRouter(m *models.Model) http.Handler {
// NewActionRouter returns a new action router
func NewActionRouter(m *models.Model) http.Handler {
router := chi.NewRouter()
router.Get("/", getActionsFunc(m))
router.Post("/", postActionFunc(m))

View File

@ -3,7 +3,6 @@ package routes_test
import (
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/routes"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@ -16,8 +15,8 @@ func TestEmptyActions(t *testing.T) {
// set up
assert := assert.New(t)
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -42,8 +41,8 @@ func TestOneAction(t *testing.T) {
completedDate, _ := time.Parse("2006-01-02", "2021-01-03")
a1 := &models.Action{ActionID: 3, ActionDescription: "testing", CompletedChunks: 1, CompletedOn: &completedDate, CreatedAt: &createdDate, UpdatedAt: &updatedDate, EstimatedChunks: 3, PlanID: 0}
m := getModel([]*models.Plan{}, []*models.Action{a1})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -77,8 +76,8 @@ func TestErrorAction(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -99,8 +98,8 @@ func TestEmptyActionErrorWriter(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := NewBadWriter()
@ -120,8 +119,8 @@ func TestOneActionByID(t *testing.T) {
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions/6", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/6", nil)
rr := httptest.NewRecorder()
@ -152,8 +151,8 @@ func TestErrorActionByID(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions/5", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/5", nil)
rr := httptest.NewRecorder()
@ -175,8 +174,8 @@ func TestEmptyActionErrorWriterByID(t *testing.T) {
a := &models.Action{ActionID: 6}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions/6", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/6", nil)
rr := NewBadWriter()
@ -195,8 +194,8 @@ func TestNotFoundActionByIDText(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions/wo", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/wo", nil)
rr := httptest.NewRecorder()
@ -214,8 +213,8 @@ func TestNotFoundActionByIDEmpty(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions/1", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/1", nil)
rr := httptest.NewRecorder()
@ -235,8 +234,8 @@ func TestActionsByPlanID(t *testing.T) {
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions?plan_id=6", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/?plan_id=6", nil)
rr := httptest.NewRecorder()
@ -270,8 +269,8 @@ func TestActionsByPlanIDInvalidID(t *testing.T) {
updatedDate, _ := time.Parse("2006-01-02", "2021-01-02")
a := &models.Action{ActionID: 6, ActionDescription: "howdy", CompletedOn: nil, CreatedAt: &createdDate, UpdatedAt: &updatedDate, CompletedChunks: 0, EstimatedChunks: 54, PlanID: 3}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/actions?plan_id=aoeu", nil)
router := routes.NewActionRouter(m)
req, _ := http.NewRequest("GET", "/?plan_id=aoeu", nil)
rr := httptest.NewRecorder()

View File

@ -9,7 +9,8 @@ import (
"strconv"
)
func newPlanRouter(m *models.Model) http.Handler {
// NewPlanRouter returns the http.Handler for the passed in model to route plan methods.
func NewPlanRouter(m *models.Model) http.Handler {
router := chi.NewRouter()
router.Get("/", getAllPlansFunc(m))
router.Post("/", postPlanFunc(m))

View File

@ -3,7 +3,6 @@ package routes_test
import (
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/routes"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@ -16,8 +15,8 @@ func TestEmptyPlans(t *testing.T) {
// set up
assert := assert.New(t)
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -40,8 +39,8 @@ func TestOnePlan(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -69,8 +68,8 @@ func TestErrorPlan(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := httptest.NewRecorder()
@ -91,8 +90,8 @@ func TestEmptyPlanErrorWriter(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/", nil)
rr := NewBadWriter()
@ -111,8 +110,8 @@ func TestOnePlanByID(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans/6", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/6", nil)
rr := httptest.NewRecorder()
@ -138,8 +137,8 @@ func TestErrorPlanByID(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans/5", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/5", nil)
rr := httptest.NewRecorder()
@ -162,8 +161,8 @@ func TestEmptyPlanErrorWriterByID(t *testing.T) {
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans/6", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/6", nil)
rr := NewBadWriter()
@ -182,8 +181,8 @@ func TestNotFoundPlanByIDText(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans/wo", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/wo", nil)
rr := httptest.NewRecorder()
@ -201,8 +200,8 @@ func TestNotFoundPlanByIDEmpty(t *testing.T) {
m := getEmptyModel()
router := routes.NewRouter(m, tokens.New("whatever"))
req, _ := http.NewRequest("GET", "/plans/1", nil)
router := routes.NewPlanRouter(m)
req, _ := http.NewRequest("GET", "/1", nil)
rr := httptest.NewRecorder()

View File

@ -5,7 +5,6 @@ import (
"encoding/json"
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/routes"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@ -26,7 +25,7 @@ func TestPureJSONPostAction(t *testing.T) {
ActionDescription: "here's an action",
}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"action_description": "here's an action",
"estimated_chunks": 3,
@ -34,7 +33,7 @@ func TestPureJSONPostAction(t *testing.T) {
"completed_on": "2021-01-01T00:00:00Z",
"plan_id": 5
}`)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -67,13 +66,13 @@ func TestExtraFieldActionPostJSON(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"completed_on": "2021-01-01T00:00:00Z",
"plan_id": 5,
"sabotage": "omg"
}`)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -93,9 +92,9 @@ func TestEmptyBodyActionPost(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(``)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -116,13 +115,13 @@ func TestTwoBodyActionPost(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"plan_id": 5
}, {
"plan_id": 6
}`)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -143,10 +142,10 @@ func TestErrorCreateAction(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
a := &models.Action{PlanID: 6}
data, _ := json.Marshal(a)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -168,10 +167,10 @@ func TestErrorOnRetrieveCreateAction(t *testing.T) {
m := getErrorOnGetModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
a := &models.Action{PlanID: 6}
data, _ := json.Marshal(a)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -193,9 +192,9 @@ func TestErrorWriterCreateAction(t *testing.T) {
a := &models.Action{PlanID: 6}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data, _ := json.Marshal(a)
req, _ := http.NewRequest("POST", "/actions", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := NewBadWriter()

View File

@ -5,7 +5,6 @@ import (
"encoding/json"
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/routes"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@ -20,9 +19,9 @@ func TestCreatePlanRoute(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data, _ := json.Marshal(p)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -51,12 +50,12 @@ func TestPureJSON(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data := []byte(`{
"plan_date": "2021-01-01T00:00:00Z",
"plan_id": 5
}`)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -85,13 +84,13 @@ func TestExtraFieldJSON(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data := []byte(`{
"plan_date": "2021-01-01T00:00:00Z",
"plan_id": 5,
"plan_sabotage": "omg"
}`)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -111,9 +110,9 @@ func TestEmptyBody(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data := []byte(``)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -134,7 +133,7 @@ func TestTwoBody(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data := []byte(`{
"plan_date": "2021-01-01T00:00:00Z",
"plan_id": 5
@ -142,7 +141,7 @@ func TestTwoBody(t *testing.T) {
"plan_date": "2021-01-01T00:00:00Z",
"plan_id": 6
}`)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -163,11 +162,11 @@ func TestErrorCreatePlan(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
data, _ := json.Marshal(p)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -189,11 +188,11 @@ func TestErrorOnRetrieveCreatePlan(t *testing.T) {
m := getErrorOnGetModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
data, _ := json.Marshal(p)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -216,9 +215,9 @@ func TestErrorWriterCreatePlan(t *testing.T) {
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewPlanRouter(m)
data, _ := json.Marshal(p)
req, _ := http.NewRequest("POST", "/plans", bytes.NewBuffer(data))
req, _ := http.NewRequest("POST", "/", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := NewBadWriter()

View File

@ -5,7 +5,6 @@ import (
"encoding/json"
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/routes"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
@ -26,7 +25,7 @@ func TestPureJSONPutAction(t *testing.T) {
ActionDescription: "here's an action",
}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"action_description": "here's an action",
"estimated_chunks": 3,
@ -34,7 +33,7 @@ func TestPureJSONPutAction(t *testing.T) {
"completed_on": "2021-01-01T00:00:00Z",
"plan_id": 5
}`)
req, _ := http.NewRequest("PUT", "/actions/0", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/0", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -67,13 +66,13 @@ func TestExtraFieldActionPutJSON(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"completed_on": "2021-01-01T00:00:00Z",
"plan_id": 5,
"sabotage": "omg"
}`)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -93,9 +92,9 @@ func TestEmptyBodyActionPut(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(``)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -116,13 +115,13 @@ func TestTwoBodyActionPut(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"plan_id": 5
}, {
"plan_id": 6
}`)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -143,13 +142,13 @@ func TestBadActionIDPut(t *testing.T) {
planDate, _ := time.Parse("2006-01-02", "2021-01-01")
p := &models.Plan{PlanID: 6, PlanDate: &planDate}
m := getModel([]*models.Plan{p}, []*models.Action{})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data := []byte(`{
"plan_id": 5
}, {
"plan_id": 6
}`)
req, _ := http.NewRequest("PUT", "/actions/text", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/text", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -170,10 +169,10 @@ func TestErrorUpdateAction(t *testing.T) {
m := getErrorModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
a := &models.Action{PlanID: 6}
data, _ := json.Marshal(a)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -195,10 +194,10 @@ func TestErrorOnRetrieveUpdateAction(t *testing.T) {
m := getErrorOnGetModel("Model always errors")
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
a := &models.Action{PlanID: 6}
data, _ := json.Marshal(a)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := httptest.NewRecorder()
@ -220,9 +219,9 @@ func TestErrorWriterUpdateAction(t *testing.T) {
a := &models.Action{PlanID: 6}
m := getModel([]*models.Plan{}, []*models.Action{a})
router := routes.NewRouter(m, tokens.New("whatever"))
router := routes.NewActionRouter(m)
data, _ := json.Marshal(a)
req, _ := http.NewRequest("PUT", "/actions/1", bytes.NewBuffer(data))
req, _ := http.NewRequest("PUT", "/1", bytes.NewBuffer(data))
req.Header.Set("Content-Type", "application/json")
rr := NewBadWriter()

View File

@ -5,6 +5,7 @@ import (
"gitea.deepak.science/deepak/gogmagog/models"
"gitea.deepak.science/deepak/gogmagog/tokens"
"github.com/go-chi/chi"
"github.com/go-chi/jwtauth"
"net/http"
)
@ -13,8 +14,16 @@ func NewRouter(m *models.Model, tok tokens.Toker) http.Handler {
router := chi.NewRouter()
router.MethodNotAllowed(methodNotAllowedHandler)
router.NotFound(notFoundHandler)
router.Mount("/plans", newPlanRouter(m))
router.Mount("/actions", newActionRouter(m))
router.Group(func(r chi.Router) {
r.Use(tok.Verifier())
// Handle valid / invalid tokens. In this example, we use
// the provided authenticator middleware, but you can write your
// own very easily, look at the Authenticator method in jwtauth.go
// and tweak it, its not scary.
r.Use(jwtauth.Authenticator)
r.Mount("/actions", NewActionRouter(m))
r.Mount("/plans", NewPlanRouter(m))
})
router.Mount("/auth", newAuthRouter(m, tok))
router.Mount("/health", newHealthRouter(m))
router.Get("/ping", ping)

View File

@ -3,6 +3,7 @@ package tokens
import (
"gitea.deepak.science/deepak/gogmagog/models"
"github.com/go-chi/jwtauth"
"net/http"
"time"
)
@ -10,6 +11,7 @@ import (
type Toker interface {
EncodeUser(user *models.UserNoPassword) string
VerifyTokenString(tokenString string) error
Verifier() func(http.Handler) http.Handler
}
type jwtToker struct {
@ -39,3 +41,7 @@ func (tok *jwtToker) VerifyTokenString(tokenString string) error {
_, err := jwtauth.VerifyToken(tok.tokenAuth, tokenString)
return err
}
func (tok *jwtToker) Verifier() func(http.Handler) http.Handler {
return jwtauth.Verifier(tok.tokenAuth)
}