Exemplo n.º 1
0
// 创建缓存文件并返回打开的文件指针
func CreateCacheFile(querypath string) *os.File {
	// 判断cache目录是否存在
	_, err := os.Stat("cache/")
	if os.IsNotExist(err) {
		os.Mkdir("cache", 0777)
	}

	// 创建对应的缓存文件
	f, err := os.Create("cache/" + tools.MD5(strings.ToLower(querypath)) + SUFFIX)
	if err != nil {
		panic("\n\n\nCreate cache file '" + "cache/" + tools.MD5(strings.ToLower(querypath)) + SUFFIX + "' fail\n\n\n")
	}

	return f
}
Exemplo n.º 2
0
// 检查登录用户是否合法
func (a AdminModel) CheckUser(username, passwd string) bool {
	// 创建一个操作数据库的对象
	m := NewModel()
	defer m.Close()

	// 获取用户集合
	users := m.session.DB(m.dbname).C("users")
	count, err := users.Count()
	if count == 0 || err != nil {
		return false
	}

	// 定义查询条件
	query := bson.M{
		"username": username,
		"passwd":   tools.MD5(passwd),
	}

	// 查询该用户
	count, err = users.Find(query).Count()
	if count == 0 || err != nil {
		// 用户不存在
		return false
	} else {
		return true
	}

}
Exemplo n.º 3
0
// 后台安全验证
func (a Admin) safe(res web.Resource) bool {
	// 获取用户名
	cookie, err := res.R.Cookie("username")
	if err != nil {
		return false
	}

	username := cookie.Value

	if username == "" {
		return false
	}
	// 判断是否登录
	cookie, err = res.R.Cookie("login")
	if err != nil {
		return false
	}

	login := cookie.Value

	if login == "" {
		return false
	}
	// 验证用户名和SECRET_KEY
	if login == tools.MD5(web.SECRET_KEY+username+web.SECRET_KEY) {
		return true
	} else {
		return false
	}
}
Exemplo n.º 4
0
// 判断页面缓存是否存在,如果页面缓存过期则也算不存在
func HasCache(querypath string) (bool, string) {
	// 先判断是否开启了调试模式
	// 如果开启了调试模式则,不缓存页面
	if DEBUG {
		return false, ""
	}
	// 下面是没有开启调试模式,则缓存存在
	// 直接打开缓存文件
	// TODO 该过程有待优化
	cacheFilePath := "cache/" + tools.MD5(strings.ToLower(querypath)) + SUFFIX
	// 读取文件信息
	fileinfo, err := os.Stat(cacheFilePath)
	if err == nil || os.IsExist(err) {
		// 当页面缓存存在时
		modtime := fileinfo.ModTime()
		fmt.Println("modtime", modtime)
		currtime := time.Now()
		fmt.Println("currtime", currtime)
		// 获取缓存文件距今创建多久了
		diff := currtime.Sub(modtime)
		fmt.Println("缓存已经创建了", int(diff/time.Second), "秒.....")
		// 当缓的创建时间距今已经超过设定的秒数,则缓存失效
		if int(diff/time.Second) > Conf.Int("cache", "lifetime") {
			// 解析模板时,会重新创建缓存文件
			return false, ""
		}
		// 这里返回缓存有效,并返回缓存页面的路径
		return true, cacheFilePath

	}

	// 缓存文件不存在
	return false, ""
}
Exemplo n.º 5
0
// 登录页面
func (a Admin) Login(res web.Resource) {
	if res.R.Method == "GET" {
		// 该页面需要单独显示,不需要嵌套在模板中
		// 临时关闭模板功能
		a.CloseLayout = true
		// 添加页面的随机数
		a.Render(res, nil)

		return
	}

	if res.R.Method == "POST" {
		res.R.ParseForm()
		username := res.R.Form["username"][0]
		password := res.R.Form["password"][0]

		// 创建一个Model对象
		m := model.NewAdminModel()
		// 获取一个时间对象
		now := time.Now()
		if m.CheckUser(username, password) {
			// 账户验证成功
			// 设置cookie
			http.SetCookie(res.W, &http.Cookie{
				Name:  "login",
				Value: tools.MD5(web.SECRET_KEY + username + web.SECRET_KEY),
				// cookie 5分钟过期
				Expires: now.Add(30 * time.Minute),
			})

			http.SetCookie(res.W, &http.Cookie{
				Name:  "username",
				Value: username,
				// cookie 5分钟过期
				Expires: now.Add(30 * time.Minute),
			})

			a.Redirect(res, "/Admin/Index")

		} else {
			a.Redirect(res, "/")
		}
	}

}