Skip to content
Draft
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
28 changes: 28 additions & 0 deletions app/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package app

import (
"database/sql"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/sessions"
)

// App holds the application's long-lived dependencies.
type App struct {
DB *sql.DB
SessionStore sessions.Store
Repo core.Repo
UserProvider core.UserProvider
Config *Config
}

// NewApp creates a new App instance.
func NewApp(db *sql.DB, store sessions.Store, repo core.Repo, userProvider core.UserProvider, cfg *Config) *App {
return &App{
DB: db,
SessionStore: store,
Repo: repo,
UserProvider: userProvider,
Config: cfg,
}
}
23 changes: 23 additions & 0 deletions app/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package app

// Config holds the application configuration.
type Config struct {
SessionName string
BaseURL string
ExternalURL string
DevMode bool
GithubClientID string
GithubSecret string
GithubServer string
GitlabClientID string
GitlabSecret string
GitlabServer string
Title string
CssColumns bool
NoFooter bool
LocalGitPath string
CommitsPerPage int
FaviconCacheDir string
FaviconCacheSize int64
FaviconMaxCacheCount int
}
24 changes: 14 additions & 10 deletions authHandlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,27 @@ import (
"context"
"errors"
"fmt"
"log"
"net/http"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/mux"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
"log"
"net/http"
)

