Compare commits

..

No commits in common. "f39cfee6e8fcdef21c5f677a77296d0b4334478d" and "a10358ff911c5f81dfdaedb1ba8227da424fa8f8" have entirely different histories.

12 changed files with 21 additions and 181 deletions

View File

@ -1,57 +0,0 @@
package apiclient
import (
"encoding/json"
"fmt"
"net/http"
"git.jamestombleson.com/jtom38/newsbot-api/domain"
)
const (
ArticlesBaseRoute = "api/v1/articles"
)
type Articles interface {
List(jwt string, page int) (domain.ArticleResponse, error)
}
type articlesClient struct {
serverAddress string
client http.Client
}
func newArticleService(serverAddress string) articlesClient {
return articlesClient{
serverAddress: serverAddress,
client: http.Client{},
}
}
func (c articlesClient) List(jwt string, page int) (domain.ArticleResponse, error) {
endpoint := fmt.Sprintf("%s/%s?page=%U", c.serverAddress, ArticlesBaseRoute, page)
req, err := http.NewRequest(http.MethodGet, endpoint, nil)
if err != nil {
return domain.ArticleResponse{}, err
}
//req.Header.Set(HeaderContentType, ApplicationJson)
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", jwt))
resp, err := c.client.Do(req)
if err != nil {
return domain.ArticleResponse{}, err
}
defer resp.Body.Close()
var bind domain.ArticleResponse
decoder := json.NewDecoder(resp.Body)
err = decoder.Decode(&bind)
if err != nil {
return domain.ArticleResponse{}, err
}
return bind, nil
}

View File

@ -3,17 +3,14 @@ package apiclient
const ( const (
HeaderContentType = "Content-Type" HeaderContentType = "Content-Type"
MIMEApplicationForm = "application/x-www-form-urlencoded" MIMEApplicationForm = "application/x-www-form-urlencoded"
ApplicationJson = "application/json"
) )
type ApiClient struct { type ApiClient struct {
Articles Articles Users Users
Users Users
} }
func New(serverAddress string) ApiClient { func New(serverAddress string) ApiClient {
return ApiClient{ return ApiClient{
Articles: newArticleService(serverAddress), Users: newUserService(serverAddress),
Users: newUserService(serverAddress),
} }
} }

View File

