Added frontpage and Google login

This commit is contained in:
Eduard Urbach 2017-06-15 23:03:55 +02:00
parent 938057a626
commit 2d8d8299ef
12 changed files with 99 additions and 33 deletions

BIN
images/login/facebook.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
images/login/google.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
images/login/twitter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

13
layout/layout.go Normal file
View File

@ -0,0 +1,13 @@
package layout
import (
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/utils"
)
// Render layout.
func Render(ctx *aero.Context, content string) string {
user := utils.GetUser(ctx)
return components.Layout(ctx.App, user, content)
}

View File

@ -1,4 +1,4 @@
component Layout(app *aero.Application, content string) component Layout(app *aero.Application, user *arn.User, content string)
html(lang="en") html(lang="en")
head head
title= app.Config.Title title= app.Config.Title
@ -7,7 +7,7 @@ component Layout(app *aero.Application, content string)
body body
#container #container
#header #header
Navigation Navigation(user)
#content-container #content-container
main#content.fade!= content main#content.fade!= content

22
main.go
View File

@ -8,6 +8,7 @@ import (
"github.com/aerogo/aero" "github.com/aerogo/aero"
"github.com/animenotifier/arn" "github.com/animenotifier/arn"
"github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/layout"
"github.com/animenotifier/notify.moe/pages/airing" "github.com/animenotifier/notify.moe/pages/airing"
"github.com/animenotifier/notify.moe/pages/anime" "github.com/animenotifier/notify.moe/pages/anime"
"github.com/animenotifier/notify.moe/pages/awards" "github.com/animenotifier/notify.moe/pages/awards"
@ -34,9 +35,7 @@ func main() {
app.Sessions.Store = arn.NewAerospikeStore("Session") app.Sessions.Store = arn.NewAerospikeStore("Session")
// Layout // Layout
app.Layout = func(ctx *aero.Context, content string) string { app.Layout = layout.Render
return components.Layout(app, content)
}
// Production or Development mode // Production or Development mode
host, _ := os.Hostname() host, _ := os.Hostname()
@ -64,11 +63,7 @@ func main() {
// Favicon // Favicon
app.Get("/favicon.ico", func(ctx *aero.Context) string { app.Get("/favicon.ico", func(ctx *aero.Context) string {
if ctx.CanUseWebP() { return ctx.Image("images/icons/favicon", ".png")
return ctx.File("images/icons/favicon.webp")
}
return ctx.File("images/icons/favicon.png")
}) })
// Scripts // Scripts
@ -83,13 +78,12 @@ func main() {
// Cover image // Cover image
app.Get("/images/cover/:file", func(ctx *aero.Context) string { app.Get("/images/cover/:file", func(ctx *aero.Context) string {
format := ".jpg" return ctx.Image("images/cover/"+ctx.Get("file"), ".jpg")
})
if ctx.CanUseWebP() { // Login buttons
format = ".webp" app.Get("/images/login/:file", func(ctx *aero.Context) string {
} return ctx.File("images/login/" + ctx.Get("file") + ".png")
return ctx.File("images/cover/" + ctx.Get("file") + format)
}) })
// Avatars // Avatars

View File

@ -1,14 +1,34 @@
component Navigation component Navigation(user *arn.User)
if user == nil
LoggedOutMenu
else
LoggedInMenu
component LoggedOutMenu
nav#navigation nav#navigation
NavigationButton("Dash", "/", "inbox") NavigationButton("Dash", "/", "inbox")
NavigationButton("Anime", "/anime", "television") NavigationButton("Anime", "/anime", "television")
NavigationButton("Forum", "/forum", "comment") NavigationButton("Forum", "/forum", "comment")
NavigationButton("Users", "/users", "globe") NavigationButton("Users", "/users", "globe")
NavigationButton("Airing", "/airing", "rss") NavigationButton("Airing", "/airing", "rss")
//- NavigationButton("Users", "/users", "globe")
component LoggedInMenu
nav#navigation
NavigationButton("Dash", "/", "inbox")
NavigationButton("Anime", "/anime", "television")
NavigationButton("Forum", "/forum", "comment")
NavigationButton("Users", "/users", "globe")
NavigationButton("Airing", "/airing", "rss")
NavigationButtonNoAJAX("Logout", "/logout", "sign-out")
component NavigationButton(name string, target string, icon string) component NavigationButton(name string, target string, icon string)
a.navigation-link.ajax(href=target) a.navigation-link.ajax(href=target)
.navigation-button
i(class="fa fa-" + icon)
span.navigation-text= name
component NavigationButtonNoAJAX(name string, target string, icon string)
a.navigation-link(href=target)
.navigation-button .navigation-button
i(class="fa fa-" + icon) i(class="fa fa-" + icon)
span.navigation-text= name span.navigation-text= name

View File

@ -4,6 +4,7 @@ import (
"github.com/aerogo/aero" "github.com/aerogo/aero"
"github.com/animenotifier/arn" "github.com/animenotifier/arn"
"github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/pages/frontpage"
"github.com/animenotifier/notify.moe/utils" "github.com/animenotifier/notify.moe/utils"
) )
@ -13,21 +14,21 @@ const maxPosts = 5
func Get(ctx *aero.Context) string { func Get(ctx *aero.Context) string {
user := utils.GetUser(ctx) user := utils.GetUser(ctx)
if user != nil { if user == nil {
posts, err := arn.GetPosts() return frontpage.Get(ctx)
if err != nil {
return ctx.Error(500, "Error fetching posts", err)
}
arn.SortPostsLatestFirst(posts)
if len(posts) > maxPosts {
posts = posts[:maxPosts]
}
return ctx.HTML(components.Dashboard(posts))
} }
return ctx.HTML("ARN 4.0 is currently under construction.<br><a href='https://paypal.me/blitzprog' target='_blank' rel='noopener'>Support the development</a><br><a href='/auth/google'>Login via Google</a>") posts, err := arn.GetPosts()
if err != nil {
return ctx.Error(500, "Error fetching posts", err)
}
arn.SortPostsLatestFirst(posts)
if len(posts) > maxPosts {
posts = posts[:maxPosts]
}
return ctx.HTML(components.Dashboard(posts))
} }

View File

@ -0,0 +1,11 @@
package frontpage
import (
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/components"
)
// Get ...
func Get(ctx *aero.Context) string {
return ctx.HTML(components.FrontPage())
}

View File

@ -0,0 +1,8 @@
component FrontPage
p Anime Notifier 4.0 is currently under construction.
p
a(href="https://paypal.me/blitzprog", rel="noopener") Support the development
.login-buttons
a.login-button(href="/auth/google")
img.login-button-image(src="/images/login/google", alt="Google Login", title="Login with your Google account")

View File

@ -0,0 +1,11 @@
.login-buttons
horizontal-wrap
width 100%
justify-content center
.login-button
//
.login-button-image
max-width 236px
max-height 44px

View File

@ -10,6 +10,7 @@ func main() {
arn.DB.DeleteTable("NickToUser") arn.DB.DeleteTable("NickToUser")
arn.DB.DeleteTable("EmailToUser") arn.DB.DeleteTable("EmailToUser")
arn.DB.DeleteTable("GoogleToUser")
// Get a stream of all anime // Get a stream of all anime
allUsers, err := arn.AllUsers() allUsers, err := arn.AllUsers()
@ -29,6 +30,13 @@ func main() {
if user.Email != "" { if user.Email != "" {
user.SetEmail(user.Email) user.SetEmail(user.Email)
} }
if user.Accounts.Google.ID != "" {
arn.DB.Set("GoogleToUser", user.Accounts.Google.ID, &arn.GoogleToUser{
ID: user.Accounts.Google.ID,
UserID: user.ID,
})
}
} }
color.Green("Finished.") color.Green("Finished.")