func NewWikiEngine(state pinterface.IUserState) *WikiEngine { pool := state.Pool() wikiState := new(WikiState) wikiState.pages = simpleredis.NewHashMap(pool, "pages") wikiState.pages.SelectDatabase(state.DatabaseIndex()) wikiState.pool = pool return &WikiEngine{state, wikiState} }
func NewTimeTableEngine(state pinterface.IUserState) *TimeTableEngine { pool := state.Pool() timeTableState := new(TimeTableState) timeTableState.plans = simpleredis.NewHashMap(pool, "plans") timeTableState.plans.SelectDatabase(state.DatabaseIndex()) timeTableState.pool = pool return &TimeTableEngine{state, timeTableState} }
// Create a new *UserState that can be used for managing users. // dbindex is the Redis database index (0 is a good default value). // If randomseed is true, the random number generator will be seeded after generating the cookie secret (true is a good default value). // redisHostPort is host:port for the desired Redis server (can be blank for localhost) // Also creates a new ConnectionPool. func NewUserState(dbindex int, randomseed bool, redisHostPort string) *UserState { var pool *simpleredis.ConnectionPool // Connnect to the default redis server if redisHostPort is empty if redisHostPort == "" { redisHostPort = defaultRedisServer } // Test connection if err := simpleredis.TestConnectionHost(redisHostPort); err != nil { log.Fatalln(err.Error()) } // Aquire connection pool pool = simpleredis.NewConnectionPoolHost(redisHostPort) state := new(UserState) state.users = simpleredis.NewHashMap(pool, "users") state.users.SelectDatabase(dbindex) state.usernames = simpleredis.NewSet(pool, "usernames") state.usernames.SelectDatabase(dbindex) state.unconfirmed = simpleredis.NewSet(pool, "unconfirmed") state.unconfirmed.SelectDatabase(dbindex) state.pool = pool state.dbindex = dbindex // For the secure cookies // This must happen before the random seeding, or // else people will have to log in again after every server restart state.cookieSecret = cookie.RandomCookieFriendlyString(30) // Seed the random number generator if randomseed { rand.Seed(time.Now().UnixNano()) } // Cookies lasts for 24 hours by default. Specified in seconds. state.cookieTime = cookie.DefaultCookieTime // Default password hashing algorithm is "bcrypt+", which is the same as // "bcrypt", but with backwards compatibility for checking sha256 hashes. state.passwordAlgorithm = "bcrypt+" // "bcrypt+", "bcrypt" or "sha256" if pool.Ping() != nil { defer pool.Close() log.Fatalf("Error, wrong hostname, port or password. (%s does not reply to PING)\n", redisHostPort) } return state }