From a652194213bcdc85f572c1715e0cd8bd8e9a545a Mon Sep 17 00:00:00 2001
From: qishu <1779009810@qq.com>
Date: Mon, 7 Aug 2023 17:02:33 +0800
Subject: [PATCH] Initial commit
---
.idea/.gitignore | 8 +++
.idea/cmdb-ops-flow.iml | 9 +++
.idea/modules.xml | 8 +++
conf/config.go | 42 ++++++++++++++
conf/config.ini | 15 +++++
go.mod | 40 +++++++++++++
go.sum | 121 ++++++++++++++++++++++++++++++++++++++++
main.go | 11 ++++
middleware/cors.go | 21 +++++++
models/cmdb.go | 14 +++++
models/model.go | 32 +++++++++++
router/router.go | 28 ++++++++++
utils/common/common.go | 78 ++++++++++++++++++++++++++
utils/result/result.go | 25 +++++++++
14 files changed, 452 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/cmdb-ops-flow.iml
create mode 100644 .idea/modules.xml
create mode 100644 conf/config.go
create mode 100644 conf/config.ini
create mode 100644 go.mod
create mode 100644 go.sum
create mode 100644 main.go
create mode 100644 middleware/cors.go
create mode 100644 models/cmdb.go
create mode 100644 models/model.go
create mode 100644 router/router.go
create mode 100644 utils/common/common.go
create mode 100644 utils/result/result.go
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..44c4694
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 数据源本地存储已忽略文件
+/../../../../../../../:\Users\w\go\src\cmdb-ops-flow\.idea/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/cmdb-ops-flow.iml b/.idea/cmdb-ops-flow.iml
new file mode 100644
index 0000000..5e764c4
--- /dev/null
+++ b/.idea/cmdb-ops-flow.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..9d2410f
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/conf/config.go b/conf/config.go
new file mode 100644
index 0000000..b9ed2cf
--- /dev/null
+++ b/conf/config.go
@@ -0,0 +1,42 @@
+package conf
+
+import (
+ "fmt"
+ "github.com/go-ini/ini"
+ "time"
+)
+
+var (
+ AppMode string
+ HttpPort string
+ ReadTimeout time.Duration
+ WriteTimeout time.Duration
+
+ DbHost string
+ DbPort string
+ DbUser string
+ DbPassWord string
+ DbName string
+)
+
+func init() {
+ file,err := ini.Load("conf/config.ini")
+ if err != nil {
+ fmt.Println("配置文件读取失败,请检查文件路径:",err)
+ }
+ LoadServer(file)
+ LoadData(file)
+}
+func LoadServer(file *ini.File) {
+ AppMode = file.Section("server").Key("AppMode").String()
+ HttpPort = file.Section("server").Key("HttpPort").String()
+ ReadTimeout = time.Duration(file.Section("server").Key("ReadTimeout").MustInt(60)) * time.Second
+ WriteTimeout = time.Duration(file.Section("server").Key("WriteTimeout").MustInt(60)) * time.Second
+}
+func LoadData(file *ini.File) {
+ DbHost = file.Section("database").Key("DbHost").String()
+ DbPort = file.Section("database").Key("DbPort").String()
+ DbUser = file.Section("database").Key("DbUser").String()
+ DbPassWord = file.Section("database").Key("DbPassWord").String()
+ DbName = file.Section("database").Key("DbName").String()
+}
diff --git a/conf/config.ini b/conf/config.ini
new file mode 100644
index 0000000..74c36ef
--- /dev/null
+++ b/conf/config.ini
@@ -0,0 +1,15 @@
+[server]
+# debug 开发模式,release 生产模式
+AppMode = debug
+HttpPort = :8000
+ReadTimeout: 60
+WriteTimeout: 60
+
+
+[database]
+Db = mysql
+DbHost = 192.168.2.81
+DbPort = 3306
+DbUser = root
+DbPassWord = 123456
+DbName = cmdb-ops-flow
\ No newline at end of file
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..aa1654f
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,40 @@
+module cmdb-ops-flow
+
+go 1.20
+
+require (
+ github.com/bwmarrin/snowflake v0.3.0
+ github.com/gin-gonic/gin v1.9.1
+ github.com/go-ini/ini v1.67.0
+ github.com/jinzhu/gorm v1.9.16
+)
+
+require (
+ github.com/bytedance/sonic v1.9.1 // indirect
+ github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
+ github.com/gabriel-vasile/mimetype v1.4.2 // indirect
+ github.com/gin-contrib/sse v0.1.0 // indirect
+ 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.14.0 // indirect
+ github.com/go-sql-driver/mysql v1.5.0 // indirect
+ github.com/goccy/go-json v0.10.2 // indirect
+ github.com/jinzhu/inflection v1.0.0 // indirect
+ github.com/json-iterator/go v1.1.12 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.4 // indirect
+ github.com/leodido/go-urn v1.2.4 // indirect
+ github.com/mattn/go-isatty v0.0.19 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+ github.com/stretchr/testify v1.8.4 // indirect
+ github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
+ github.com/ugorji/go/codec v1.2.11 // indirect
+ golang.org/x/arch v0.3.0 // indirect
+ golang.org/x/crypto v0.9.0 // indirect
+ golang.org/x/net v0.10.0 // indirect
+ golang.org/x/sys v0.8.0 // indirect
+ golang.org/x/text v0.9.0 // indirect
+ google.golang.org/protobuf v1.30.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..1c69977
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,121 @@
+github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
+github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
+github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
+github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
+github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
+github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
+github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
+github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
+github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6ROGeiHFAP8WJdI2RoxALQYgdllERc3N5N2DM=
+github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
+github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
+github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
+github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
+github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE=
+github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
+github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg=
+github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU=
+github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
+github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
+github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
+github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
+github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
+github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
+github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
+github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js=
+github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU=
+github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
+github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+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-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
+github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
+github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
+github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk=
+github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q=
+github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4=
+github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
+github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
+github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+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/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
+github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
+github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
+github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU=
+github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
+golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k=
+golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g=
+golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
+golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
+golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
+golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
+google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..33bf7d5
--- /dev/null
+++ b/main.go
@@ -0,0 +1,11 @@
+package main
+
+import (
+ "cmdb-ops-flow/models"
+ "cmdb-ops-flow/router"
+)
+
+func main() {
+ models.InitDb()
+ router.InitRouter()
+}
diff --git a/middleware/cors.go b/middleware/cors.go
new file mode 100644
index 0000000..230b180
--- /dev/null
+++ b/middleware/cors.go
@@ -0,0 +1,21 @@
+package middleware
+
+import (
+ "github.com/gin-gonic/gin"
+ "net/http"
+)
+
+func Cors() gin.HandlerFunc {
+ return func(context *gin.Context) {
+ method := context.Request.Method
+ context.Header("Access-Control-Allow-Origin", "*")
+ context.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,x-token,token")
+ context.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS")
+ context.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
+ context.Header("Access-Control-Allow-Credentials", "true")
+ if method == "OPTIONS" {
+ context.AbortWithStatus(http.StatusNoContent)
+ }
+ context.Next()
+ }
+}
diff --git a/models/cmdb.go b/models/cmdb.go
new file mode 100644
index 0000000..22a5ecd
--- /dev/null
+++ b/models/cmdb.go
@@ -0,0 +1,14 @@
+package models
+
+type Cmdb struct {
+ ID int `json:"id" db:"id" form:"id"`
+ Cmdbid int64 `gorm:"type:bigint;not null" json:"cmdbid" validate:"required"`
+ Cmdbname string `json:"cmdbname" db:"cmdbname" form:"cmdbname"`
+ PublicIP string `json:"public_ip" db:"public_ip" form:"public_ip"`
+ PrivateIP string `json:"private_ip" db:"private_ip" form:"private_ip"`
+ Username string `json:"username" db:"username" form:"username"`
+ Password string `json:"password" db:"password" form:"password"`
+ PrivateKey string `json:"private_key" db:"private_key" form:"private_key"`
+ SSHPort int `json:"ssh_port" db:"ssh_port" form:"ssh_port"`
+ Label string `json:"label" db:"label" form:"label"`
+}
\ No newline at end of file
diff --git a/models/model.go b/models/model.go
new file mode 100644
index 0000000..b24194b
--- /dev/null
+++ b/models/model.go
@@ -0,0 +1,32 @@
+package models
+
+import (
+ "cmdb-ops-flow/conf"
+ "fmt"
+ "github.com/jinzhu/gorm"
+ _ "github.com/jinzhu/gorm/dialects/mysql"
+ "time"
+)
+var db *gorm.DB
+var err error
+
+func InitDb() {
+ dns := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
+ conf.DbUser,
+ conf.DbPassWord,
+ conf.DbHost,
+ conf.DbPort,
+ conf.DbName,
+ )
+ db, err = gorm.Open("mysql", dns)
+ if err != nil {
+ fmt.Println("数据库连接失败", err)
+ }
+ db.SingularTable(true)
+ db.DB().SetMaxIdleConns(20) //设置连接池,空闲
+ db.DB().SetMaxOpenConns(100) //打开
+ db.DB().SetConnMaxLifetime(time.Second * 30)
+ db.AutoMigrate(Cmdb{},)
+ db.LogMode(true)
+
+}
\ No newline at end of file
diff --git a/router/router.go b/router/router.go
new file mode 100644
index 0000000..0f4a385
--- /dev/null
+++ b/router/router.go
@@ -0,0 +1,28 @@
+package router
+
+import (
+ "cmdb-ops-flow/conf"
+ "cmdb-ops-flow/middleware"
+ "net/http"
+ "github.com/gin-gonic/gin"
+
+)
+
+func InitRouter() {
+ gin.SetMode(conf.AppMode)
+ r := gin.Default()
+ //fmt.Println(utils.HttpPort)
+ r.Use(middleware.Cors())
+
+ s := &http.Server{
+ Addr: conf.HttpPort,
+ Handler: r,
+ ReadTimeout: conf.ReadTimeout,
+ WriteTimeout: conf.WriteTimeout,
+ MaxHeaderBytes: 1 << 20,
+ }
+ r.GET("/ping", func(c *gin.Context) {
+ c.String(http.StatusOK, "PONG")
+ })
+ s.ListenAndServe()
+}
\ No newline at end of file
diff --git a/utils/common/common.go b/utils/common/common.go
new file mode 100644
index 0000000..dcc9506
--- /dev/null
+++ b/utils/common/common.go
@@ -0,0 +1,78 @@
+package common
+import (
+ "crypto/aes"
+ "crypto/cipher"
+ "crypto/md5"
+ rand2 "crypto/rand"
+ "encoding/base64"
+ "fmt"
+ "github.com/bwmarrin/snowflake"
+ "io"
+ "math/rand"
+ "time"
+)
+
+func GenerateRandomUserID() int64 {
+ node, err := snowflake.NewNode(1) // 传入机器 ID
+ if err != nil {
+ // 错误处理
+ }
+
+ return node.Generate().Int64()
+}
+func GenerateRandomNumber() int64 {
+ // 设置随机种子,保证每次生成的随机数都不同
+ rand.Seed(time.Now().UnixNano())
+
+ // 生成10位随机整数,范围在0到9999999999之间
+ return int64(rand.Intn(10000000000))
+}
+
+func FixMd5(str string) string {
+ data := []byte(str)
+ has := md5.Sum(data)
+ md5str := fmt.Sprintf("%x", has)
+ return md5str
+}
+
+func Encrypt(key []byte, plaintext string) (string, error) {
+ block, err := aes.NewCipher(key)
+ if err != nil {
+ return "", err
+ }
+
+ ciphertext := make([]byte, aes.BlockSize+len(plaintext))
+ iv := ciphertext[:aes.BlockSize]
+ if _, err := io.ReadFull(rand2.Reader, iv); err != nil {
+ return "", err
+ }
+
+ stream := cipher.NewCFBEncrypter(block, iv)
+ stream.XORKeyStream(ciphertext[aes.BlockSize:], []byte(plaintext))
+
+ return base64.StdEncoding.EncodeToString(ciphertext), nil
+}
+
+func Decrypt(key []byte, ciphertext string) (string, error) {
+ block, err := aes.NewCipher(key)
+ if err != nil {
+ return "", err
+ }
+
+ decodedCipherText, err := base64.StdEncoding.DecodeString(ciphertext)
+ if err != nil {
+ return "", err
+ }
+
+ if len(decodedCipherText) < aes.BlockSize {
+ return "", fmt.Errorf("加密数据长度错误")
+ }
+
+ iv := decodedCipherText[:aes.BlockSize]
+ decodedCipherText = decodedCipherText[aes.BlockSize:]
+
+ stream := cipher.NewCFBDecrypter(block, iv)
+ stream.XORKeyStream(decodedCipherText, decodedCipherText)
+
+ return string(decodedCipherText), nil
+}
\ No newline at end of file
diff --git a/utils/result/result.go b/utils/result/result.go
new file mode 100644
index 0000000..39735d2
--- /dev/null
+++ b/utils/result/result.go
@@ -0,0 +1,25 @@
+package result
+
+type Result struct {
+ Code int `json:"code"`
+ Success bool `json:"success"`
+ Data interface{} `json:"data"`
+ Msg string `json:"msg"`
+}
+
+func (result *Result) Ok(code int, data interface{}, msg string) *Result {
+ result.Code = code
+ result.Success = true
+ result.Data = data
+ result.Msg = msg
+ return result
+}
+
+func (result *Result) Error(code int, data interface{}, msg string) *Result {
+ result.Code = code
+ result.Success = false
+ result.Data = data
+ result.Msg = msg
+ return result
+}
+