9 Commits 404d8216a1 ... 418c37c09d

Author SHA1 Message Date
  Adam 418c37c09d add session verification in person 4 years ago
  Adam 860e254b21 add session verification in tvserie 4 years ago
  Adam a3825eed5c add session verification in bookserie 4 years ago
  Adam e916238553 add session verification in book 4 years ago
  Adam 32ad866ea3 add session verification in about 4 years ago
  Adam 053abbb013 add session verification in search 4 years ago
  Adam 11be910a18 ignore auth errors when no auth required 4 years ago
  Adam 8320f0364d split login route 4 years ago
  Adam 4d0115918c redirect to previous page after logging in 4 years ago
10 changed files with 49 additions and 26 deletions
  1. 1 8
      accounts/common.go
  2. 1 1
      front/capnproto.go
  3. 14 8
      front/html.go
  4. 1 1
      front/renderer.go
  5. 6 2
      libamuse/about.go
  6. 6 0
      libamuse/account.go
  7. 5 2
      libamuse/book.go
  8. 5 2
      libamuse/bookserie.go
  9. 10 2
      libamuse/common.go
  10. 0 0
      libamuse/film.go

+ 1 - 8
accounts/common.go

@@ -10,16 +10,9 @@ func (u User) IsEmpty() bool {
 	return u.Username == ""
 }
 
-type AuthenticationSource int
-
-const (
-	Header AuthenticationSource = iota
-	Cookie
-)
-
 type Authentication struct {
 	Token  string
-	Source AuthenticationSource
+	Necessary bool
 }
 
 type AuthError struct {

+ 1 - 1
front/capnproto.go

@@ -49,7 +49,7 @@ func (CapnprotoRenderer) RenderErrorPage(code int, languages []language.Tag) str
 	return TODO("implement CapnprotoRenderer.RenderErrorPage").(string)
 }
 
-func (CapnprotoRenderer) RenderLogin(languages []language.Tag, err error) string {
+func (CapnprotoRenderer) RenderLogin(languages []language.Tag, err error, target string) string {
 	// todo throw Wrong Accept
 	return TODO("implement CapnprotoRenderer.RenderLogin").(string)
 }

+ 14 - 8
front/html.go

@@ -76,12 +76,13 @@ func (r HtmlRenderer) RenderFilm(film *tmdb.Film, languages []language.Tag) stri
 	return render(languages, data, "film")
 }
 
-func (HtmlRenderer) RenderSearch(tmdbResults *tmdb.SearchResults, inventaireResults *wikidata.SearchResults, languages []language.Tag) string {
+func (r HtmlRenderer) RenderSearch(tmdbResults *tmdb.SearchResults, inventaireResults *wikidata.SearchResults, languages []language.Tag) string {
 	results := struct {
 		T *tmdb.SearchResults
 		I *wikidata.SearchResults
 	}{tmdbResults, inventaireResults}
 	data := RenderData{Data: results}
+	data.State.User = r.user
 	return render(languages, data, "search")
 }
 
@@ -91,28 +92,33 @@ func (r HtmlRenderer) RenderIndex(randomComedy string, languages []language.Tag)
 	return render(languages, data, "index")
 }
 