func UserLogoutAction(w http.ResponseWriter, r *http.Request) error {
type Data struct {
*CoreData
*core.CoreData
}

data := Data{
CoreData: r.Context().Value(ContextValues("coreData")).(*CoreData),
CoreData: r.Context().Value(core.ContextValues("coreData")).(*core.CoreData),
}

session := r.Context().Value(ContextValues("session")).(*sessions.Session)
// Use the Core interface to get the session
cc := r.Context().Value(core.ContextValues("coreData")).(core.Core)
session := cc.GetSession()
delete(session.Values, "GithubUser")
delete(session.Values, "Token")
delete(session.Values, "Provider")
Expand Down Expand Up @@ -107,7 +111,7 @@ func LoginWithProvider(w http.ResponseWriter, r *http.Request) error {
func Oauth2CallbackPage(w http.ResponseWriter, r *http.Request) error {

type ErrorData struct {
*CoreData
*core.CoreData
Error string
}

Expand Down Expand Up @@ -160,7 +164,7 @@ func Oauth2CallbackPage(w http.ResponseWriter, r *http.Request) error {
return fmt.Errorf("user lookup error: %w", err)
}

if err := ensureRepo(r.Context(), p, user.Login, token); err != nil {
if err := ensureRepo(r.Context(), p, user.GetLogin(), token); err != nil {
// expire the session from the login step
session.Options.MaxAge = -1
_ = session.Save(r, w)
Expand Down Expand Up @@ -204,7 +208,7 @@ func GitLoginAction(w http.ResponseWriter, r *http.Request) error {
return nil
}
session.Values["Provider"] = "git"
session.Values["GithubUser"] = &User{Login: user}
session.Values["GithubUser"] = &core.BasicUser{Login: user}
session.Values["Token"] = nil
session.Values["version"] = version
if err := session.Save(r, w); err != nil {
Expand Down Expand Up @@ -270,7 +274,7 @@ func SqlLoginAction(w http.ResponseWriter, r *http.Request) error {
return nil
}
session.Values["Provider"] = "sql"
session.Values["GithubUser"] = &User{Login: user}
session.Values["GithubUser"] = &core.BasicUser{Login: user}
session.Values["Token"] = nil
session.Values["version"] = version
if err := session.Save(r, w); err != nil {
Expand Down Expand Up @@ -320,7 +324,7 @@ func UserAdderMiddleware(next http.Handler) http.Handler {
log.Printf("session error: %v", err)
}

ctx := context.WithValue(request.Context(), ContextValues("session"), session)
ctx := context.WithValue(request.Context(), core.ContextValues("session"), session)
next.ServeHTTP(writer, request.WithContext(ctx))
})
}
Expand Down
6 changes: 4 additions & 2 deletions autoRefreshPage.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@ package gobookmarks
import (
"fmt"
"net/http"

"github.com/arran4/gobookmarks/core"
)

func TaskDoneAutoRefreshPage(w http.ResponseWriter, r *http.Request) error {
type Data struct {
*CoreData
*core.CoreData
Error string
}

data := Data{
CoreData: r.Context().Value(ContextValues("coreData")).(*CoreData),
CoreData: r.Context().Value(core.ContextValues("coreData")).(*core.CoreData),
Error: r.URL.Query().Get("error"),
}

Expand Down
30 changes: 16 additions & 14 deletions bookmarkActionHandlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,18 @@ package gobookmarks
import (
"errors"
"fmt"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
"net/http"
"strconv"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
)

func BookmarksEditSaveAction(w http.ResponseWriter, r *http.Request) error {
text := r.PostFormValue("text")
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := GetCore(r.Context()).GetSession()
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)
branch := r.PostFormValue("branch")
ref := r.PostFormValue("ref")
Expand Down Expand Up @@ -57,8 +59,8 @@ func BookmarksEditSaveAction(w http.ResponseWriter, r *http.Request) error {

func BookmarksEditCreateAction(w http.ResponseWriter, r *http.Request) error {
text := r.PostFormValue("text")
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)
branch := r.PostFormValue("branch")

Expand All @@ -80,8 +82,8 @@ func CategoryEditSaveAction(w http.ResponseWriter, r *http.Request) error {
if err != nil {
return fmt.Errorf("invalid index: %w", err)
}
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)
branch := r.PostFormValue("branch")
ref := r.PostFormValue("ref")
Expand Down Expand Up @@ -126,8 +128,8 @@ func CategoryMoveBeforeAction(w http.ResponseWriter, r *http.Request) error {
return fmt.Errorf("invalid to index: %w", err)
}

session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)

login := ""
Expand Down Expand Up @@ -178,8 +180,8 @@ func CategoryMoveEndAction(w http.ResponseWriter, r *http.Request) error {
destCol = -1
}

session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)

login := ""
Expand Down Expand Up @@ -237,8 +239,8 @@ func CategoryMoveNewColumnAction(w http.ResponseWriter, r *http.Request) error {
}
destCol, _ := strconv.Atoi(destColStr)

session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)

login := ""
Expand Down
20 changes: 12 additions & 8 deletions categoryAddHandlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,19 @@ package gobookmarks

import (
"fmt"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
"net/http"
"strconv"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
)

func AddCategoryPage(w http.ResponseWriter, r *http.Request) error {
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
w.Header().Set("Content-Type", "text/html; charset=utf-8")

session := GetCore(r.Context()).GetSession()
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)
ref := r.URL.Query().Get("ref")

Expand All @@ -27,14 +31,14 @@ func AddCategoryPage(w http.ResponseWriter, r *http.Request) error {
col, _ := strconv.Atoi(r.URL.Query().Get("col"))

data := struct {
*CoreData
*core.CoreData
Error string
Index int
Text string
Sha string
Col int
}{
CoreData: r.Context().Value(ContextValues("coreData")).(*CoreData),
CoreData: r.Context().Value(core.ContextValues("coreData")).(*core.CoreData),
Error: r.URL.Query().Get("error"),
Index: -1,
Text: "Category: ",
Expand All @@ -57,8 +61,8 @@ func CategoryAddSaveAction(w http.ResponseWriter, r *http.Request) error {
pageIdx, _ := strconv.Atoi(r.PostFormValue("page"))
colIdx, _ := strconv.Atoi(r.PostFormValue("col"))

session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)

login := ""
Expand Down
14 changes: 8 additions & 6 deletions categoryEditHandlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package gobookmarks

import (
"fmt"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
"net/http"
"strconv"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
)

func EditCategoryPage(w http.ResponseWriter, r *http.Request) error {
Expand All @@ -14,8 +16,8 @@ func EditCategoryPage(w http.ResponseWriter, r *http.Request) error {
if err != nil {
return fmt.Errorf("invalid index: %w", err)
}
session := r.Context().Value(ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*User)
session := r.Context().Value(core.ContextValues("session")).(*sessions.Session)
githubUser, _ := session.Values["GithubUser"].(*core.BasicUser)
token, _ := session.Values["Token"].(*oauth2.Token)
ref := r.URL.Query().Get("ref")

Expand All @@ -36,14 +38,14 @@ func EditCategoryPage(w http.ResponseWriter, r *http.Request) error {
col, _ := strconv.Atoi(r.URL.Query().Get("col"))

data := struct {
*CoreData
*core.CoreData
Error string
Index int
Text string
Sha string
Col int
}{
CoreData: r.Context().Value(ContextValues("coreData")).(*CoreData),
CoreData: r.Context().Value(core.ContextValues("coreData")).(*core.CoreData),
Error: r.URL.Query().Get("error"),
Index: idx,
Text: text,
Expand Down
9 changes: 5 additions & 4 deletions category_edit_http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"strings"
"testing"

"github.com/arran4/gobookmarks/core"
"github.com/gorilla/sessions"
"golang.org/x/oauth2"
)
Expand All @@ -26,11 +27,11 @@ func setupCategoryEditTest(t *testing.T) (GitProvider, string, *sessions.Session
if err != nil {
t.Fatalf("getSession: %v", err)
}
sess.Values["GithubUser"] = &User{Login: user}
sess.Values["GithubUser"] = &core.BasicUser{Login: user}
sess.Values["Token"] = &oauth2.Token{}
ctx := context.WithValue(sessReq.Context(), ContextValues("session"), sess)
ctx = context.WithValue(ctx, ContextValues("provider"), "git")
ctx = context.WithValue(ctx, ContextValues("coreData"), &CoreData{})
ctx := context.WithValue(sessReq.Context(), core.ContextValues("session"), sess)
ctx = context.WithValue(ctx, core.ContextValues("provider"), "git")
ctx = context.WithValue(ctx, core.ContextValues("coreData"), &core.CoreData{Session: sess})
return p, user, sess, ctx
}

Expand Down
Loading