Debugging
This commit is contained in:
@@ -1,50 +1,50 @@
|
||||
package models
|
||||
// package models
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
// import (
|
||||
// "github.com/jinzhu/gorm"
|
||||
// )
|
||||
|
||||
//Group type
|
||||
type Group struct {
|
||||
gorm.Model
|
||||
Name string
|
||||
Permissions map[string]bool
|
||||
Admin bool
|
||||
Users []string
|
||||
}
|
||||
// //Group type
|
||||
// type Group struct {
|
||||
// gorm.Model
|
||||
// Name string
|
||||
// Permissions map[string]bool
|
||||
// Admin bool
|
||||
// Users []string
|
||||
// }
|
||||
|
||||
func NewGroup(Name string) Group {
|
||||
var group Group
|
||||
group.Permissions = make(map[string]bool)
|
||||
return group
|
||||
}
|
||||
// func NewGroup(Name string) Group {
|
||||
// var group Group
|
||||
// group.Permissions = make(map[string]bool)
|
||||
// return group
|
||||
// }
|
||||
|
||||
//Create group
|
||||
func (g *Group) Create() error {
|
||||
return create(&g)
|
||||
}
|
||||
// //Create group
|
||||
// func (g *Group) Create() error {
|
||||
// return create(&g)
|
||||
// }
|
||||
|
||||
//Read group
|
||||
func (g *Group) Read() error {
|
||||
return read(&g)
|
||||
// //Read group
|
||||
// func (g *Group) Read() error {
|
||||
// return read(&g)
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
//ReadAll groups
|
||||
func (g *Group) ReadAll() ([]Group, error) {
|
||||
var groups []Group
|
||||
var err error
|
||||
err = readAll(&groups)
|
||||
return groups, err
|
||||
}
|
||||
// //ReadAll groups
|
||||
// func (g *Group) ReadAll() ([]Group, error) {
|
||||
// var groups []Group
|
||||
// var err error
|
||||
// err = readAll(&groups)
|
||||
// return groups, err
|
||||
// }
|
||||
|
||||
//Update group
|
||||
func (g *Group) Update() error {
|
||||
return update(&g)
|
||||
}
|
||||
// //Update group
|
||||
// func (g *Group) Update() error {
|
||||
// return update(&g)
|
||||
// }
|
||||
|
||||
//Delete group
|
||||
func (g *Group) Delete() error {
|
||||
err := delete(&g)
|
||||
return err
|
||||
}
|
||||
// //Delete group
|
||||
// func (g *Group) Delete() error {
|
||||
// err := delete(&g)
|
||||
// return err
|
||||
// }
|
||||
|
@@ -1,25 +1,25 @@
|
||||
package models
|
||||
// package models
|
||||
|
||||
import (
|
||||
"testing"
|
||||
// import (
|
||||
// "testing"
|
||||
|
||||
"github.com/globalsign/mgo/bson"
|
||||
)
|
||||
// "github.com/globalsign/mgo/bson"
|
||||
// )
|
||||
|
||||
func TestCreateGroup(t *testing.T) {
|
||||
group := NewGroup("test")
|
||||
group.Users = append(group.Users, bson.NewObjectId())
|
||||
group.Permissions["test"] = true
|
||||
t.Log(group.Create())
|
||||
}
|
||||
// func TestCreateGroup(t *testing.T) {
|
||||
// group := NewGroup("test")
|
||||
// group.Users = append(group.Users, bson.NewObjectId())
|
||||
// group.Permissions["test"] = true
|
||||
// t.Log(group.Create())
|
||||
// }
|
||||
|
||||
func TestReadGroup(t *testing.T) {
|
||||
var group Group
|
||||
group.Read("name", "test")
|
||||
t.Log(group)
|
||||
}
|
||||
// func TestReadGroup(t *testing.T) {
|
||||
// var group Group
|
||||
// group.Read("name", "test")
|
||||
// t.Log(group)
|
||||
// }
|
||||
|
||||
func TestReadAllGroup(t *testing.T) {
|
||||
var group Group
|
||||
t.Log(group.ReadAll())
|
||||
}
|
||||
// func TestReadAllGroup(t *testing.T) {
|
||||
// var group Group
|
||||
// t.Log(group.ReadAll())
|
||||
// }
|
||||
|
@@ -1,33 +1,27 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/jinzhu/gorm"
|
||||
_ "github.com/jinzhu/gorm/dialects/postgres" //
|
||||
_ "github.com/jinzhu/gorm/dialects/postgres"
|
||||
"gorm.io/driver/sqlite"
|
||||
)
|
||||
|
||||
const (
|
||||
host = "localhost"
|
||||
port = 5432
|
||||
user = "test"
|
||||
password = "test"
|
||||
dbname = "test"
|
||||
)
|
||||
// var (
|
||||
// gormdb, err =
|
||||
// store = gormstore.New(gormdb, []byte("secret"))
|
||||
// )
|
||||
|
||||
var psqlInfo string
|
||||
var db *gorm.DB
|
||||
|
||||
func init() {
|
||||
psqlInfo = fmt.Sprintf("host=%s port=%d user=%s "+
|
||||
"password=%s dbname=%s sslmode=disable",
|
||||
host, port, user, password, dbname)
|
||||
DB()
|
||||
|
||||
}
|
||||
|
||||
func DB() (*gorm.DB, error) {
|
||||
if db == nil {
|
||||
db, err := gorm.Open("postgres", psqlInfo)
|
||||
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
|
||||
db.LogMode(true)
|
||||
return db, err
|
||||
}
|
||||
|
@@ -1,37 +1,42 @@
|
||||
package models
|
||||
package models_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"git.technical.kiwi/go/otfe/models"
|
||||
)
|
||||
|
||||
func TestGetSession(t *testing.T) {
|
||||
GetMongoSession()
|
||||
func TestGetDB(t *testing.T) {
|
||||
db, err := models.DB()
|
||||
if !err || !db {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestGetCollection(t *testing.T) {
|
||||
GetCollection("test")
|
||||
//GetCollection("test")
|
||||
}
|
||||
|
||||
func TestCreate(t *testing.T) {
|
||||
create("user", &User{Name: "Ale"})
|
||||
//create("user", &User{Name: "Ale"})
|
||||
}
|
||||
|
||||
func TestReadAll(t *testing.T) {
|
||||
var u []User
|
||||
readAll("user", "", nil, &u)
|
||||
t.Log(u)
|
||||
//var u []User
|
||||
//readAll("user", "", nil, &u)
|
||||
//t.Log(u)
|
||||
}
|
||||
|
||||
func TestRead(t *testing.T) {
|
||||
var u User
|
||||
read("user", "name", "Ann", &u)
|
||||
t.Log(u)
|
||||
//var u User
|
||||
//read("user", "name", "Ann", &u)
|
||||
//t.Log(u)
|
||||
}
|
||||
|
||||
func TestUpdate(t *testing.T) {
|
||||
update("test", "name", "Ale", &User{Name: "Bob", Email: "z"})
|
||||
//update("test", "name", "Ale", &User{Name: "Bob", Email: "z"})
|
||||
}
|
||||
|
||||
func TestDelete(t *testing.T) {
|
||||
t.Log(delete("user", "name", "Ann"))
|
||||
//t.Log(delete("user", "name", "Ann"))
|
||||
}
|
||||
|
@@ -1,33 +1,33 @@
|
||||
package models
|
||||
// package models
|
||||
|
||||
import (
|
||||
"time"
|
||||
// import (
|
||||
// "time"
|
||||
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
// "github.com/jinzhu/gorm"
|
||||
// )
|
||||
|
||||
//Post model
|
||||
type Post struct {
|
||||
gorm.Model
|
||||
Title string
|
||||
Author string
|
||||
Published time.Time
|
||||
LastEdited time.Time
|
||||
Content []byte
|
||||
}
|
||||
// //Post model
|
||||
// type Post struct {
|
||||
// gorm.Model
|
||||
// Title string
|
||||
// Author string
|
||||
// Published time.Time
|
||||
// LastEdited time.Time
|
||||
// Content []byte
|
||||
// }
|
||||
|
||||
//Create new post
|
||||
func (p Post) Create() error {
|
||||
return create(&p)
|
||||
}
|
||||
// //Create new post
|
||||
// func (p Post) Create() error {
|
||||
// return create(&p)
|
||||
// }
|
||||
|
||||
func (p *Post) Read() (*Post, error) {
|
||||
err := read(&p)
|
||||
return p, err
|
||||
}
|
||||
// func (p *Post) Read() (*Post, error) {
|
||||
// err := read(&p)
|
||||
// return p, err
|
||||
// }
|
||||
|
||||
func (p Post) ReadAll() ([]Post, error) {
|
||||
var posts []Post
|
||||
err := readAll(&posts)
|
||||
return posts, err
|
||||
}
|
||||
// func (p Post) ReadAll() ([]Post, error) {
|
||||
// var posts []Post
|
||||
// err := readAll(&posts)
|
||||
// return posts, err
|
||||
// }
|
||||
|
@@ -4,7 +4,7 @@ import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"git.1248.nz/1248/Otfe/misc/cookie"
|
||||
"git.technical.kiwi/go/otfe/misc/cookie"
|
||||
"github.com/globalsign/mgo/bson"
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
|
@@ -1,51 +1,51 @@
|
||||
package models
|
||||
// package models
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"testing"
|
||||
// import (
|
||||
// "net/http"
|
||||
// "testing"
|
||||
|
||||
"git.1248.nz/1248/Otfe/misc/b64"
|
||||
"git.1248.nz/1248/Otfe/misc/helpers"
|
||||
"git.1248.nz/1248/Otfe/misc/rand"
|
||||
)
|
||||
// "git.technical.kiwi/go/otfe/misc/b64"
|
||||
// "git.technical.kiwi/go/otfe/misc/helpers"
|
||||
// "git.technical.kiwi/go/otfe/misc/rand"
|
||||
// )
|
||||
|
||||
func TestSessionCreate(t *testing.T) {
|
||||
var s1, s2 Session
|
||||
s1.ID, _ = rand.B64String(32)
|
||||
if s1.Create() != nil {
|
||||
t.Fail()
|
||||
}
|
||||
read("session", "_id", s1.ID, &s2)
|
||||
// func TestSessionCreate(t *testing.T) {
|
||||
// var s1, s2 Session
|
||||
// s1.ID, _ = rand.B64String(32)
|
||||
// if s1.Create() != nil {
|
||||
// t.Fail()
|
||||
// }
|
||||
// read("session", "_id", s1.ID, &s2)
|
||||
|
||||
if s1.ID != s2.ID {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
// if s1.ID != s2.ID {
|
||||
// t.Fail()
|
||||
// }
|
||||
// }
|
||||
|
||||
func TestSessionRead(t *testing.T) {
|
||||
var s1, s2 Session
|
||||
s1.ID, _ = rand.B64String(32)
|
||||
if create("session", &s1) != nil {
|
||||
t.Fatal("Failed to create session")
|
||||
}
|
||||
if s2.Read(s1.ID) != nil {
|
||||
t.Fatal("Failed to read session")
|
||||
}
|
||||
if s1.ID != s2.ID {
|
||||
t.Fatal("Ids don't match")
|
||||
}
|
||||
}
|
||||
// func TestSessionRead(t *testing.T) {
|
||||
// var s1, s2 Session
|
||||
// s1.ID, _ = rand.B64String(32)
|
||||
// if create("session", &s1) != nil {
|
||||
// t.Fatal("Failed to create session")
|
||||
// }
|
||||
// if s2.Read(s1.ID) != nil {
|
||||
// t.Fatal("Failed to read session")
|
||||
// }
|
||||
// if s1.ID != s2.ID {
|
||||
// t.Fatal("Ids don't match")
|
||||
// }
|
||||
// }
|
||||
|
||||
func TestGet(t *testing.T) {
|
||||
DBWipeCollection("session")
|
||||
var s1, s2 Session
|
||||
s1.ID, _ = rand.B64String(32)
|
||||
s1.Create()
|
||||
c := &http.Cookie{Name: "session",
|
||||
Value: b64.Encode(s1.ID)}
|
||||
request, err := http.NewRequest("GET", "/", nil)
|
||||
helpers.Ok(t, err)
|
||||
request.AddCookie(c)
|
||||
s2.Get(request)
|
||||
helpers.Equals(t, s1, s2)
|
||||
}
|
||||
// func TestGet(t *testing.T) {
|
||||
// DBWipeCollection("session")
|
||||
// var s1, s2 Session
|
||||
// s1.ID, _ = rand.B64String(32)
|
||||
// s1.Create()
|
||||
// c := &http.Cookie{Name: "session",
|
||||
// Value: b64.Encode(s1.ID)}
|
||||
// request, err := http.NewRequest("GET", "/", nil)
|
||||
// helpers.Ok(t, err)
|
||||
// request.AddCookie(c)
|
||||
// s2.Get(request)
|
||||
// helpers.Equals(t, s1, s2)
|
||||
// }
|
||||
|
136
models/user.go
136
models/user.go
@@ -1,80 +1,80 @@
|
||||
package models
|
||||
// package models
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
// import (
|
||||
// "errors"
|
||||
// "fmt"
|
||||
|
||||
"github.com/globalsign/mgo/bson"
|
||||
)
|
||||
// "github.com/globalsign/mgo/bson"
|
||||
// )
|
||||
|
||||
//User model
|
||||
type User struct {
|
||||
ID bson.ObjectId `bson:"_id,omitempty"`
|
||||
Email string `bson:"email"`
|
||||
Name string `bson:"name"`
|
||||
Username string `bson:"username"`
|
||||
Password string `bson:"password"`
|
||||
PrimaryGroup bson.ObjectId `bson:"primarygroup,omitempty"`
|
||||
Groups []bson.ObjectId `bson:"groups,omitempty"`
|
||||
Session string
|
||||
}
|
||||
// //User model
|
||||
// type User struct {
|
||||
// ID bson.ObjectId `bson:"_id,omitempty"`
|
||||
// Email string `bson:"email"`
|
||||
// Name string `bson:"name"`
|
||||
// Username string `bson:"username"`
|
||||
// Password string `bson:"password"`
|
||||
// PrimaryGroup bson.ObjectId `bson:"primarygroup,omitempty"`
|
||||
// Groups []bson.ObjectId `bson:"groups,omitempty"`
|
||||
// Session string
|
||||
// }
|
||||
|
||||
//Create user
|
||||
func (u *User) Create() error {
|
||||
var user User
|
||||
read("user", "email", u.Email, &user)
|
||||
if u.Email == user.Email {
|
||||
return errors.New("Email all ready used")
|
||||
}
|
||||
return create("user", &u)
|
||||
// //Create user
|
||||
// func (u *User) Create() error {
|
||||
// var user User
|
||||
// read("user", "email", u.Email, &user)
|
||||
// if u.Email == user.Email {
|
||||
// return errors.New("Email all ready used")
|
||||
// }
|
||||
// return create("user", &u)
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
//Read user
|
||||
func (u *User) Read(key string, value interface{}) error {
|
||||
err := read("user", key, value, &u)
|
||||
if err != nil {
|
||||
return errors.New("User doesn't exist")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// //Read user
|
||||
// func (u *User) Read(key string, value interface{}) error {
|
||||
// err := read("user", key, value, &u)
|
||||
// if err != nil {
|
||||
// return errors.New("User doesn't exist")
|
||||
// }
|
||||
// return nil
|
||||
// }
|
||||
|
||||
//ReadAll users
|
||||
func (u *User) ReadAll() ([]User, error) {
|
||||
var users []User
|
||||
var err error
|
||||
err = readAll("user", "", nil, &users)
|
||||
return users, err
|
||||
// //ReadAll users
|
||||
// func (u *User) ReadAll() ([]User, error) {
|
||||
// var users []User
|
||||
// var err error
|
||||
// err = readAll("user", "", nil, &users)
|
||||
// return users, err
|
||||
|
||||
}
|
||||
// }
|
||||
|
||||
//Update user
|
||||
func (u *User) Update() error {
|
||||
return update("user", "_id", u.ID, &u)
|
||||
}
|
||||
// //Update user
|
||||
// func (u *User) Update() error {
|
||||
// return update("user", "_id", u.ID, &u)
|
||||
// }
|
||||
|
||||
//Delete user
|
||||
func (u *User) Delete(key string, value string) error {
|
||||
err := delete("user", key, value)
|
||||
return err
|
||||
}
|
||||
// //Delete user
|
||||
// func (u *User) Delete(key string, value string) error {
|
||||
// err := delete("user", key, value)
|
||||
// return err
|
||||
// }
|
||||
|
||||
//HasPermission check if a given user is admin or has a given permisssion
|
||||
func (u *User) HasPermission(perm string) bool {
|
||||
var group Group
|
||||
//Check primary group
|
||||
err := group.Read("_id", u.PrimaryGroup)
|
||||
fmt.Println(group.Admin)
|
||||
if err == nil && (group.Admin == true || group.Permissions[perm] == true) {
|
||||
// //HasPermission check if a given user is admin or has a given permisssion
|
||||
// func (u *User) HasPermission(perm string) bool {
|
||||
// var group Group
|
||||
// //Check primary group
|
||||
// err := group.Read("_id", u.PrimaryGroup)
|
||||
// fmt.Println(group.Admin)
|
||||
// if err == nil && (group.Admin == true || group.Permissions[perm] == true) {
|
||||
|
||||
return true
|
||||
}
|
||||
//Check other groups
|
||||
for id := range u.Groups {
|
||||
err = group.Read("_id", id)
|
||||
if err == nil && (group.Admin || group.Permissions[perm]) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
// return true
|
||||
// }
|
||||
// //Check other groups
|
||||
// for id := range u.Groups {
|
||||
// err = group.Read("_id", id)
|
||||
// if err == nil && (group.Admin || group.Permissions[perm]) {
|
||||
// return true
|
||||
// }
|
||||
// }
|
||||
// return false
|
||||
// }
|
||||
|
Reference in New Issue
Block a user