-func (HtmlRenderer) RenderTvSerie(tvSerie *tmdb.TvSerie, languages []language.Tag) string {
+func (r HtmlRenderer) RenderTvSerie(tvSerie *tmdb.TvSerie, languages []language.Tag) string {
 	data := RenderData{Data: tvSerie}
+	data.State.User = r.user
 	return render(languages, data, "tvserie")
 }
 
-func (HtmlRenderer) RenderPerson(person *tmdb.Person, languages []language.Tag) string {
+func (r HtmlRenderer) RenderPerson(person *tmdb.Person, languages []language.Tag) string {
 	data := RenderData{Data: person}
+	data.State.User = r.user
 	return render(languages, data, "person")
 }
 
-func (HtmlRenderer) RenderBook(book wikidata.Book, languages []language.Tag) string {
+func (r HtmlRenderer) RenderBook(book wikidata.Book, languages []language.Tag) string {
 	data := RenderData{Data: book}
+	data.State.User = r.user
 	return render(languages, data, "book")
 }
 
-func (HtmlRenderer) RenderBookSerie(bookSerie wikidata.BookSerie, languages []language.Tag) string {
+func (r HtmlRenderer) RenderBookSerie(bookSerie wikidata.BookSerie, languages []language.Tag) string {
 	data := RenderData{Data: bookSerie}
+	data.State.User = r.user
 	return render(languages, data, "bookserie")
 }
 
-func (HtmlRenderer) RenderAbout(languages []language.Tag) string {
+func (r HtmlRenderer) RenderAbout(languages []language.Tag) string {
 	data := RenderData{}
+	data.State.User = r.user
 	return render(languages, data, "about")
 }
 
@@ -121,8 +127,8 @@ func (HtmlRenderer) RenderErrorPage(code int, languages []language.Tag) string {
 	return render(languages, data, "error")
 }
 
-func (HtmlRenderer) RenderLogin(languages []language.Tag, authError error) string {
-	data := RenderData{}
+func (HtmlRenderer) RenderLogin(languages []language.Tag, authError error, target string) string {
+	data := RenderData{Data: target}
 	data.State.Error = authError
 	return render(languages, data, "login")
 }

+ 1 - 1
front/renderer.go

@@ -26,7 +26,7 @@ type Renderer interface {
 	RenderBookSerie(wikidata.BookSerie, []language.Tag) string
 	RenderAbout([]language.Tag) string
 	RenderErrorPage(int, []language.Tag) string
-	RenderLogin([]language.Tag, error) string
+	RenderLogin([]language.Tag, error, string) string
 }
 
 func NewRenderer(mimetype string, user accounts.User) (Renderer, error) {

+ 6 - 2
libamuse/about.go

@@ -1,6 +1,8 @@
 package libamuse
 
 import (
+	"notabug.org/apiote/amuse/accounts"
+	
 	"notabug.org/apiote/gott"
 )
 
@@ -12,10 +14,12 @@ func renderAbout(args ...interface{}) interface{} {
 	return gott.Tuple(args)
 }
 
-func ShowAbout(language, mimetype string) (string, error) {
+func ShowAbout(language, mimetype string, auth accounts.Authentication) (string, error) {
+	auth.Necessary = false
 	r, err := gott.
-		NewResult(gott.Tuple{&RequestData{language: language, mimetype: mimetype}, &Result{}}).
+		NewResult(gott.Tuple{&RequestData{language: language, mimetype: mimetype, auth: auth}, &Result{}}).
 		Bind(parseLanguage).
+		Bind(verifyToken).
 		Bind(createRenderer).
 		Map(renderAbout).
 		Finish()

+ 6 - 0
libamuse/account.go

@@ -16,6 +16,9 @@ func VerifyAuthToken(token accounts.Authentication) (accounts.User, error) {
 	}
 	session, err := db.GetSession(token.Token)
 	if err != nil {
+		if _, ok := err.(db.EmptyError); ok {
+			err = accounts.AuthError{Err: err}
+		}
 		fmt.Fprintf(os.Stderr, "Get session err: %v", err)
 		return accounts.User{}, err
 	}
@@ -25,6 +28,9 @@ func VerifyAuthToken(token accounts.Authentication) (accounts.User, error) {
 	}
 	dbUser, err := db.GetUser(session.Username)
 	if err != nil {
+		if _, ok := err.(db.EmptyError); ok {
+			err = accounts.AuthError{Err: err}
+		}
 		fmt.Fprintf(os.Stderr, "Get user err: %v", err)
 		return accounts.User{}, err
 	}

+ 5 - 2
libamuse/book.go

@@ -2,6 +2,7 @@ package libamuse
 
 import (
 	"notabug.org/apiote/amuse/wikidata"
+	"notabug.org/apiote/amuse/accounts"
 
 	"notabug.org/apiote/gott"
 )
@@ -32,10 +33,12 @@ func renderBook(args ...interface{}) interface{} {
 	return gott.Tuple(args)
 }
 
-func ShowBook(id, language, mimetype string) (string, error) {
+func ShowBook(id, language, mimetype string, auth accounts.Authentication) (string, error) {
+	auth.Necessary = false
 	r, err := gott.
-		NewResult(gott.Tuple{&RequestData{id: id, language: language, mimetype: mimetype}, &Result{}}).
+		NewResult(gott.Tuple{&RequestData{id: id, language: language, mimetype: mimetype, auth: auth}, &Result{}}).
 		Bind(parseLanguage).
+		Bind(verifyToken).
 		Bind(getBook).
 		Bind(getDescription).
 		Bind(getCover).

+ 5 - 2
libamuse/bookserie.go

@@ -3,6 +3,7 @@ package libamuse
 import (
 	"notabug.org/apiote/amuse/wikidata"
 	"notabug.org/apiote/amuse/utils"
+	"notabug.org/apiote/amuse/accounts"
 
 	"strings"
 
@@ -50,10 +51,12 @@ func renderBookSerie(args ...interface{}) interface{} {
 	return gott.Tuple(args)
 }
 
-func ShowBookSerie(id, language, mimetype string) (string, error) {
+func ShowBookSerie(id, language, mimetype string, auth accounts.Authentication) (string, error) {
+	auth.Necessary = false
 	r, err := gott.
-		NewResult(gott.Tuple{&RequestData{id: id, language: language, mimetype: mimetype}, &Result{}}).
+		NewResult(gott.Tuple{&RequestData{id: id, language: language, mimetype: mimetype, auth: auth}, &Result{}}).
 		Bind(parseLanguage).
+		Bind(verifyToken).
 		Bind(getBookSerie).
 		Bind(getOrdinals).
 		Bind(getDescription).

+ 10 - 2
libamuse/common.go

@@ -15,12 +15,16 @@ import (
 type Data interface {
 	getLanguage() string
 	getMimeType() string
+	getAuth() accounts.Authentication
 }
 
 func verifyToken(args ...interface{}) (interface{}, error) {
-	requestData := args[0].(*RequestData)
+	data := args[0].(Data)
 	result := args[1].(*Result)
-	user, err := VerifyAuthToken(requestData.auth)
+	user, err := VerifyAuthToken(data.getAuth())
+	if _, ok := err.(accounts.AuthError); ok && !data.getAuth().Necessary {
+		err = nil
+	}
 	result.user = user
 	return gott.Tuple(args), err
 }
@@ -103,3 +107,7 @@ func (d RequestData) getLanguage() string {
 func (d RequestData) getMimeType() string {
 	return d.mimetype
 }
+
+func (d RequestData) getAuth() accounts.Authentication {
+	return d.auth
+}

+ 0 - 0
libamuse/film.go


Some files were not shown because too many files changed in this diff