diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..ae70bac --- /dev/null +++ b/.env.example @@ -0,0 +1,57 @@ +# 应用配置 +RUN_MODE=development +DEBUG_HTTP_DUMP=false + +# 数据库配置 +DB_HOST=127.0.0.1 +DB_PORT=5432 +DB_NAME=app +DB_USERNAME=dev +DB_PASSWORD=dev + +# redis 配置 +REDIS_HOST=127.0.0.1 +REDIS_PORT=6379 + +# otel 配置 +OTEL_HOST=127.0.0.1 +OTEL_PORT=4317 + +# 白银节点 +BAIYIN_CLOUD_URL= +BAIYIN_TOKEN_URL= + +# 京东实名 +IDEN_ACCESS_KEY= +IDEN_SECRET_KEY= +IDEN_CALLBACK_URL= + +# 支付宝(暂时弃用,但是需要配置) +ALIPAY_APP_ID= +ALIPAY_APP_PRIVATE_KEY= +ALIPAY_PUBLIC_KEY= +ALIPAY_API_CERT= + +# 微信支付(暂时弃用,但是需要配置) +WECHATPAY_APP_ID= +WECHATPAY_MCH_ID= +WECHATPAY_MCH_PRIVATE_KEY_SERIAL= +WECHATPAY_MCH_PRIVATE_KEY= +WECHATPAY_PUBLIC_KEY_ID= +WECHATPAY_PUBLIC_KEY= +WECHATPAY_API_CERT= +WECHATPAY_CALLBACK_URL= + +# 阿里云 +ALIYUN_ACCESS_KEY= +ALIYUN_ACCESS_KEY_SECRET= +ALIYUN_SMS_SIGNATURE= +ALIYUN_SMS_TEMPLATE_LOGIN= + +# 商福通 +SFTPAY_ENABLE= +SFTPAY_APP_ID= +SFTPAY_ROUTE_ID= +SFTPAY_APP_PRIVATE_KEY= +SFTPAY_PUBLIC_KEY= +SFTPAY_RETURN_URL= diff --git a/pkg/env/env.go b/pkg/env/env.go index 6d732e8..83af1dd 100644 --- a/pkg/env/env.go +++ b/pkg/env/env.go @@ -24,7 +24,6 @@ var ( SessionAccessExpire = 60 * 60 * 2 // 访问令牌过期时间,单位秒。默认 2 小时 SessionRefreshExpire = 60 * 60 * 24 * 7 // 刷新令牌过期时间,单位秒。默认 7 天 DebugHttpDump = false // 是否打印请求和响应的原始数据 - DebugExternalChange = true // 是否实际执行外部非幂等接口调用,在开发调试时可以关闭,避免对外部数据产生影响 DbHost = "localhost" DbPort = "5432" @@ -106,7 +105,6 @@ func Init() { errs = append(errs, parse(&SessionAccessExpire, "SESSION_ACCESS_EXPIRE", true, nil)) errs = append(errs, parse(&SessionRefreshExpire, "SESSION_REFRESH_EXPIRE", true, nil)) errs = append(errs, parse(&DebugHttpDump, "DEBUG_HTTP_DUMP", true, nil)) - errs = append(errs, parse(&DebugExternalChange, "DEBUG_EXTERNAL_CHANGE", true, nil)) errs = append(errs, parse(&DbHost, "DB_HOST", true, nil)) errs = append(errs, parse(&DbPort, "DB_PORT", true, nil)) diff --git a/scripts/sql/fill.sql b/scripts/sql/fill.sql index b5e3ac1..7601223 100644 --- a/scripts/sql/fill.sql +++ b/scripts/sql/fill.sql @@ -1,10 +1,20 @@ -- ==================== --- region 填充数据 +-- region 客户端 -- ==================== insert into client (type, spec, name, client_id, client_secret, redirect_uri) values (1, 3, 'web', 'web', '$2a$10$Ss12mXQgpYyo1CKIZ3URouDm.Lc2KcYJzsvEK2PTIXlv6fHQht45a', ''); insert into client (type, spec, name, client_id, client_secret, redirect_uri) values (1, 3, 'admin', 'admin', '$2a$10$dlfvX5Uf3iVsUWgwlb0Wt.oYsw/OEXgS.Aior3yoT63Ju7ZSsJr/2', ''); +-- ==================== +-- region 管理员 +-- ==================== + +insert into admin (username, password, name, lock) values ('admin', '', '超级管理员', true); + +-- ==================== +-- region 产品 +-- ==================== + insert into product (code, name, description) values ('short', '短效动态', '短效动态'); insert into product (code, name, description) values ('long', '长效动态', '长效动态'); insert into product (code, name, description) values ('static', '长效静态', '长效静态'); @@ -19,20 +29,20 @@ delete from permission where true; -- level 1 -- -------------------------- insert into permission (name, description, sort) values - ('permission', '权限', 1), - ('admin_role', '管理员角色', 2), - ('admin', '管理员', 3), - ('product', '产品', 4), - ('product_sku', '产品套餐', 5), - ('discount', '折扣', 6), - ('resource', '用户套餐', 7), - ('user', '用户', 8), - ('coupon', '优惠券', 9), - ('batch', '批次', 10), - ('channel', 'IP', 11), - ('trade', '交易', 12), - ('bill', '账单', 13), - ('balance_activity', '余额变动', 14); + ('permission', '权限', 1), + ('admin_role', '管理员角色', 2), + ('admin', '管理员', 3), + ('product', '产品', 4), + ('product_sku', '产品套餐', 5), + ('discount', '折扣', 6), + ('resource', '用户套餐', 7), + ('user', '用户', 8), + ('coupon', '优惠券', 9), + ('batch', '批次', 10), + ('channel', 'IP', 11), + ('trade', '交易', 12), + ('bill', '账单', 13), + ('balance_activity', '余额变动', 14); -- -------------------------- -- level 2 @@ -40,74 +50,74 @@ insert into permission (name, description, sort) values -- permission 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'permission' and deleted_at is null), 'permission:read', '读取权限列表', 1), - ((select id from permission where name = 'permission' and deleted_at is null), 'permission:write', '写入权限', 2); + ((select id from permission where name = 'permission' and deleted_at is null), 'permission:read', '读取权限列表', 1), + ((select id from permission where name = 'permission' and deleted_at is null), 'permission:write', '写入权限', 2); -- admin_role 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'admin_role' and deleted_at is null), 'admin_role:read', '读取管理员角色列表', 1), - ((select id from permission where name = 'admin_role' and deleted_at is null), 'admin_role:write', '写入管理员角色', 2); + ((select id from permission where name = 'admin_role' and deleted_at is null), 'admin_role:read', '读取管理员角色列表', 1), + ((select id from permission where name = 'admin_role' and deleted_at is null), 'admin_role:write', '写入管理员角色', 2); -- admin 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'admin' and deleted_at is null), 'admin:read', '读取管理员列表', 1), - ((select id from permission where name = 'admin' and deleted_at is null), 'admin:write', '写入管理员', 2); + ((select id from permission where name = 'admin' and deleted_at is null), 'admin:read', '读取管理员列表', 1), + ((select id from permission where name = 'admin' and deleted_at is null), 'admin:write', '写入管理员', 2); -- product 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'product' and deleted_at is null), 'product:read', '读取产品列表', 1), - ((select id from permission where name = 'product' and deleted_at is null), 'product:write', '写入产品', 2); + ((select id from permission where name = 'product' and deleted_at is null), 'product:read', '读取产品列表', 1), + ((select id from permission where name = 'product' and deleted_at is null), 'product:write', '写入产品', 2); -- product_sku 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'product_sku' and deleted_at is null), 'product_sku:read', '读取产品套餐列表', 1), - ((select id from permission where name = 'product_sku' and deleted_at is null), 'product_sku:write', '写入产品套餐', 2); + ((select id from permission where name = 'product_sku' and deleted_at is null), 'product_sku:read', '读取产品套餐列表', 1), + ((select id from permission where name = 'product_sku' and deleted_at is null), 'product_sku:write', '写入产品套餐', 2); -- discount 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'discount' and deleted_at is null), 'discount:read', '读取折扣列表', 1), - ((select id from permission where name = 'discount' and deleted_at is null), 'discount:write', '写入折扣', 2); + ((select id from permission where name = 'discount' and deleted_at is null), 'discount:read', '读取折扣列表', 1), + ((select id from permission where name = 'discount' and deleted_at is null), 'discount:write', '写入折扣', 2); -- resource 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'resource' and deleted_at is null), 'resource:read', '读取用户套餐列表', 1), - ((select id from permission where name = 'resource' and deleted_at is null), 'resource:write', '写入用户套餐', 2), - ((select id from permission where name = 'resource' and deleted_at is null), 'resource:short', '短效动态套餐', 3), - ((select id from permission where name = 'resource' and deleted_at is null), 'resource:long', '长效动态套餐', 4); + ((select id from permission where name = 'resource' and deleted_at is null), 'resource:read', '读取用户套餐列表', 1), + ((select id from permission where name = 'resource' and deleted_at is null), 'resource:write', '写入用户套餐', 2), + ((select id from permission where name = 'resource' and deleted_at is null), 'resource:short', '短效动态套餐', 3), + ((select id from permission where name = 'resource' and deleted_at is null), 'resource:long', '长效动态套餐', 4); -- user 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'user' and deleted_at is null), 'user:read', '读取用户列表', 1), - ((select id from permission where name = 'user' and deleted_at is null), 'user:write', '写入用户', 2); + ((select id from permission where name = 'user' and deleted_at is null), 'user:read', '读取用户列表', 1), + ((select id from permission where name = 'user' and deleted_at is null), 'user:write', '写入用户', 2); -- coupon 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'coupon' and deleted_at is null), 'coupon:read', '读取优惠券列表', 1), - ((select id from permission where name = 'coupon' and deleted_at is null), 'coupon:write', '写入优惠券', 2); + ((select id from permission where name = 'coupon' and deleted_at is null), 'coupon:read', '读取优惠券列表', 1), + ((select id from permission where name = 'coupon' and deleted_at is null), 'coupon:write', '写入优惠券', 2); -- batch 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'batch' and deleted_at is null), 'batch:read', '读取批次列表', 1), - ((select id from permission where name = 'batch' and deleted_at is null), 'batch:write', '写入批次', 2); + ((select id from permission where name = 'batch' and deleted_at is null), 'batch:read', '读取批次列表', 1), + ((select id from permission where name = 'batch' and deleted_at is null), 'batch:write', '写入批次', 2); -- channel 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'channel' and deleted_at is null), 'channel:read', '读取 IP 列表', 1), - ((select id from permission where name = 'channel' and deleted_at is null), 'channel:write', '写入 IP', 2); + ((select id from permission where name = 'channel' and deleted_at is null), 'channel:read', '读取 IP 列表', 1), + ((select id from permission where name = 'channel' and deleted_at is null), 'channel:write', '写入 IP', 2); -- trade 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'trade' and deleted_at is null), 'trade:read', '读取交易列表', 1), - ((select id from permission where name = 'trade' and deleted_at is null), 'trade:write', '写入交易', 2); + ((select id from permission where name = 'trade' and deleted_at is null), 'trade:read', '读取交易列表', 1), + ((select id from permission where name = 'trade' and deleted_at is null), 'trade:write', '写入交易', 2); -- bill 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'bill' and deleted_at is null), 'bill:read', '读取账单列表', 1), - ((select id from permission where name = 'bill' and deleted_at is null), 'bill:write', '写入账单', 2); + ((select id from permission where name = 'bill' and deleted_at is null), 'bill:read', '读取账单列表', 1), + ((select id from permission where name = 'bill' and deleted_at is null), 'bill:write', '写入账单', 2); -- balance_activity 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'balance_activity' and deleted_at is null), 'balance_activity:read', '读取余额变动列表', 1); + ((select id from permission where name = 'balance_activity' and deleted_at is null), 'balance_activity:read', '读取余额变动列表', 1); -- -------------------------- -- level 3 @@ -115,41 +125,41 @@ insert into permission (parent_id, name, description, sort) values -- product_sku:write 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'product_sku:write' and deleted_at is null), 'product_sku:write:status', '更改产品套餐状态', 1); + ((select id from permission where name = 'product_sku:write' and deleted_at is null), 'product_sku:write:status', '更改产品套餐状态', 1); -- resource:short 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'resource:short' and deleted_at is null), 'resource:short:read', '读取用户短效动态套餐列表', 1); + ((select id from permission where name = 'resource:short' and deleted_at is null), 'resource:short:read', '读取用户短效动态套餐列表', 1); -- resource:long 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'resource:long' and deleted_at is null), 'resource:long:read', '读取用户长效动态套餐列表', 1); + ((select id from permission where name = 'resource:long' and deleted_at is null), 'resource:long:read', '读取用户长效动态套餐列表', 1); -- user:read 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'user:read' and deleted_at is null), 'user:read:one', '读取单个用户', 1), - ((select id from permission where name = 'user:read' and deleted_at is null), 'user:read:not_bind', '读取未绑定管理员的用户列表', 2); + ((select id from permission where name = 'user:read' and deleted_at is null), 'user:read:one', '读取单个用户', 1), + ((select id from permission where name = 'user:read' and deleted_at is null), 'user:read:not_bind', '读取未绑定管理员的用户列表', 2); -- user:write 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'user:write' and deleted_at is null), 'user:write:balance', '写入用户余额', 1), - ((select id from permission where name = 'user:write' and deleted_at is null), 'user:write:bind', '用户认领', 2); + ((select id from permission where name = 'user:write' and deleted_at is null), 'user:write:balance', '写入用户余额', 1), + ((select id from permission where name = 'user:write' and deleted_at is null), 'user:write:bind', '用户认领', 2); -- batch:read 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'batch:read' and deleted_at is null), 'batch:read:of_user', '读取指定用户的批次列表', 1); + ((select id from permission where name = 'batch:read' and deleted_at is null), 'batch:read:of_user', '读取指定用户的批次列表', 1); -- channel:read 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'channel:read' and deleted_at is null), 'channel:read:of_user', '读取指定用户的 IP 列表', 1); + ((select id from permission where name = 'channel:read' and deleted_at is null), 'channel:read:of_user', '读取指定用户的 IP 列表', 1); -- trade:read 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'trade:read' and deleted_at is null), 'trade:read:of_user', '读取指定用户的交易列表', 1); + ((select id from permission where name = 'trade:read' and deleted_at is null), 'trade:read:of_user', '读取指定用户的交易列表', 1); -- bill:read 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'bill:read' and deleted_at is null), 'bill:read:of_user', '读取指定用户的账单列表', 1); + ((select id from permission where name = 'bill:read' and deleted_at is null), 'bill:read:of_user', '读取指定用户的账单列表', 1); -- balance_activity:read 子权限 insert into permission (parent_id, name, description, sort) values @@ -161,8 +171,8 @@ insert into permission (parent_id, name, description, sort) values -- user:write:balance 子权限 insert into permission (parent_id, name, description, sort) values - ((select id from permission where name = 'user:write:balance' and deleted_at is null), 'user:write:balance:inc', '增加用户余额', 1), - ((select id from permission where name = 'user:write:balance' and deleted_at is null), 'user:write:balance:dec', '减少用户余额', 2); + ((select id from permission where name = 'user:write:balance' and deleted_at is null), 'user:write:balance:inc', '增加用户余额', 1), + ((select id from permission where name = 'user:write:balance' and deleted_at is null), 'user:write:balance:dec', '减少用户余额', 2); -- resource:short:read 子权限 insert into permission (parent_id, name, description, sort) values diff --git a/web/services/channel_baiyin.go b/web/services/channel_baiyin.go index 36f04be..f21a280 100644 --- a/web/services/channel_baiyin.go +++ b/web/services/channel_baiyin.go @@ -229,7 +229,7 @@ func (s *channelBaiyinProvider) CreateChannels(source netip.Addr, resourceId int // 提交配置 secret := strings.Split(u.Z(proxy.Secret), ":") gateway := g.NewGateway(proxy.IP.String(), secret[0], secret[1]) - if env.DebugExternalChange { + if env.RunMode == env.RunModeProd { // 连接节点到网关 err = g.Cloud.CloudConnect(&g.CloudConnectReq{ @@ -292,7 +292,8 @@ func (s *channelBaiyinProvider) RemoveChannels(batch string) error { } // 提交配置 - if env.DebugExternalChange { + if env.RunMode == env.RunModeProd { + // 断开节点连接 g.Cloud.CloudDisconnect(&g.CloudDisconnectReq{ Uuid: proxy.Mac, diff --git a/web/services/verifier.go b/web/services/verifier.go index 19b00e6..840bba2 100644 --- a/web/services/verifier.go +++ b/web/services/verifier.go @@ -55,7 +55,7 @@ func (s *verifierService) SendSms(ctx context.Context, phone string, purpose Ver code := rand.Intn(900000) + 100000 // 6-digit code between 100000-999999 // 发送短信验证码 - if env.DebugExternalChange { + if env.RunMode == env.RunModeProd { params, err := json.Marshal(map[string]string{ "code": strconv.Itoa(code), })