@ -9,7 +9,8 @@ import (
) )
const ( const (
UserBaseRoute = "api/v1/users" UserLoginRoute = "api/v1/users/login"
UserRegisterRoute = "api/v1/users/register"
) )
type Users interface { type Users interface {
@ -30,7 +31,7 @@ func newUserService(serverAddress string) userClient {
} }
func (a userClient) Login(username, password string) (domain.LoginResponse, error) { func (a userClient) Login(username, password string) (domain.LoginResponse, error) {
endpoint := fmt.Sprintf("%s/%s/login", a.serverAddress, UserBaseRoute) endpoint := fmt.Sprintf("%s/%s", a.serverAddress, UserLoginRoute)
param := url.Values{} param := url.Values{}
param.Set("username", username) param.Set("username", username)
@ -47,7 +48,7 @@ func (a userClient) Login(username, password string) (domain.LoginResponse, erro
} }
func (a userClient) SignUp(username, password string) (domain.BaseResponse, error) { func (a userClient) SignUp(username, password string) (domain.BaseResponse, error) {
endpoint := fmt.Sprintf("%s/%s/register", a.serverAddress, UserBaseRoute) endpoint := fmt.Sprintf("%s/%s", a.serverAddress, UserRegisterRoute)
param := url.Values{} param := url.Values{}
param.Set("username", username) param.Set("username", username)

View File

@ -1,28 +0,0 @@
package handlers
import (
"net/http"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/domain"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/views/articles"
"github.com/labstack/echo/v4"
)
func (h *Handler) ArticlesList(c echo.Context) error {
userToken, err := c.Cookie(domain.CookieToken)
if err != nil {
return err
}
resp, err := h.api.Articles.List(userToken.Value, 0)
if err != nil {
return err
}
vm := models.ListArticlesViewModel {
Items: resp.Payload,
}
return Render(c, http.StatusOK, articles.List(vm))
}

View File

@ -1,23 +0,0 @@
package handlers
import (
"net/http"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/domain"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/views/debug"
"github.com/labstack/echo/v4"
)
func (h *Handler) DebugCookies(c echo.Context) error {
user, _ := c.Cookie(domain.CookieUser)
token, _ := c.Cookie(domain.CookieToken)
refresh, _ := c.Cookie(domain.CookieRefreshToken)
model := models.DebugCookiesViewModel{
Username: user.Value,
Token: token.Value,
RefreshToken: refresh.Value,
}
return Render(c, http.StatusOK, debug.Cookies(model))
}

View File

@ -60,12 +60,6 @@ func NewServer(ctx context.Context, configs config.Configs, apiClient apiclient.
router.GET("/", s.HomeIndex) router.GET("/", s.HomeIndex)
router.GET("/about", s.HomeAbout) router.GET("/about", s.HomeAbout)
debug := router.Group("/debug")
debug.GET("/cookies", s.DebugCookies)
articles := router.Group("/articles")
articles.GET("", s.ArticlesList)
users := router.Group("/users") users := router.Group("/users")
users.GET("/login", s.UserLogin) users.GET("/login", s.UserLogin)
users.POST("/login", s.UserAfterLogin) users.POST("/login", s.UserAfterLogin)

View File

@ -22,9 +22,20 @@ func (h *Handler) UserAfterLogin(c echo.Context) error {
return Render(c, http.StatusBadRequest, users.AfterLogin(err.Error(), false)) return Render(c, http.StatusBadRequest, users.AfterLogin(err.Error(), false))
} }
SetCookie(c, domain.CookieToken, resp.Token) cookie := new(http.Cookie)
SetCookie(c, domain.CookieRefreshToken, resp.RefreshToken) cookie.Name = domain.CookieToken
SetCookie(c, domain.CookieUser, user) cookie.Value = resp.Token
c.SetCookie(cookie)
cookie = new(http.Cookie)
cookie.Name = domain.CookieRefreshToken
cookie.Value = resp.RefreshToken
c.SetCookie(cookie)
cookie = new(http.Cookie)
cookie.Name = domain.CookieUser
cookie.Value = user
c.SetCookie(cookie)
return Render(c, http.StatusOK, users.AfterLogin("Login Successful!", true)) return Render(c, http.StatusOK, users.AfterLogin("Login Successful!", true))
} }

View File

@ -1,14 +0,0 @@
package handlers
import (
"net/http"
"github.com/labstack/echo/v4"
)
func SetCookie(c echo.Context, key string, value string) {
cookie := new(http.Cookie)
cookie.Name = key
cookie.Value = value
c.SetCookie(cookie)
}

View File

@ -1,7 +0,0 @@
package models
import "git.jamestombleson.com/jtom38/newsbot-api/domain"
type ListArticlesViewModel struct {
Items []domain.ArticleDto
}

View File

@ -1,7 +0,0 @@
package models
type DebugCookiesViewModel struct {
Username string
Token string
RefreshToken string
}

View File

@ -1,15 +0,0 @@
package articles
import (
"git.jamestombleson.com/jtom38/newsbot-portal/internal/views/layout"
"git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
)
templ List(model models.ListArticlesViewModel) {
@layout.WithTemplate() {
for _, item := range model.Items {
{ item.Title }
}
<div>hi </div>
}
}

View File

@ -1,12 +0,0 @@
package debug
import "git.jamestombleson.com/jtom38/newsbot-portal/internal/views/layout"
import "git.jamestombleson.com/jtom38/newsbot-portal/internal/models"
templ Cookies(vm models.DebugCookiesViewModel) {
@layout.WithTemplate() {
Token: { vm.Token }
RefreshToken: { vm.RefreshToken }
UserName: { vm.Username }
}
}