mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"myapp/api"
|
|
"myapp/domain/model"
|
|
)
|
|
|
|
const base = "http://localhost:8080"
|
|
|
|
func main() {
|
|
accessToken, err := authenticate("admin", "admin")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Printf("Access Token:\n%q", accessToken)
|
|
|
|
todo, err := createTodo(accessToken, "test todo title", "test todo body contents")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
log.Printf("Todo Created:\n%#+v", todo)
|
|
}
|
|
|
|
func authenticate(username, password string) ([]byte, error) {
|
|
endpoint := base + "/signin"
|
|
|
|
data := make(url.Values)
|
|
data.Set("username", username)
|
|
data.Set("password", password)
|
|
|
|
resp, err := Form(http.MethodPost, endpoint, data)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
accessToken, err := RawResponse(resp)
|
|
return accessToken, err
|
|
}
|
|
|
|
func createTodo(accessToken []byte, title, body string) (model.Todo, error) {
|
|
var todo model.Todo
|
|
|
|
endpoint := base + "/todos"
|
|
|
|
req := api.TodoRequest{
|
|
Title: title,
|
|
Body: body,
|
|
}
|
|
|
|
resp, err := JSON(http.MethodPost, endpoint, req, WithAccessToken(accessToken))
|
|
if err != nil {
|
|
return todo, err
|
|
}
|
|
|
|
if resp.StatusCode != http.StatusCreated {
|
|
rawData, _ := RawResponse(resp)
|
|
return todo, fmt.Errorf("failed to create a todo: %s", string(rawData))
|
|
}
|
|
|
|
err = BindResponse(resp, &todo)
|
|
return todo, err
|
|
}
|