diff --git a/admin/package.json b/admin/package.json index 5514b20..bc856be 100644 --- a/admin/package.json +++ b/admin/package.json @@ -19,6 +19,7 @@ "@wangeditor/editor-for-vue": "^5.1.12", "axios": "^1.6.2", "consola": "^3.2.3", + "crypto-js": "^4.2.0", "css-color-function": "^1.3.3", "echarts": "^5.4.3", "element-plus": "^2.4.2", diff --git a/admin/src/components/verifition/Verify.vue b/admin/src/components/verifition/Verify.vue new file mode 100644 index 0000000..3f47041 --- /dev/null +++ b/admin/src/components/verifition/Verify.vue @@ -0,0 +1,440 @@ + + + diff --git a/admin/src/components/verifition/Verify/VerifyPoints.vue b/admin/src/components/verifition/Verify/VerifyPoints.vue new file mode 100644 index 0000000..384cb8b --- /dev/null +++ b/admin/src/components/verifition/Verify/VerifyPoints.vue @@ -0,0 +1,297 @@ + + diff --git a/admin/src/components/verifition/Verify/VerifySlide.vue b/admin/src/components/verifition/Verify/VerifySlide.vue new file mode 100644 index 0000000..ada54fb --- /dev/null +++ b/admin/src/components/verifition/Verify/VerifySlide.vue @@ -0,0 +1,453 @@ + + diff --git a/admin/src/components/verifition/api/index.js b/admin/src/components/verifition/api/index.js new file mode 100644 index 0000000..54afb7d --- /dev/null +++ b/admin/src/components/verifition/api/index.js @@ -0,0 +1,24 @@ +/** + * 此处可直接引用自己项目封装好的 axios 配合后端联调 + */ + +import request from './../utils/axios' //组件内部封装的axios +// import request from "@/api/axios.js" //调用项目封装的axios + +//获取验证图片 以及token +export function reqGet(data) { + return request({ + url: '/captcha/get', + method: 'post', + data + }) +} + +//滑动或者点选验证 +export function reqCheck(data) { + return request({ + url: '/captcha/check', + method: 'post', + data + }) +} diff --git a/admin/src/components/verifition/utils/ase.js b/admin/src/components/verifition/utils/ase.js new file mode 100644 index 0000000..764b964 --- /dev/null +++ b/admin/src/components/verifition/utils/ase.js @@ -0,0 +1,14 @@ +import CryptoJS from 'crypto-js' +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word, keyWord = 'XwKsGlMcdPMEhR1B') { + const key = CryptoJS.enc.Utf8.parse(keyWord) + const srcs = CryptoJS.enc.Utf8.parse(word) + const encrypted = CryptoJS.AES.encrypt(srcs, key, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7 + }) + return encrypted.toString() +} diff --git a/admin/src/components/verifition/utils/axios.js b/admin/src/components/verifition/utils/axios.js new file mode 100644 index 0000000..68c3551 --- /dev/null +++ b/admin/src/components/verifition/utils/axios.js @@ -0,0 +1,29 @@ +import axios from 'axios' + +axios.defaults.baseURL = '/api' + +const service = axios.create({ + timeout: 40000, + headers: { + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/json; charset=UTF-8' + } +}) +service.interceptors.request.use( + (config) => { + return config + }, + (error) => { + Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + (response) => { + const res = response.data + return res + }, + (error) => {} +) +export default service diff --git a/admin/src/components/verifition/utils/util.js b/admin/src/components/verifition/utils/util.js new file mode 100644 index 0000000..6d9976c --- /dev/null +++ b/admin/src/components/verifition/utils/util.js @@ -0,0 +1,102 @@ +export function resetSize(vm) { + let img_width, img_height, bar_width, bar_height //图片的宽度、高度,移动条的宽度、高度 + + const parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth + const parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight + if (vm.imgSize.width.indexOf('%') != -1) { + img_width = (parseInt(vm.imgSize.width) / 100) * parentWidth + 'px' + } else { + img_width = vm.imgSize.width + } + + if (vm.imgSize.height.indexOf('%') != -1) { + img_height = (parseInt(vm.imgSize.height) / 100) * parentHeight + 'px' + } else { + img_height = vm.imgSize.height + } + + if (vm.barSize.width.indexOf('%') != -1) { + bar_width = (parseInt(vm.barSize.width) / 100) * parentWidth + 'px' + } else { + bar_width = vm.barSize.width + } + + if (vm.barSize.height.indexOf('%') != -1) { + bar_height = (parseInt(vm.barSize.height) / 100) * parentHeight + 'px' + } else { + bar_height = vm.barSize.height + } + + return { + imgWidth: img_width, + imgHeight: img_height, + barWidth: bar_width, + barHeight: bar_height + } +} + +export const _code_chars = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 'a', + 'b', + 'c', + 'd', + 'e', + 'f', + 'g', + 'h', + 'i', + 'j', + 'k', + 'l', + 'm', + 'n', + 'o', + 'p', + 'q', + 'r', + 's', + 't', + 'u', + 'v', + 'w', + 'x', + 'y', + 'z', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H', + 'I', + 'J', + 'K', + 'L', + 'M', + 'N', + 'O', + 'P', + 'Q', + 'R', + 'S', + 'T', + 'U', + 'V', + 'W', + 'X', + 'Y', + 'Z' +] +export const _code_color1 = ['#fffff0', '#f0ffff', '#f0fff0', '#fff0f0'] +export const _code_color2 = ['#FF0033', '#006699', '#993366', '#FF9900', '#66CC66', '#FF33CC'] diff --git a/admin/src/config/index.ts b/admin/src/config/index.ts index 926d4ff..c1ea6f8 100644 --- a/admin/src/config/index.ts +++ b/admin/src/config/index.ts @@ -2,7 +2,8 @@ const config = { terminal: 1, //终端 title: '后台管理系统', //网站默认标题 version: '1.3.3', //版本号 - baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名 + // import.meta.env.VITE_APP_BASE_URL || + baseUrl: '', //请求接口域名 urlPrefix: 'api', //请求默认前缀 timeout: 60 * 1000 //请求超时时长 } diff --git a/admin/src/stores/modules/user.ts b/admin/src/stores/modules/user.ts index d5248d6..605cd81 100644 --- a/admin/src/stores/modules/user.ts +++ b/admin/src/stores/modules/user.ts @@ -34,16 +34,15 @@ const useUserStore = defineStore({ this.perms = [] }, login(playload: any) { - const { account, password } = playload return new Promise((resolve, reject) => { login({ - username: account, - password: password + ...playload }) .then((data) => { this.token = data.token cache.set(TOKEN_KEY, data.token) - resolve(data) + // resolve(data) + reject(data) }) .catch((error) => { reject(error) diff --git a/admin/src/views/account/login.vue b/admin/src/views/account/login.vue index 8f813be..636f250 100644 --- a/admin/src/views/account/login.vue +++ b/admin/src/views/account/login.vue @@ -10,12 +10,8 @@ >
{{ config.webName }}
- - + + @@ -38,9 +34,34 @@
- + 登录 + + + @@ -58,6 +79,23 @@ import cache from '@/utils/cache' import { ACCOUNT_KEY } from '@/enums/cacheEnums' import { PageEnum } from '@/enums/pageEnum' import { useLockFn } from '@/hooks/useLockFn' + +import Verify from '@/components/verifition/Verify.vue' + +const verify = ref(null) +const captchaType = ref('') +const onShowCaptcha = (type) => { + captchaType.value = type + verify.value.show() +} +let verifition = null +const handleSuccess = (res) => { + console.log(res) + console.log('sucess') + verifition = res + lockLogin(res) +} + const passwordRef = shallowRef() const formRef = shallowRef() const appStore = useAppStore() @@ -67,11 +105,11 @@ const router = useRouter() const remAccount = ref(false) const config = computed(() => appStore.config) const formData = reactive({ - account: '', + username: '', password: '' }) const rules = { - account: [ + username: [ { required: true, message: '请输入账号', @@ -86,22 +124,18 @@ const rules = { } ] } -// 回车按键监听 -const handleEnter = () => { - if (!formData.password) { - return passwordRef.value?.focus() - } - handleLogin() -} + // 登录处理 -const handleLogin = async () => { +const handleLogin = async (captchaInfo) => { + console.log('captchaInfo', captchaInfo, { ...formData, ...captchaInfo }) + await formRef.value?.validate() // 记住账号,缓存 cache.set(ACCOUNT_KEY, { remember: remAccount.value, - account: remAccount.value ? formData.account : '' + username: remAccount.value ? formData.username : '' }) - await userStore.login(formData) + await userStore.login({ ...formData, ...verifition }) const { query: { redirect } } = route @@ -114,7 +148,7 @@ onMounted(() => { const value = cache.get(ACCOUNT_KEY) if (value?.remember) { remAccount.value = value.remember - formData.account = value.account + formData.username = value.username } }) diff --git a/admin/src/views/permission/admin/index.vue b/admin/src/views/permission/admin/index.vue index 0b88014..53add4d 100644 --- a/admin/src/views/permission/admin/index.vue +++ b/admin/src/views/permission/admin/index.vue @@ -1,181 +1,164 @@ diff --git a/server/admin/captcha/captcha_ctl.go b/server/admin/captcha/captcha_ctl.go new file mode 100644 index 0000000..3fdcda9 --- /dev/null +++ b/server/admin/captcha/captcha_ctl.go @@ -0,0 +1,126 @@ +package captcha + +import ( + "image/color" + + config2 "github.com/TestsLing/aj-captcha-go/config" + constant "github.com/TestsLing/aj-captcha-go/const" + "github.com/TestsLing/aj-captcha-go/service" + "github.com/gin-gonic/gin" +) + +type CaptchaGetParams struct { + CaptchaType string `json:"captchaType"` +} + +// 客户端参数 看自身业务构建即可 +type ClientParams struct { + Token string `json:"token"` + PointJson string `json:"pointJson"` + CaptchaType string `json:"captchaType"` +} + +// **********************默认配置*************************************************** +// 默认配置,可以根据项目自行配置,将其他类型配置序列化上去 +// var config = config2.NewConfig() + +// *********************自定义配置************************************************** +// 水印配置(参数可从业务系统自定义) +var watermarkConfig = &config2.WatermarkConfig{ + FontSize: 12, + Color: color.RGBA{R: 255, G: 255, B: 255, A: 255}, + Text: "x_admin", +} + +// 点击文字配置(参数可从业务系统自定义) +var clickWordConfig = &config2.ClickWordConfig{ + FontSize: 25, + FontNum: 4, +} + +// 滑动模块配置(参数可从业务系统自定义) +var blockPuzzleConfig = &config2.BlockPuzzleConfig{Offset: 10} + +// 行为校验配置模块(具体参数可从业务系统配置文件自定义) +var captcha_config = config2.BuildConfig(constant.MemCacheKey, constant.DefaultResourceRoot, watermarkConfig, + clickWordConfig, blockPuzzleConfig, 2*60) + +// 服务工厂,主要用户注册 获取 缓存和验证服务 +var factory = service.NewCaptchaServiceFactory(captcha_config) + +func init() { + // 这里默认是注册了 内存缓存,但是不足以应对生产环境,希望自行注册缓存驱动 实现缓存接口即可替换(CacheType就是注册进去的 key) + factory.RegisterCache(constant.MemCacheKey, service.NewMemCacheService(200000)) // 这里20指的是缓存阈值 + + //注册使用默认redis数据库 + // factory.RegisterCache(constant.RedisCacheKey, service.NewDftRedisCacheService()) + // //注册自定义配置redis数据库 + // opt, err := redis.ParseURL(config.Config.RedisUrl) + // factory.RegisterCache(constant.RedisCacheKey, service.NewConfigRedisCacheService([]string{opt.Addr}, "", "", false, 0)) + + // 注册了两种验证码服务 可以自行实现更多的验证 + factory.RegisterService(constant.ClickWordCaptcha, service.NewClickWordCaptchaService(factory)) + factory.RegisterService(constant.BlockPuzzleCaptcha, service.NewBlockPuzzleCaptchaService(factory)) +} +func CaptchaRoute(rg *gin.RouterGroup) { + + rg = rg.Group("/captcha") + rg.POST("/get", func(c *gin.Context) { + var captchaGet CaptchaGetParams + if err := c.ShouldBind(&captchaGet); err != nil { + // 返回错误信息 + c.JSON(200, errorRes(err)) + return + } + + // 根据参数类型获取不同服务即可 + data, _ := factory.GetService(captchaGet.CaptchaType).Get() + //输出json结果给调用方 + c.JSON(200, successRes(data)) + }) + rg.POST("/check", func(c *gin.Context) { + var params ClientParams + if err := c.ShouldBind(¶ms); err != nil { + // 返回错误信息 + c.JSON(200, errorRes(err)) + return + } + ser := factory.GetService(params.CaptchaType) + err := ser.Check(params.Token, params.PointJson) + + if err != nil { + c.JSON(200, errorRes(err)) + return + } + //输出json结果给调用方 + c.JSON(200, successRes(nil)) + }) + +} + +// 登录等验证并删除 +func Verify(params ClientParams) error { + ser := factory.GetService(params.CaptchaType) + // 登录验证并删除 + err := ser.Verification(params.Token, params.PointJson) + return err +} +func successRes(data interface{}) map[string]interface{} { + ret := make(map[string]interface{}) + ret["error"] = false + ret["repCode"] = "0000" + ret["repData"] = data + ret["repMsg"] = nil + ret["successRes"] = true + + return ret +} +func errorRes(err error) map[string]interface{} { + ret := make(map[string]interface{}) + ret["error"] = true + ret["repCode"] = "0001" + ret["repData"] = nil + ret["repMsg"] = err.Error() + ret["successRes"] = false + return ret +} diff --git a/server/admin/entry.go b/server/admin/entry.go index a6688a5..78454e8 100644 --- a/server/admin/entry.go +++ b/server/admin/entry.go @@ -1,6 +1,7 @@ package admin import ( + "x_admin/admin/captcha" "x_admin/admin/common/album" "x_admin/admin/common/index" "x_admin/admin/common/upload" @@ -44,4 +45,6 @@ func RegisterGroup(rg *gin.RouterGroup) { system.RoleRoute(rg) log.LogRoute(rg) ArticleCollectRoute(rg) + + captcha.CaptchaRoute(rg) } diff --git a/server/admin/system/login/login.go b/server/admin/system/login/login.go index c71eb77..ba16add 100644 --- a/server/admin/system/login/login.go +++ b/server/admin/system/login/login.go @@ -1,6 +1,7 @@ package login import ( + "x_admin/admin/captcha" "x_admin/admin/system/admin" "x_admin/admin/system/role" "x_admin/core" @@ -31,6 +32,16 @@ type loginHandler struct { // login 登录系统 func (lh loginHandler) login(c *gin.Context) { + var params captcha.ClientParams + if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, ¶ms)) { + return + } + err := captcha.Verify(params) + if err != nil { + response.FailWithMsg(c, response.Failed, err.Error()) + return + } + var loginReq SystemLoginReq if response.IsFailWithResp(c, util.VerifyUtil.VerifyJSON(c, &loginReq)) { return diff --git a/server/go.mod b/server/go.mod index d3cd30f..8372210 100644 --- a/server/go.mod +++ b/server/go.mod @@ -18,6 +18,7 @@ require ( ) require ( + github.com/TestsLing/aj-captcha-go v0.0.0-20221117062708-1abcf4c62792 // indirect github.com/bytedance/sonic v1.10.2 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect @@ -31,8 +32,10 @@ require ( github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.16.0 // indirect + github.com/go-redis/redis/v8 v8.11.5 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/goccy/go-json v0.10.2 // indirect + github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -64,6 +67,7 @@ require ( golang.org/x/arch v0.6.0 // indirect golang.org/x/crypto v0.15.0 // indirect golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 // indirect + golang.org/x/image v0.14.0 // indirect golang.org/x/net v0.18.0 // indirect golang.org/x/sys v0.14.0 // indirect golang.org/x/text v0.14.0 // indirect diff --git a/server/go.sum b/server/go.sum index efdd1d4..4819550 100644 --- a/server/go.sum +++ b/server/go.sum @@ -38,11 +38,14 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/TestsLing/aj-captcha-go v0.0.0-20221117062708-1abcf4c62792 h1:JrIVYRSZCe3yQuOvKUbyAMI+PEw4DUfuoUQR/H+0Kcc= +github.com/TestsLing/aj-captcha-go v0.0.0-20221117062708-1abcf4c62792/go.mod h1:PZU6xNk8I+Z9NR5rZhlQzG/BkrBdA94ptoiNTle/8tI= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE= github.com/bytedance/sonic v1.10.2/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= @@ -76,6 +79,8 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= @@ -105,14 +110,19 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91 github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqRRkz6M78GuJAfGE= github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= +github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-redis/redis/v9 v9.0.0-rc.2 h1:IN1eI8AvJJeWHjMW/hlFAv2sAfvTun2DVksDDJ3a6a0= github.com/go-redis/redis/v9 v9.0.0-rc.2/go.mod h1:cgBknjwcBJa2prbnuHH/4k/Mlj4r0pWNV2HBanHujfY= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -139,6 +149,7 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -168,6 +179,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= @@ -182,6 +194,7 @@ github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iP github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= @@ -224,10 +237,19 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/onsi/gomega v1.24.1 h1:KORJXNNTzJXzu4ScJWssJfJMnJ+2QJqhoQSRwNlze9E= github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= @@ -335,6 +357,9 @@ golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mg golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20220617043117-41969df76e82/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= +golang.org/x/image v0.14.0 h1:tNgSxAFe3jC4uYqvZdTr84SZoM1KfwdC9SKIFrLjFn4= +golang.org/x/image v0.14.0/go.mod h1:HUYqC05R2ZcZ3ejNQsIHQDQiwWM4JBqmm6MKANTp4LE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -358,6 +383,7 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -378,6 +404,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -387,6 +414,7 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= @@ -410,6 +438,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -418,8 +447,11 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -440,6 +472,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -447,6 +480,7 @@ golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -512,6 +546,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -608,6 +643,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -616,12 +652,15 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/server/resources/defaultImages/jigsaw/original/1.png b/server/resources/defaultImages/jigsaw/original/1.png new file mode 100644 index 0000000..022aabf Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/1.png differ diff --git a/server/resources/defaultImages/jigsaw/original/2.png b/server/resources/defaultImages/jigsaw/original/2.png new file mode 100644 index 0000000..914908e Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/2.png differ diff --git a/server/resources/defaultImages/jigsaw/original/3.png b/server/resources/defaultImages/jigsaw/original/3.png new file mode 100644 index 0000000..f0f3ce5 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/3.png differ diff --git a/server/resources/defaultImages/jigsaw/original/4.png b/server/resources/defaultImages/jigsaw/original/4.png new file mode 100644 index 0000000..c5697f3 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/4.png differ diff --git a/server/resources/defaultImages/jigsaw/original/5.png b/server/resources/defaultImages/jigsaw/original/5.png new file mode 100644 index 0000000..e29e7a3 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/5.png differ diff --git a/server/resources/defaultImages/jigsaw/original/6.png b/server/resources/defaultImages/jigsaw/original/6.png new file mode 100644 index 0000000..2425f41 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/6.png differ diff --git a/server/resources/defaultImages/jigsaw/original/bg8.png b/server/resources/defaultImages/jigsaw/original/bg8.png new file mode 100644 index 0000000..5ea54d4 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/bg8.png differ diff --git a/server/resources/defaultImages/jigsaw/original/img.png b/server/resources/defaultImages/jigsaw/original/img.png new file mode 100644 index 0000000..b8fab34 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/original/img.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/1.png b/server/resources/defaultImages/jigsaw/slidingBlock/1.png new file mode 100644 index 0000000..1905026 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/1.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/2.png b/server/resources/defaultImages/jigsaw/slidingBlock/2.png new file mode 100644 index 0000000..b1482d4 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/2.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/3.png b/server/resources/defaultImages/jigsaw/slidingBlock/3.png new file mode 100644 index 0000000..cdbb0b1 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/3.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/4.png b/server/resources/defaultImages/jigsaw/slidingBlock/4.png new file mode 100644 index 0000000..bc69c96 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/4.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/5.png b/server/resources/defaultImages/jigsaw/slidingBlock/5.png new file mode 100644 index 0000000..0080a54 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/5.png differ diff --git a/server/resources/defaultImages/jigsaw/slidingBlock/6.png b/server/resources/defaultImages/jigsaw/slidingBlock/6.png new file mode 100644 index 0000000..b07c3b4 Binary files /dev/null and b/server/resources/defaultImages/jigsaw/slidingBlock/6.png differ diff --git a/server/resources/defaultImages/pic-click/1.png b/server/resources/defaultImages/pic-click/1.png new file mode 100644 index 0000000..50dfe28 Binary files /dev/null and b/server/resources/defaultImages/pic-click/1.png differ diff --git a/server/resources/defaultImages/pic-click/2.png b/server/resources/defaultImages/pic-click/2.png new file mode 100644 index 0000000..15b38ad Binary files /dev/null and b/server/resources/defaultImages/pic-click/2.png differ diff --git a/server/resources/defaultImages/pic-click/3.png b/server/resources/defaultImages/pic-click/3.png new file mode 100644 index 0000000..e2e487b Binary files /dev/null and b/server/resources/defaultImages/pic-click/3.png differ diff --git a/server/resources/defaultImages/pic-click/4.png b/server/resources/defaultImages/pic-click/4.png new file mode 100644 index 0000000..c34baa4 Binary files /dev/null and b/server/resources/defaultImages/pic-click/4.png differ diff --git a/server/resources/defaultImages/pic-click/5.png b/server/resources/defaultImages/pic-click/5.png new file mode 100644 index 0000000..0b3d11a Binary files /dev/null and b/server/resources/defaultImages/pic-click/5.png differ diff --git a/server/resources/defaultImages/pic-click/6.png b/server/resources/defaultImages/pic-click/6.png new file mode 100644 index 0000000..67797a1 Binary files /dev/null and b/server/resources/defaultImages/pic-click/6.png differ diff --git a/server/resources/defaultImages/pic-click/bg10.png b/server/resources/defaultImages/pic-click/bg10.png new file mode 100644 index 0000000..c99fbcb Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg10.png differ diff --git a/server/resources/defaultImages/pic-click/bg11.png b/server/resources/defaultImages/pic-click/bg11.png new file mode 100644 index 0000000..6a951d3 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg11.png differ diff --git a/server/resources/defaultImages/pic-click/bg12.png b/server/resources/defaultImages/pic-click/bg12.png new file mode 100644 index 0000000..a38ada5 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg12.png differ diff --git a/server/resources/defaultImages/pic-click/bg13.png b/server/resources/defaultImages/pic-click/bg13.png new file mode 100644 index 0000000..07af86a Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg13.png differ diff --git a/server/resources/defaultImages/pic-click/bg14.png b/server/resources/defaultImages/pic-click/bg14.png new file mode 100644 index 0000000..9559375 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg14.png differ diff --git a/server/resources/defaultImages/pic-click/bg15.png b/server/resources/defaultImages/pic-click/bg15.png new file mode 100644 index 0000000..cb1ebb6 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg15.png differ diff --git a/server/resources/defaultImages/pic-click/bg16.png b/server/resources/defaultImages/pic-click/bg16.png new file mode 100644 index 0000000..106b456 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg16.png differ diff --git a/server/resources/defaultImages/pic-click/bg17.png b/server/resources/defaultImages/pic-click/bg17.png new file mode 100644 index 0000000..bcdbe76 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg17.png differ diff --git a/server/resources/defaultImages/pic-click/bg18.png b/server/resources/defaultImages/pic-click/bg18.png new file mode 100644 index 0000000..ae94e09 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg18.png differ diff --git a/server/resources/defaultImages/pic-click/bg19.png b/server/resources/defaultImages/pic-click/bg19.png new file mode 100644 index 0000000..bef9318 Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg19.png differ diff --git a/server/resources/defaultImages/pic-click/bg20.png b/server/resources/defaultImages/pic-click/bg20.png new file mode 100644 index 0000000..36cfbde Binary files /dev/null and b/server/resources/defaultImages/pic-click/bg20.png differ diff --git a/server/resources/fonts/WenQuanZhengHei.ttf b/server/resources/fonts/WenQuanZhengHei.ttf new file mode 100644 index 0000000..f84e9fe Binary files /dev/null and b/server/resources/fonts/WenQuanZhengHei.ttf differ diff --git a/server/resources/fonts/license.txt b/server/resources/fonts/license.txt new file mode 100644 index 0000000..719f68f --- /dev/null +++ b/server/resources/fonts/license.txt @@ -0,0 +1,55 @@ +文泉驿是一个开源汉字字体项目 + +由旅美学者房骞骞(FangQ) + +于2004年10月创建 + +集中力量解决GNU/Linux + +高质量中文字体匮乏的状况 + +目前,文泉驿已经开发并发布了 + +第一个完整覆盖GB18030汉字 + +(包含27000多个汉字) + +的多规格点阵汉字字型文件 + +第一个覆盖GBK字符集的 + +开源矢量字型文件(文泉驿正黑) + +并提供了目前包含字符数目最多的 + +开源字体——GNU Unifont——中 + +绝大多数中日韩文相关的符号 + +这些字型文件已经逐渐成为 + +主流Linux/Unix发行版 + +中文桌面的首选中文字体 + +目前Ubuntu、Fedora、Slackware + +Magic Linux、CDLinux + +使用文泉驿作为默认中文字体 + +Debian、Gentoo、Mandriva + +ArchLinux、Frugalware + +则提供了官方源支持 + +而FreeBSD则在其ports中有提供 + +所以,今天我们所要分享的就是 + +文泉驿正黑体 + +可在Linux/UNIX,Windows + +Mac OS和嵌入式操作系统中使用 \ No newline at end of file