mirror of https://github.com/IoTcat/auxpi.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
465 lines
9.5 KiB
465 lines
9.5 KiB
package models |
|
|
|
import ( |
|
"github.com/auxpi/auxpiAll" |
|
"github.com/auxpi/bootstrap" |
|
) |
|
|
|
type Store struct { |
|
Model |
|
|
|
Name string `gorm:"size:32" json:"name"` |
|
Desc string `json:"desc"` |
|
Url string `json:"url"` |
|
Icon string `gorm:"size:32" json:"icon"` |
|
Color string `gorm:"size:32" json:"color"` |
|
Api string `gorm:"size:32" json:"api"` |
|
Router string `gorm:"size:32" json:"router"` |
|
//是否开启 |
|
Status bool `json:"status"` //是否开启此图床 |
|
Weight int `json:"weight"` // v2 分发使用 |
|
Rank int `json:"rank"` //首页排名使用 |
|
//是否需要登录才能使用 0->不需要 1->需要并且开放给所有登录用户 2->仅仅给管理员使用 |
|
Auth uint `json:"auth"` |
|
|
|
//包含多个 |
|
Images []Image |
|
} |
|
|
|
func GetStores() (stores []Store) { |
|
//缓存处理 |
|
if value, status := getCacheStores("all", false); status { |
|
return value |
|
} |
|
err := db.Model(&Store{}). |
|
Order("`rank` ASC"). |
|
Find(&stores). |
|
Error |
|
if err != nil { |
|
setCacheStores("all", &stores) |
|
} |
|
modelsError(auxpi.ErrorToString(err)) |
|
return |
|
} |
|
|
|
func GetActiveStore() (stores []Store) { |
|
if value, status := getCacheStores("active", false); status { |
|
return value |
|
} |
|
|
|
err := db.Model(&Store{}). |
|
Where("status=?", true). |
|
Order("`rank` ASC"). |
|
Find(&stores).Error |
|
if err != nil { |
|
setCacheStores("active", &stores) |
|
} |
|
modelsError(auxpi.ErrorToString(err)) |
|
return |
|
} |
|
|
|
func GetCloseStore() (stores []Store) { |
|
err := db.Model(&Store{}). |
|
Where("status=?", false). |
|
Order("`rank` DESC"). |
|
Find(&stores).Error |
|
modelsError(auxpi.ErrorToString(err)) |
|
return |
|
} |
|
|
|
func GetStoreInfoByRouter(router string) (store Store) { |
|
err := db.Model(&Store{}). |
|
Where("router=?", router). |
|
First(&store).Error |
|
modelsError(auxpi.ErrorToString(err)) |
|
return |
|
} |
|
|
|
func GetStoreInfoByApi(api string) (store Store) { |
|
err := db.Model(&Store{}). |
|
Where("api=?", api). |
|
First(&store).Error |
|
modelsError(auxpi.ErrorToString(err)) |
|
return |
|
} |
|
|
|
func DisableStores(receive auxpi.MenuReceive) bool { |
|
var l = len(receive.Disable) |
|
ids := make([]int, l) |
|
for k, v := range receive.Disable { |
|
ids[k] = v.ID |
|
} |
|
err := db.Model(&Store{}). |
|
Where("id IN (?)", ids).Update("status", false). |
|
Error |
|
if err != nil { |
|
//刷新缓存 |
|
deleteCacheAllStores() |
|
as := GetStores() |
|
ats := GetActiveStore() |
|
setCacheStores("active", &ats) |
|
setCacheStores("all", &as) |
|
} |
|
return modelsError(auxpi.ErrorToString(err)) |
|
} |
|
|
|
func EnableStores(receive auxpi.MenuReceive) bool { |
|
var l = len(receive.Enable) |
|
ids := make([]int, l) |
|
for k, v := range receive.Enable { |
|
ids[k] = v.ID |
|
} |
|
err := db.Model(&Store{}). |
|
Where("id IN (?)", ids).Update("status", true). |
|
Error |
|
if err != nil { |
|
//刷新缓存 |
|
deleteCacheAllStores() |
|
as := GetStores() |
|
ats := GetActiveStore() |
|
setCacheStores("active", &ats) |
|
setCacheStores("all", &as) |
|
} |
|
return modelsError(auxpi.ErrorToString(err)) |
|
} |
|
|
|
func RankStores(receive auxpi.MenuReceive) bool { |
|
for k, v := range receive.Enable { |
|
err := db.Model(&Store{}). |
|
Where("id=?", v.ID).Update("rank", k+1). |
|
Error |
|
if err != nil { |
|
return modelsError(auxpi.ErrorToString(err)) |
|
} |
|
modelsError(auxpi.ErrorToString(err)) |
|
} |
|
return true |
|
} |
|
|
|
func UpdateStore(store Store) bool { |
|
err := db.Save(&store).Error |
|
if err != nil { |
|
deleteCacheAllStores() |
|
as := GetStores() |
|
ats := GetActiveStore() |
|
setCacheStores("active", &ats) |
|
setCacheStores("all", &as) |
|
} |
|
return modelsError(auxpi.ErrorToString(err)) |
|
} |
|
|
|
//TODO: callback auto cache |
|
func getCacheStores(key string, single bool) ([]Store, bool) { |
|
//缓存 |
|
s := bootstrap.Cache.Get("store_" + key) |
|
list := []Store{} |
|
if s != nil { |
|
list, _ = s.([]Store) |
|
return list, true |
|
} |
|
return list, false |
|
} |
|
|
|
func setCacheStores(key string, value *[]Store) bool { |
|
err := bootstrap.Cache.Put("store_"+key, value, 3600) |
|
return modelsError(auxpi.ErrorToString(err)) |
|
} |
|
|
|
func deleteCacheAllStores() { |
|
bootstrap.Cache.Delete("store_all") |
|
bootstrap.Cache.Delete("store_active") |
|
} |
|
|
|
func MigrateStores() error { |
|
if db.HasTable(&Store{}) { |
|
err := db.DropTable(&Store{}).Error |
|
err = db.CreateTable(&Store{}).Error |
|
initStores() |
|
return err |
|
} else { |
|
err := db.CreateTable(&Store{}).Error |
|
initStores() |
|
return err |
|
} |
|
} |
|
|
|
//初始化储存方案 |
|
func initStores() { |
|
s := &Store{} |
|
s.Name = "搜狗图床" |
|
s.Icon = "sougou" |
|
s.Url = "http://pic.sogou.com/pic/upload_pic.jsp" |
|
s.Desc = "搜狗图床,有防盗链,会定期清除违规图片,建议仅作为备份" |
|
s.Color = "orange" |
|
s.Api = "sougou" |
|
s.Router = "SouGou" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 1 |
|
s.Weight = 16 |
|
db.Create(s) |
|
|
|
s.Name = "微博图床" |
|
s.ID = 2 |
|
s.Icon = "weibo" |
|
s.Url = "http://picupload.service.weibo.com/interface/pic_upload.php" + |
|
"?ori=1&mime=image%2Fjpeg&data=base64&url=0&markpos=1&logo=&nick=0&marks=1&app=miniblog" |
|
s.Desc = "新浪图床需要登录,对于违规图片有限制,但是不会清理图片" |
|
s.Color = "red" |
|
s.Api = "sina" |
|
s.Router = "Sina" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.Weight = 1 |
|
db.Create(s) |
|
|
|
s.Name = "SMMS 图床" |
|
s.Icon = "sm" |
|
s.Url = "https://sm.ms/api/upload" |
|
s.Desc = "SMMS 兽兽家的图床,速度很不错,相当稳定~" |
|
s.Color = "blue" |
|
s.Api = "smms" |
|
s.Router = "Smms" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 3 |
|
s.Weight = 2 |
|
db.Create(s) |
|
|
|
s.Name = "CC 图床" |
|
s.Icon = "cc" |
|
s.Url = "https://upload.cc/image_upload" |
|
s.Desc = "CC 图床,服务器在香港,速度还可以" |
|
s.Color = "green" |
|
s.Api = "cc" |
|
s.Router = "cc" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 4 |
|
s.Weight = 3 |
|
db.Create(s) |
|
|
|
s.Name = "Flickr 图床" |
|
s.Icon = "flickr" |
|
s.Url = "" |
|
s.Desc = "Flickr 图床是雅虎旗下的,图片可以在国内访问速度不错,但是 api 只能国外访问" |
|
s.Color = "pink darken-1" |
|
s.Api = "flickr" |
|
s.Router = "Flickr" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 5 |
|
s.Weight = 4 |
|
db.Create(s) |
|
|
|
//接替百度的位置 |
|
s.Name = "Imgur" |
|
s.Icon = "imgur" |
|
s.Url = "" |
|
s.Desc = "imgur 图床会永久储存,可以使用节点进行代理" |
|
s.Color = "purple" |
|
s.Api = "imgur" |
|
s.Router = "Imgur" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 6 |
|
s.Weight = 15 |
|
db.Create(s) |
|
|
|
//接替 360 的位置,360 会在以后加上 |
|
s.Name = "Prnt" |
|
s.Icon = "prnt" |
|
s.Url = "" |
|
s.Desc = "本地图床没有任何限制,但是会占用服务器的储存空间" |
|
s.Color = "black" |
|
s.Api = "prnt" |
|
s.Router = "Prnt" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 7 |
|
s.Weight = 14 |
|
db.Create(s) |
|
|
|
//s.Name = "360 图床" |
|
//s.Icon = "logo-" |
|
//s.Url = "" |
|
//s.Desc = "360 图床,已经绕过防盗链,会定期清理" |
|
//s.Color = "green" |
|
//s.Api = "Qihoo" |
|
//s.Router = "/360" |
|
//s.Status = true |
|
//s.Auth = 0 |
|
//s.ID = 7 |
|
//s.Weight = 999 |
|
//db.Create(s) |
|
|
|
s.Name = "网易图床" |
|
s.Icon = "wangyi" |
|
s.Url = "" |
|
s.Desc = "网易严选 CDN,暂无防盗链,目前发现不会清理" |
|
s.Color = "red" |
|
s.Api = "neteasy" |
|
s.Router = "NetEasy" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 8 |
|
s.Weight = 5 |
|
db.Create(s) |
|
|
|
s.Name = "京东 图床" |
|
s.Icon = "jingdong" |
|
s.Url = "" |
|
s.Desc = "京东图床,不允许上传过小的图片,其它正常" |
|
s.Color = "orange-800" |
|
s.Api = "jd" |
|
s.Router = "Jd" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 9 |
|
s.Weight = 6 |
|
db.Create(s) |
|
|
|
s.Name = "掘金 图床" |
|
s.Icon = "juejin" |
|
s.Url = "" |
|
s.Desc = "掘金图床,暂无防盗链,一切正常" |
|
s.Color = "blue" |
|
s.Api = "juejin" |
|
s.Router = "JueJin" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 10 |
|
s.Weight = 7 |
|
db.Create(s) |
|
|
|
s.Name = "阿里 图床" |
|
s.Icon = "ali" |
|
s.Url = "" |
|
s.Desc = "阿里图床,推荐使用" |
|
s.Color = "orange" |
|
s.Api = "ali" |
|
s.Router = "Ali" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 11 |
|
s.Weight = 8 |
|
db.Create(s) |
|
|
|
s.Name = "本地图床" |
|
s.Icon = "auxpi" |
|
s.Url = "" |
|
s.Desc = "本地图床没有任何限制,但是会占用服务器的储存空间" |
|
s.Color = "purple" |
|
s.Api = "local" |
|
s.Router = "Local" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 12 |
|
s.Weight = 9 |
|
db.Create(s) |
|
|
|
s.Name = "小米图床" |
|
s.Icon = "xiaomi" |
|
s.Url = "" |
|
s.Desc = "小米图床不是很稳定,返回的 json 会改变" |
|
s.Color = "orange" |
|
s.Api = "xiaomi" |
|
s.Router = "XiaoMi" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 14 |
|
s.Weight = 10 |
|
db.Create(s) |
|
|
|
s.Name = "苏宁图床" |
|
s.Icon = "suning" |
|
s.Url = "" |
|
s.Desc = "建议观察后使用" |
|
s.Color = "orange" |
|
s.Api = "suning" |
|
s.Router = "SuNing" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 13 |
|
s.Weight = 11 |
|
db.Create(s) |
|
|
|
s.Name = "Vim图床" |
|
s.Icon = "vim" |
|
s.Url = "" |
|
s.Desc = "国外图床,非常稳定,cf 的 CDN" |
|
s.Color = "green" |
|
s.Api = "vim" |
|
s.Router = "Vim" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 15 |
|
s.Weight = 12 |
|
db.Create(s) |
|
|
|
s.Name = "OOXX" |
|
s.Icon = "ooxx" |
|
s.Url = "" |
|
s.Desc = "国外图床,稳定性未知,cf 提供 CDN" |
|
s.Color = "red" |
|
s.Api = "ooxx" |
|
s.Router = "Local" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 16 |
|
s.Weight = 13 |
|
db.Create(s) |
|
|
|
s.Name = "搜狐" |
|
s.Icon = "souhu" |
|
s.Url = "" |
|
s.Desc = "搜狐畅言图床,目前看来还不错" |
|
s.Color = "orange" |
|
s.Api = "souhu" |
|
s.Router = "SouHu" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 17 |
|
s.Weight = 13 |
|
db.Create(s) |
|
|
|
s.Name = "Github" |
|
s.Icon = "github" |
|
s.Url = "" |
|
s.Desc = "github 的仓库为我们提供图床,可以当做根节点使用" |
|
s.Color = "black" |
|
s.Api = "github" |
|
s.Router = "Github" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 18 |
|
s.Weight = 13 |
|
db.Create(s) |
|
|
|
s.Name = "头条" |
|
s.Icon = "toutiao" |
|
s.Url = "" |
|
s.Desc = "头条 CDN,稳定性位置" |
|
s.Color = "red" |
|
s.Api = "toutiao" |
|
s.Router = "TouTiao" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 19 |
|
s.Weight = 13 |
|
db.Create(s) |
|
|
|
s.Name = "Gitee" |
|
s.Icon = "gitee" |
|
s.Url = "" |
|
s.Desc = "gitee 很稳定,希望大家不要滥用" |
|
s.Color = "red" |
|
s.Api = "gitee" |
|
s.Router = "Gitee" |
|
s.Status = true |
|
s.Auth = 0 |
|
s.ID = 20 |
|
s.Weight = 13 |
|
db.Create(s) |
|
|
|
}
|
|
|