Initial Commit

This commit is contained in:
2017-10-01 17:02:27 +02:00
commit 27032ed489
15 changed files with 834 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
package controllers
import (
"net/http"
"git.aiterp.net/gisle/wrouter"
"git.aiterp.net/gisle/wrouter/auth"
)
// ListController serves the front page's list, with and without filters
var ListController = wrouter.Router{}
func listIndex(path string, w http.ResponseWriter, req *http.Request, user *auth.User) bool {
if req.Method != "GET" {
return false
}
// tags := strings.Split(path, ",")
return true
}
func init() {
ListController.Function("/", listIndex)
}
+96
View File
@@ -0,0 +1,96 @@
package controllers
import (
"errors"
"fmt"
"log"
"strings"
"git.aiterp.net/AiteRP/aitestory/server"
"git.aiterp.net/gisle/wrouter/auth"
"github.com/sadbox/mediawiki"
)
// WikiAthenticator talks with the wiki, allowing users
// to log in
type WikiAthenticator struct{}
func (wikiAuth *WikiAthenticator) ID() string {
return "wiki"
}
func (wikiAuth *WikiAthenticator) Name() string {
return "Wiki"
}
func (wikiAuth *WikiAthenticator) Find(username string) *auth.User {
db := server.Main.DB
rows, err := db.Query("SELECT id,role FROM `user` WHERE id=?", username)
if err != nil {
log.Println("WikiAthenticator.Find:", err)
return nil
}
defer rows.Close()
if !rows.Next() {
return nil
}
user := auth.NewUser(wikiAuth, "", "member", nil)
role := "member"
rows.Scan(&user.ID, &role)
user.Data["role"] = role
return user
}
// Login login
func (wikiAuth *WikiAthenticator) Login(username, password string) (*auth.User, error) {
db := server.Main.DB
// Connect to the wiki
client, err := mediawiki.New(server.Main.Config.Wiki.URL, server.UserAgent)
if err != nil {
log.Fatal(err)
}
// Log into the wiki with the credementials
err = client.Login(username, password)
if err != nil {
return nil, fmt.Errorf("Login failed %v", err)
}
// Look up the user
rows, err := db.Query("SELECT id,role FROM `user` WHERE id=?", client.BasicAuthUser)
if err != nil {
return nil, fmt.Errorf("Login failed %v", err)
return nil, nil
}
// If none was found, just create a new record with the role of member
if !rows.Next() {
_, err = db.Exec("INSERT INTO `user` (id, role) VALUES (?, 'member')", client.BasicAuthUser)
if err != nil {
return nil, fmt.Errorf("Login failed %v", err)
}
return auth.NewUser(wikiAuth, client.BasicAuthUser, "member", nil), nil
}
// If the user was found, read it in
userid, role := "", ""
err = rows.Scan(&userid, &role)
if err != nil {
return nil, fmt.Errorf("Login failed %v", err)
}
userid = strings.Split(userid, "@")[0]
// Make the user
return auth.NewUser(wikiAuth, userid, "member", nil), nil
}
func (wikiAuth *WikiAthenticator) Register(username, password string, data map[string]string) (*auth.User, error) {
return nil, errors.New("Registration not allowed")
}