// @api post /admin/api/login 登录 // @apiGroup admin // // @apiRequest json // @apiParam password string 登录密码 // @apiExample json // { "password": "******" } // // @apiSuccess 201 // @apiHeader Cache-Control:no-cache // @apiHeader Pragma:no-cache // @apiParam token string 登录凭证; // @apiExample json // { "token": "adfwerqeqaeqe313aa" } func adminPostLogin(w http.ResponseWriter, r *http.Request) { inst := &struct { Password string `json:"password"` }{} if !util.ReadJSON(w, r, inst) { return } if app.Password(inst.Password) != opt.Password { util.RenderJSON(w, http.StatusUnauthorized, nil, nil) return } ret := make([]byte, 64) n, err := io.ReadFull(rand.Reader, ret) if err != nil { logs.Error("login:无法产生一个随机的token", err) util.RenderJSON(w, http.StatusInternalServerError, nil, nil) return } if n == 0 { logs.Error("login:无法产生一个随机的token") util.RenderJSON(w, http.StatusInternalServerError, nil, nil) return } token = utils.MD5(string(ret)) if len(token) == 0 { logs.Error("login:无法正确生成登录的token") util.RenderJSON(w, http.StatusInternalServerError, nil, nil) return } // 记录日志出错,仅输出错误内容,但不返回500错误。 if err = writeLastLogs(r); err != nil { logs.Error("login:"******"token": token}, nil) }
// 转换成gravatar头像 func avatarImage(email string) interface{} { url := "https://secure.gravatar.com/avatar/" + utils.MD5(strings.ToLower(email)) // TODO 将选项添加到options中 return url + "?s=96&d=mm&r=g" }