[WIP] music platform user data scraper
teal-fm
atproto
1package main
2
3import (
4 "net/http"
5
6 "github.com/justinas/alice"
7 "github.com/spf13/viper"
8 "github.com/teal-fm/piper/session"
9)
10
11func (app *application) routes() http.Handler {
12 mux := http.NewServeMux()
13
14 mux.HandleFunc("/", session.WithPossibleAuth(home(app.database), app.sessionManager))
15
16 // OAuth Routes
17 mux.HandleFunc("/login/spotify", app.oauthManager.HandleLogin("spotify"))
18 mux.HandleFunc("/callback/spotify", session.WithPossibleAuth(app.oauthManager.HandleCallback("spotify"), app.sessionManager)) // Use possible auth
19 mux.HandleFunc("/login/atproto", app.oauthManager.HandleLogin("atproto"))
20 mux.HandleFunc("/callback/atproto", session.WithPossibleAuth(app.oauthManager.HandleCallback("atproto"), app.sessionManager)) // Use possible auth
21
22 // Authenticated Web Routes
23 mux.HandleFunc("/current-track", session.WithAuth(app.spotifyService.HandleCurrentTrack, app.sessionManager))
24 mux.HandleFunc("/history", session.WithAuth(app.spotifyService.HandleTrackHistory, app.sessionManager))
25 mux.HandleFunc("/api-keys", session.WithAuth(app.apiKeyService.HandleAPIKeyManagement, app.sessionManager))
26 mux.HandleFunc("/link-lastfm", session.WithAuth(handleLinkLastfmForm(app.database), app.sessionManager)) // GET form
27 mux.HandleFunc("/link-lastfm/submit", session.WithAuth(handleLinkLastfmSubmit(app.database), app.sessionManager)) // POST submit - Changed route slightly
28 mux.HandleFunc("/logout", app.sessionManager.HandleLogout)
29 mux.HandleFunc("/debug/", session.WithAuth(app.sessionManager.HandleDebug, app.sessionManager))
30
31 mux.HandleFunc("/api/v1/me", session.WithAPIAuth(apiMeHandler(app.database), app.sessionManager))
32 mux.HandleFunc("/api/v1/lastfm", session.WithAPIAuth(apiGetLastfmUserHandler(app.database), app.sessionManager))
33 mux.HandleFunc("/api/v1/lastfm/set", session.WithAPIAuth(apiLinkLastfmHandler(app.database), app.sessionManager))
34 mux.HandleFunc("/api/v1/lastfm/unset", session.WithAPIAuth(apiUnlinkLastfmHandler(app.database), app.sessionManager))
35 mux.HandleFunc("/api/v1/current-track", session.WithAPIAuth(apiCurrentTrack(app.spotifyService), app.sessionManager)) // Spotify Current
36 mux.HandleFunc("/api/v1/history", session.WithAPIAuth(apiTrackHistory(app.spotifyService), app.sessionManager)) // Spotify History
37 mux.HandleFunc("/api/v1/musicbrainz/search", apiMusicBrainzSearch(app.mbService)) // MusicBrainz (public?)
38
39 serverUrlRoot := viper.GetString("server.root_url")
40 atpClientId := viper.GetString("atproto.client_id")
41 atpCallbackUrl := viper.GetString("atproto.callback_url")
42 mux.HandleFunc("/.well-known/client-metadata.json", func(w http.ResponseWriter, r *http.Request) {
43 app.atprotoService.HandleClientMetadata(w, r, serverUrlRoot, atpClientId, atpCallbackUrl)
44 })
45 mux.HandleFunc("/oauth/jwks.json", app.atprotoService.HandleJwks)
46
47 standard := alice.New()
48 return standard.Then(mux)
49}