Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bearer token support #19

Merged
merged 6 commits into from
Mar 6, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions controllers/v1/clapper/clapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,25 @@ import (
"github.com/ystv/web-api/services/clapper/event"
"github.com/ystv/web-api/services/clapper/position"
"github.com/ystv/web-api/services/clapper/signup"
"github.com/ystv/web-api/utils"
)

// Repos encapsulates the dependency
type Repos struct {
access *utils.Accesser
crew clapper.CrewRepo
event clapper.EventRepo
signup clapper.SignupRepo
position clapper.PositionRepo
}

// NewRepos creates our data store
func NewRepos(db *sqlx.DB) *Repos {
return &Repos{crew.NewStore(db), event.NewStore(db), signup.NewStore(db), position.NewStore(db)}
func NewRepos(db *sqlx.DB, access *utils.Accesser) *Repos {
return &Repos{
access,
crew.NewStore(db),
event.NewStore(db),
signup.NewStore(db),
position.NewStore(db),
}
}
5 changes: 2 additions & 3 deletions controllers/v1/clapper/crew.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"strconv"

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/utils"
)

// SetCrew handles setting the user ID for a crew object,
Expand All @@ -24,7 +23,7 @@ import (
// @Success 200
// @Router /v1/internal/clapper/event/{eventid}/{signupid}/{crewid} [put]
func (r *Repos) SetCrew(c echo.Context) error {
p, err := utils.GetTokenEcho(c)
p, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("SetCrew: failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -53,7 +52,7 @@ func (r *Repos) SetCrew(c echo.Context) error {
// @Success 200
// @Router /v1/internal/clapper/event/{signupid}/{crewid}/reset [put]
func (r *Repos) ResetCrew(c echo.Context) error {
_, err := utils.GetTokenEcho(c)
_, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("ResetCrew: failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
5 changes: 2 additions & 3 deletions controllers/v1/clapper/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/services/clapper"
"github.com/ystv/web-api/utils"
)

// ListMonth returns all events for a month.
Expand Down Expand Up @@ -78,7 +77,7 @@ func (r *Repos) NewEvent(c echo.Context) error {
err = fmt.Errorf("NewEvent: failed to bind to request json: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
}
p, err := utils.GetTokenEcho(c)
p, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("NewEvent: failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -108,7 +107,7 @@ func (r *Repos) UpdateEvent(c echo.Context) error {
err = fmt.Errorf("UpdateEvent: failed to bind to request json: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
}
p, err := utils.GetTokenEcho(c)
p, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("UpdateEvent: failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
5 changes: 4 additions & 1 deletion controllers/v1/creator/creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,12 @@ import (
"github.com/ystv/web-api/services/creator/series"
"github.com/ystv/web-api/services/creator/video"
"github.com/ystv/web-api/services/encoder"
"github.com/ystv/web-api/utils"
)

// Repos represents all our data repositories
type Repos struct {
access *utils.Accesser
video creator.VideoRepo
series creator.SeriesRepo
playlist creator.PlaylistRepo
Expand All @@ -34,12 +36,13 @@ type Config struct {
}

// NewRepos creates our data repositories
func NewRepos(db *sqlx.DB, cdn *s3.S3, enc *encoder.Encoder, conf *Config) *Repos {
func NewRepos(db *sqlx.DB, cdn *s3.S3, enc *encoder.Encoder, access *utils.Accesser, conf *Config) *Repos {
config := &creator.Config{
IngestBucket: conf.IngestBucket,
ServeBucket: conf.ServeBucket,
}
return &Repos{
access,
video.NewStore(db, cdn, enc, config),
series.NewController(db, cdn, enc, config),
playlist.NewStore(db),
Expand Down
5 changes: 2 additions & 3 deletions controllers/v1/creator/playlist.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/services/creator/types/playlist"
"github.com/ystv/web-api/utils"
)

// ListPlaylist handles listing all playlist metadata's
Expand Down Expand Up @@ -66,7 +65,7 @@ func (r *Repos) NewPlaylist(c echo.Context) error {
return echo.NewHTTPError(http.StatusBadRequest, err)
}

claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("PlaylistUpdate failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -97,7 +96,7 @@ func (r *Repos) UpdatePlaylist(c echo.Context) error {
err = fmt.Errorf("PlaylistUpdate: failed to bind json: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
}
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("PlaylistUpdate failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
7 changes: 3 additions & 4 deletions controllers/v1/creator/video.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/services/creator/types/video"
"github.com/ystv/web-api/utils"
)

// GetVideo finds a video by ID
Expand Down Expand Up @@ -55,7 +54,7 @@ func (r *Repos) NewVideo(c echo.Context) error {
err = fmt.Errorf("VideoCreate bind fail: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
}
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("VideoNew failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -86,7 +85,7 @@ func (r *Repos) UpdateVideoMeta(c echo.Context) error {
err = fmt.Errorf("failed to bind video object: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
}
t, err := utils.GetTokenEcho(c)
t, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("failed to get token: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
Expand Down Expand Up @@ -134,7 +133,7 @@ func (r *Repos) VideoList(c echo.Context) error {
// @Success 200 {array} video.Meta
// @Router /v1/internal/creator/video/my [get]
func (r *Repos) ListVideosByUser(c echo.Context) error {
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("VideoNew failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
12 changes: 8 additions & 4 deletions controllers/v1/encoder/encoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ import (
)

type EncoderController struct {
enc *encoder.Encoder
enc *encoder.Encoder
access *utils.Accesser
}

type (
Expand Down Expand Up @@ -45,8 +46,11 @@ type (
}
)

func NewEncoderController(enc *encoder.Encoder) *EncoderController {
return &EncoderController{enc: enc}
func NewEncoderController(enc *encoder.Encoder, access *utils.Accesser) *EncoderController {
return &EncoderController{
enc: enc,
access: access,
}
}

// TODO: look into adding the parameter object without
Expand All @@ -69,7 +73,7 @@ func (e *EncoderController) UploadRequest(c echo.Context) error {
r := Request{}
c.Bind(&r)

_, err := utils.GetTokenHTTP(r.HTTPRequest)
_, err := e.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("GetToken failed: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
Expand Down
7 changes: 3 additions & 4 deletions controllers/v1/misc/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"strconv"

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/utils"
)

// GetLists handles listing mailing lists
Expand Down Expand Up @@ -38,7 +37,7 @@ func (r *Repos) GetLists(c echo.Context) error {
// @Success 200 {array} misc.List
// @Router /v1/internal/misc/lists/my [get]
func (r *Repos) GetListsByToken(c echo.Context) error {
p, err := utils.GetTokenEcho(c)
p, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("SetCrew: failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -112,7 +111,7 @@ func (r *Repos) SubscribeByToken(c echo.Context) error {
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Bad listID")
}
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("SubscribeByToken failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down Expand Up @@ -168,7 +167,7 @@ func (r *Repos) UnsubscribeByToken(c echo.Context) error {
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Bad listID")
}
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("UnsubscribeByToken failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
11 changes: 8 additions & 3 deletions controllers/v1/misc/misc.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@ package misc
import (
"github.com/jmoiron/sqlx"
"github.com/ystv/web-api/services/misc"
"github.com/ystv/web-api/utils"
)

// Repos stores our dependencies
type Repos struct {
misc *misc.Store
misc *misc.Store
access *utils.Accesser
}

// NewRepos creates our data store
func NewRepos(db *sqlx.DB) *Repos {
return &Repos{misc.NewStore(db)}
func NewRepos(db *sqlx.DB, access *utils.Accesser) *Repos {
return &Repos{
misc: misc.NewStore(db),
access: access,
}
}
3 changes: 1 addition & 2 deletions controllers/v1/misc/quote.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/services/misc"
"github.com/ystv/web-api/utils"
)

// ListQuotes handles listing quotes by pagination
Expand Down Expand Up @@ -53,7 +52,7 @@ func (r *Repos) NewQuote(c echo.Context) error {
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, err)
}
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("NewQuote failed to get user ID: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
27 changes: 11 additions & 16 deletions controllers/v1/misc/webcam.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"strings"

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/utils"
)

// ListWebcams handles listing all webcams a user can access
Expand All @@ -21,17 +20,15 @@ import (
// @Success 200 {array} misc.Webcam
// @Router /v1/internal/misc/webcams [get]
func (r *Repos) ListWebcams(c echo.Context) error {
// Get user token
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("ListWebcams failed to get user token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
}
// Prepare slice of permission IDs
perms := []int{}
for _, permission := range claims.Permissions {
perms = append(perms, permission.PermissionID)
}

perms := []string{}
perms = append(perms, claims.Permissions...)

w, err := r.misc.ListWebcams(c.Request().Context(), perms)
if err != nil {
err = fmt.Errorf("failed to list webcams: %w", err)
Expand All @@ -52,18 +49,16 @@ func (r *Repos) GetWebcam(c echo.Context) error {
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "Invalid camera ID")
}
// Get user token
claims, err := utils.GetTokenEcho(c)

claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("GetWebcam failed to get user token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
}
// Prepare slice of permission IDs
perms := []int{}
for _, permission := range claims.Permissions {
perms = append(perms, permission.PermissionID)
}
// Get webcam URL and check user has permission for it

perms := []string{}
perms = append(perms, claims.Permissions...)

w, err := r.misc.GetWebcam(c.Request().Context(), cameraID, perms)
if err != nil {
err = fmt.Errorf("failed to get camera: %w", err)
Expand Down
9 changes: 7 additions & 2 deletions controllers/v1/people/people.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@ package people
import (
"github.com/jmoiron/sqlx"
"github.com/ystv/web-api/services/people"
"github.com/ystv/web-api/utils"
)

// Repo stores our dependencies
type Repo struct {
people *people.Store
access *utils.Accesser
}

// NewRepo creates our data store
func NewRepo(db *sqlx.DB) *Repo {
return &Repo{people.NewStore(db)}
func NewRepo(db *sqlx.DB, access *utils.Accesser) *Repo {
return &Repo{
people: people.NewStore(db),
access: access,
}
}
5 changes: 2 additions & 3 deletions controllers/v1/people/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"strconv"

"github.com/labstack/echo/v4"
"github.com/ystv/web-api/utils"
)

// UserByID finds a user by ID
Expand Down Expand Up @@ -62,7 +61,7 @@ func (r *Repo) UserByIDFull(c echo.Context) error {
// @Success 200 {object} people.User
// @Router /v1/internal/people/user [get]
func (r *Repo) UserByToken(c echo.Context) error {
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("UserByToken failed to get token: %w", err)
return echo.NewHTTPError(http.StatusBadRequest, err)
Expand All @@ -84,7 +83,7 @@ func (r *Repo) UserByToken(c echo.Context) error {
// @Success 200 {object} people.UserFull
// @Router /v1/internal/people/user/full [get]
func (r *Repo) UserByTokenFull(c echo.Context) error {
claims, err := utils.GetTokenEcho(c)
claims, err := r.access.GetToken(c.Request())
if err != nil {
err = fmt.Errorf("UserByTokenFull failed to get token: %w", err)
return echo.NewHTTPError(http.StatusInternalServerError, err)
Expand Down
Loading