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

Feat/spotify register #1

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
5204066
feat: created structs package
vidocco Oct 12, 2018
0e0f70f
feat: created spotify auth model
vidocco Oct 12, 2018
c5372ad
feat: implemented spotify auth 2.0
vidocco Oct 12, 2018
8f8ab1e
refactor: renamed GenTokenReq to GetTokens
vidocco Oct 12, 2018
b4cf968
feat: implemented get me request for spotify api
vidocco Oct 12, 2018
138905b
feat: created spotify user response struct
vidocco Oct 12, 2018
14caecb
feat: implemented GetMe model in register controller
vidocco Oct 12, 2018
632c4d8
refactor: moved generator logic to separate file
vidocco Oct 12, 2018
01562af
feat: gen function for transforming spotify user to db compatible user
vidocco Oct 12, 2018
9dba43e
feat: implemented user conversion
vidocco Oct 12, 2018
7d5e9fe
refactor: moved redirect generation to spotify.models
vidocco Oct 13, 2018
0b9f636
fix: typo in struct
vidocco Oct 13, 2018
10b1307
refacotr: made ListmeraUser a publicly usable struct
vidocco Oct 13, 2018
98417d3
style: changed default port to 1212
vidocco Oct 13, 2018
78fb236
feat: converting ListmeraUser into bson document
vidocco Oct 13, 2018
e5f664a
feat: implemented insert user method
vidocco Oct 13, 2018
536dd04
fix: missing playlist field in document
vidocco Oct 13, 2018
00c0fdb
refactor: changed field name in ListmeraUser struct
vidocco Oct 13, 2018
91a3555
feat: added Id, Tracks and Playlists to ListmeraUser
vidocco Oct 13, 2018
69d70a2
fix: typos in headers
vidocco Oct 13, 2018
c3fed03
feat: frank register responding user data
vidocco Oct 13, 2018
8578e8e
feat: passing id in response from register
vidocco Oct 14, 2018
4f99474
fix: status code correctly passed from logger
vidocco Oct 14, 2018
b0aa2e3
docs: added notes for future steps
vidocco Oct 17, 2018
7b03c35
chore: updated to go mod from dep
vidocco Nov 11, 2018
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
161 changes: 0 additions & 161 deletions Gopkg.lock

This file was deleted.

42 changes: 0 additions & 42 deletions Gopkg.toml

This file was deleted.

56 changes: 34 additions & 22 deletions controllers/auth.controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,63 @@ package controllers

import (
"encoding/json"
"github.com/listmera/frank/env"
"github.com/listmera/frank/models"
"github.com/listmera/frank/structs"
"github.com/listmera/frank/utils"
"github.com/naoina/denco"
"net/http"
"net/url"
"strings"
)

func Login (w http.ResponseWriter, r *http.Request, params denco.Params) {
w.WriteHeader(http.StatusOK)
//w.Header().Set("Content-Type", "application/json; charset=UTF-8")
}

type registerReq struct {
Code string `json: "code"`
}

func Register (w http.ResponseWriter, r *http.Request, params denco.Params) {
decoder := json.NewDecoder(r.Body)

var req registerReq
err := decoder.Decode(&req)
var reqBody structs.RegisterReq
err := decoder.Decode(&reqBody)
utils.CheckErr(err)

models.GetTokens(req.Code) // from here on, everything should be a goroutine
}
spotifyRes, err := models.GetTokens(reqBody.Code)
defer spotifyRes.Body.Close()
utils.CheckErr(err)

var tokens structs.TokenRes
decoder = json.NewDecoder(spotifyRes.Body)
err = decoder.Decode(&tokens)
utils.CheckErr(err)

userRes, err := models.GetMe(tokens)
defer userRes.Body.Close()
utils.CheckErr(err)

type redirectRes struct {
Redirect string `json:"redirect"`
var spotifyUser structs.SpotifyUser
decoder = json.NewDecoder(userRes.Body)
err = decoder.Decode(&spotifyUser)
utils.CheckErr(err)

//TODO: we use upsert in mongo to create new user/update existing one
user := structs.NewListmeraUser(spotifyUser)
id, err := models.InsertUser(user, tokens)
utils.CheckErr(err)

user.Id = id.InsertedID

w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusCreated)
err = json.NewEncoder(w).Encode(user)
utils.CheckErr(err)
//TODO: add in the response a flag saying if its a new user or an old one
}

func Redirect (w http.ResponseWriter, r *http.Request, params denco.Params) {
scopes := strings.Join(models.ListmeraScopes, " ")
id := env.GetOr("SPOTIFY_ID", "test")
uri := env.GetOr("SPOTIFY_REDIRECT_URI", "test2")

redirect := redirectRes{
"https://accounts.spotify.com/authorize?response_type=code&client_id=" + id + "&scope=" +
url.QueryEscape(scopes) + "&redirect_uri=" + url.QueryEscape(uri),
}
resBody := models.GenRedirect()

w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)

err := json.NewEncoder(w).Encode(redirect)
err := json.NewEncoder(w).Encode(resBody)
utils.CheckErr(err)
}
15 changes: 15 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
module github.com/listmera/frank

require (
github.com/go-stack/stack v1.8.0
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db
github.com/joho/godotenv v1.3.0
github.com/mongodb/mongo-go-driver v0.0.16
github.com/naoina/denco v0.0.0-20180930074809-8475105a6b4c
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c
github.com/xdg/stringprep v1.0.0
golang.org/x/crypto v0.0.0-20181012144002-a92615f3c490
golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f
golang.org/x/text v0.3.0
)
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ func main() {
defer models.Disconnect()
r := router.NewRouter()
handler := middleware.ApplyMiddleware(r)
log.Printf("Frank running in %s%s", env.GetOr("FRANK_HOST", "localhost"), env.GetOr("FRANK_PORT", ":3000"))
log.Printf("Frank running in %s%s", env.GetOr("FRANK_HOST", "localhost"), env.GetOr("FRANK_PORT", ":1212"))
err := http.ListenAndServe(env.GetOr("FRANK_PORT", ":1212"), handler)
utils.CheckErr(err)
}
Expand Down
6 changes: 4 additions & 2 deletions middleware/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,11 @@ func logger(h http.Handler) http.Handler {
w.Header()[k] = v
}

// grab the captured response body
body := rw.Body.Bytes()

for key := range rw.HeaderMap {
w.Header().Set(key, w.Header().Get(key))
}
w.WriteHeader(rw.Result().StatusCode)
w.Write(body)
})
}
16 changes: 0 additions & 16 deletions models/scopes.model.go

This file was deleted.

Loading