Skip to content

Commit 20036eb

Browse files
committed
wip:TODO
1 parent ae55cf4 commit 20036eb

10 files changed

Lines changed: 1025 additions & 0 deletions

makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ build: prepare bin/lastore-agent bin/lastore-upgrade-query
3535
${GoPath} ${GOBUILD_CGO_FLAGS} ${GOBUILD} -o bin/lastore-smartmirror-daemon ${GOBUILD_OPTIONS} ${GOPKG_PREFIX}/src/lastore-smartmirror-daemon || echo "build failed, disable smartmirror support "
3636
${GoPath} ${GOBUILD_CGO_FLAGS} ${GOBUILD} -o bin/lastore-apt-clean ${GOBUILD_OPTIONS} ${GOPKG_PREFIX}/src/lastore-apt-clean
3737

38+
iup-tool:
39+
${GoPath} ${GOBUILD_CGO_FLAGS} ${GOBUILD} -o bin/iup-tool ${GOBUILD_OPTIONS} ${GOPKG_PREFIX}/src/local_cmd/iup-tool
40+
3841
fetch-base-metadata:
3942
./bin/lastore-tools update -r desktop -j applications -o var/lib/lastore/applications.json
4043
./bin/lastore-tools update -r desktop -j categories -o var/lib/lastore/categories.json
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"net/url"
9+
"os"
10+
"time"
11+
12+
"github.com/linuxdeepin/go-lib/log"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
var getCurrentPackagesCmd = &cobra.Command{
17+
Use: "get_current_packages",
18+
Short: "Get current package lists from update platform",
19+
Long: "Query the update platform for current version package lists",
20+
Run: runGetCurrentPackages,
21+
}
22+
23+
var currentPkgBaseline string
24+
25+
func init() {
26+
getCurrentPackagesCmd.Flags().StringVar(&currentPkgBaseline, "baseline", "", "Current baseline number (required)")
27+
_ = getCurrentPackagesCmd.MarkFlagRequired("baseline")
28+
rootCmd.AddCommand(getCurrentPackagesCmd)
29+
}
30+
31+
func runGetCurrentPackages(cmd *cobra.Command, args []string) {
32+
logger.SetLogLevel(log.LevelDebug)
33+
logger.Debug("Starting get_current_packages command")
34+
35+
if currentPkgBaseline == "" {
36+
logger.Warning("baseline is required")
37+
os.Exit(1)
38+
}
39+
40+
response, err := genCurrentPkgListsResponse(updatePlatform.requestUrl, updatePlatform.Token, currentPkgBaseline)
41+
if err != nil {
42+
logger.Warningf("genCurrentPkgListsResponse failed: %v", err)
43+
os.Exit(1)
44+
}
45+
46+
data, err := getResponseData(response, GetCurrentPkgLists)
47+
if err != nil {
48+
logger.Warningf("getResponseData failed: %v", err)
49+
os.Exit(1)
50+
}
51+
52+
pkgs := getCurrentPkgListsData(data)
53+
if pkgs == nil {
54+
logger.Warning("failed to parse current package list data")
55+
os.Exit(1)
56+
}
57+
58+
logger.Infof("Current Package Lists for baseline: %s", currentPkgBaseline)
59+
logger.Infof("PreCheck scripts: %d", len(pkgs.PreCheck))
60+
logger.Infof("MidCheck scripts: %d", len(pkgs.MidCheck))
61+
logger.Infof("PostCheck scripts: %d", len(pkgs.PostCheck))
62+
logger.Infof("Core packages: %d", len(pkgs.Packages.Core))
63+
logger.Infof("Select packages: %d", len(pkgs.Packages.Select))
64+
logger.Infof("Freeze packages: %d", len(pkgs.Packages.Freeze))
65+
logger.Infof("Purge packages: %d", len(pkgs.Packages.Purge))
66+
67+
logger.Debug("get_current_packages command finished")
68+
}
69+
70+
func genCurrentPkgListsResponse(requestUrl, token, baseline string) (*http.Response, error) {
71+
policyUrl := requestUrl + Urls[GetCurrentPkgLists].path
72+
client := &http.Client{
73+
Timeout: 40 * time.Second,
74+
}
75+
values := url.Values{}
76+
values.Add("baseline", baseline)
77+
policyUrl = policyUrl + "?" + values.Encode()
78+
request, err := http.NewRequest(Urls[GetCurrentPkgLists].method, policyUrl, nil)
79+
if err != nil {
80+
return nil, fmt.Errorf("%v new request failed: %v ", GetCurrentPkgLists.string(), err.Error())
81+
}
82+
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
83+
return client.Do(request)
84+
}
85+
86+
func getCurrentPkgListsData(data json.RawMessage) *PreInstalledPkgMeta {
87+
tmp := &PreInstalledPkgMeta{}
88+
err := json.Unmarshal(data, &tmp)
89+
if err != nil {
90+
logger.Warningf("%v failed to Unmarshal msg.Data to PreInstalledPkgMeta: %v ", GetCurrentPkgLists.string(), err.Error())
91+
return nil
92+
}
93+
return tmp
94+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"net/url"
9+
"os"
10+
"time"
11+
12+
"github.com/linuxdeepin/go-lib/log"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
var getCVEInfoCmd = &cobra.Command{
17+
Use: "get_cve_info",
18+
Short: "Get CVE vulnerability information from update platform",
19+
Long: "Query the update platform for CVE (Common Vulnerabilities and Exposures) information",
20+
Run: runGetCVEInfo,
21+
}
22+
23+
var cveSyncTime string
24+
25+
func init() {
26+
getCVEInfoCmd.Flags().StringVar(&cveSyncTime, "sync-time", "", "Sync time for CVE data (optional, format: 2006-01-02)")
27+
rootCmd.AddCommand(getCVEInfoCmd)
28+
}
29+
30+
func runGetCVEInfo(cmd *cobra.Command, args []string) {
31+
logger.SetLogLevel(log.LevelDebug)
32+
logger.Debug("Starting get_cve_info command")
33+
34+
response, err := genCVEInfoResponse(updatePlatform.requestUrl, updatePlatform.Token, cveSyncTime)
35+
if err != nil {
36+
logger.Warningf("genCVEInfoResponse failed: %v", err)
37+
os.Exit(1)
38+
}
39+
40+
data, err := getResponseData(response, GetPkgCVEs)
41+
if err != nil {
42+
logger.Warningf("getResponseData failed: %v", err)
43+
os.Exit(1)
44+
}
45+
46+
cveMeta := getCVEData(data)
47+
if cveMeta == nil {
48+
logger.Warning("failed to parse CVE data")
49+
os.Exit(1)
50+
}
51+
52+
logger.Infof("CVE Data Time: %s", cveMeta.DataTime)
53+
logger.Infof("Total CVEs: %d", len(cveMeta.CVEs))
54+
logger.Infof("Total Packages with CVEs: %d", len(cveMeta.PkgCVEs))
55+
56+
// 打印部分CVE信息
57+
count := 0
58+
for cveID, cveInfo := range cveMeta.CVEs {
59+
if count >= 10 {
60+
logger.Infof("... and %d more CVEs", len(cveMeta.CVEs)-10)
61+
break
62+
}
63+
logger.Infof("CVE %s: Severity=%s", cveID, cveInfo.Severity)
64+
logger.Debugf(" Description: %s", cveInfo.Description)
65+
count++
66+
}
67+
68+
logger.Debug("get_cve_info command finished")
69+
}
70+
71+
func genCVEInfoResponse(requestUrl, token, syncTime string) (*http.Response, error) {
72+
policyUrl := requestUrl + Urls[GetPkgCVEs].path
73+
client := &http.Client{
74+
Timeout: 40 * time.Second,
75+
}
76+
values := url.Values{}
77+
values.Add("synctime", syncTime)
78+
policyUrl = policyUrl + "?" + values.Encode()
79+
request, err := http.NewRequest(Urls[GetPkgCVEs].method, policyUrl, nil)
80+
if err != nil {
81+
return nil, fmt.Errorf("%v new request failed: %v ", GetPkgCVEs.string(), err.Error())
82+
}
83+
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
84+
return client.Do(request)
85+
}
86+
87+
func getCVEData(data json.RawMessage) *CVEMeta {
88+
tmp := &CVEMeta{}
89+
err := json.Unmarshal(data, &tmp)
90+
if err != nil {
91+
logger.Warningf("%v failed to Unmarshal msg.Data to CVEMeta: %v ", GetPkgCVEs.string(), err.Error())
92+
return nil
93+
}
94+
return tmp
95+
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"net/url"
9+
"os"
10+
"time"
11+
12+
"github.com/linuxdeepin/go-lib/log"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
var getTargetPackagesCmd = &cobra.Command{
17+
Use: "get_target_packages",
18+
Short: "Get target package lists from update platform",
19+
Long: "Query the update platform for target version package lists including core, select, freeze, and purge packages",
20+
Run: runGetTargetPackages,
21+
}
22+
23+
var targetPkgBaseline string
24+
25+
func init() {
26+
getTargetPackagesCmd.Flags().StringVar(&targetPkgBaseline, "baseline", "", "Target baseline number (required)")
27+
_ = getTargetPackagesCmd.MarkFlagRequired("baseline")
28+
rootCmd.AddCommand(getTargetPackagesCmd)
29+
}
30+
31+
func runGetTargetPackages(cmd *cobra.Command, args []string) {
32+
logger.SetLogLevel(log.LevelDebug)
33+
logger.Debug("Starting get_target_packages command")
34+
35+
if targetPkgBaseline == "" {
36+
logger.Warning("baseline is required")
37+
os.Exit(1)
38+
}
39+
40+
response, err := genTargetPkgListsResponse(updatePlatform.requestUrl, updatePlatform.Token, targetPkgBaseline)
41+
if err != nil {
42+
logger.Warningf("genTargetPkgListsResponse failed: %v", err)
43+
os.Exit(1)
44+
}
45+
46+
data, err := getResponseData(response, GetTargetPkgLists)
47+
if err != nil {
48+
logger.Warningf("getResponseData failed: %v", err)
49+
os.Exit(1)
50+
}
51+
52+
pkgs := getTargetPkgListData(data)
53+
if pkgs == nil {
54+
logger.Warning("failed to parse target package list data")
55+
os.Exit(1)
56+
}
57+
58+
logger.Infof("Target Package Lists for baseline: %s", targetPkgBaseline)
59+
logger.Infof("PreCheck scripts: %d", len(pkgs.PreCheck))
60+
logger.Infof("MidCheck scripts: %d", len(pkgs.MidCheck))
61+
logger.Infof("PostCheck scripts: %d", len(pkgs.PostCheck))
62+
logger.Infof("Core packages: %d", len(pkgs.Packages.Core))
63+
logger.Infof("Select packages: %d", len(pkgs.Packages.Select))
64+
logger.Infof("Freeze packages: %d", len(pkgs.Packages.Freeze))
65+
logger.Infof("Purge packages: %d", len(pkgs.Packages.Purge))
66+
67+
logger.Debug("get_target_packages command finished")
68+
}
69+
70+
func genTargetPkgListsResponse(requestUrl, token, baseline string) (*http.Response, error) {
71+
policyUrl := requestUrl + Urls[GetTargetPkgLists].path
72+
client := &http.Client{
73+
Timeout: 40 * time.Second,
74+
}
75+
values := url.Values{}
76+
values.Add("baseline", baseline)
77+
policyUrl = policyUrl + "?" + values.Encode()
78+
79+
request, err := http.NewRequest(Urls[GetTargetPkgLists].method, policyUrl, nil)
80+
if err != nil {
81+
return nil, fmt.Errorf("%v new request failed: %v ", GetTargetPkgLists.string(), err.Error())
82+
}
83+
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
84+
return client.Do(request)
85+
}
86+
87+
func getTargetPkgListData(data json.RawMessage) *PreInstalledPkgMeta {
88+
tmp := &PreInstalledPkgMeta{}
89+
err := json.Unmarshal(data, &tmp)
90+
if err != nil {
91+
logger.Warningf("%v failed to Unmarshal msg.Data to PreInstalledPkgMeta: %v ", GetTargetPkgLists.string(), err.Error())
92+
return nil
93+
}
94+
return tmp
95+
}
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package main
2+
3+
import (
4+
"encoding/base64"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"net/url"
9+
"os"
10+
"time"
11+
12+
"github.com/linuxdeepin/go-lib/log"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
var getUpdateLogCmd = &cobra.Command{
17+
Use: "get_update_log",
18+
Short: "Get system update logs from update platform",
19+
Long: "Query the update platform for system update logs based on baseline and unstable version",
20+
Run: runGetUpdateLog,
21+
}
22+
23+
var (
24+
updateLogBaseline string
25+
updateLogIsUnstable int
26+
)
27+
28+
func init() {
29+
getUpdateLogCmd.Flags().StringVar(&updateLogBaseline, "baseline", "", "Target baseline number (required)")
30+
getUpdateLogCmd.Flags().IntVar(&updateLogIsUnstable, "is-unstable", 1, "Is unstable version (1 for release, 2 for unstable)")
31+
_ = getUpdateLogCmd.MarkFlagRequired("baseline")
32+
rootCmd.AddCommand(getUpdateLogCmd)
33+
}
34+
35+
func runGetUpdateLog(cmd *cobra.Command, args []string) {
36+
logger.SetLogLevel(log.LevelDebug)
37+
logger.Debug("Starting get_update_log command")
38+
39+
if updateLogBaseline == "" {
40+
logger.Warning("baseline is required")
41+
os.Exit(1)
42+
}
43+
44+
response, err := genUpdateLogResponse(updatePlatform.requestUrl, updatePlatform.Token, updateLogBaseline, updateLogIsUnstable)
45+
if err != nil {
46+
logger.Warningf("genUpdateLogResponse failed: %v", err)
47+
os.Exit(1)
48+
}
49+
50+
data, err := getResponseData(response, GetUpdateLog)
51+
if err != nil {
52+
logger.Warningf("getResponseData failed: %v", err)
53+
os.Exit(1)
54+
}
55+
56+
logs := getUpdateLogData(data)
57+
if logs == nil {
58+
logger.Warning("failed to parse update log data")
59+
os.Exit(1)
60+
}
61+
62+
logger.Infof("Found %d update logs", len(logs))
63+
for i, log := range logs {
64+
logger.Infof("Log %d: Type=%s, Title=%s", i+1, log.Type, log.Title)
65+
logger.Debugf(" Content: %s", log.Content)
66+
}
67+
68+
logger.Debug("get_update_log command finished")
69+
}
70+
71+
func genUpdateLogResponse(requestUrl, token, baseline string, isUnstable int) (*http.Response, error) {
72+
policyUrl := requestUrl + Urls[GetUpdateLog].path
73+
client := &http.Client{
74+
Timeout: 40 * time.Second,
75+
}
76+
values := url.Values{}
77+
values.Add("baseline", baseline)
78+
values.Add("isUnstable", fmt.Sprintf("%d", isUnstable))
79+
policyUrl = policyUrl + "?" + values.Encode()
80+
request, err := http.NewRequest(Urls[GetUpdateLog].method, policyUrl, nil)
81+
if err != nil {
82+
return nil, fmt.Errorf("%v new request failed: %v ", GetUpdateLog.string(), err.Error())
83+
}
84+
request.Header.Set("X-Repo-Token", base64.RawStdEncoding.EncodeToString([]byte(token)))
85+
return client.Do(request)
86+
}
87+
88+
func getUpdateLogData(data json.RawMessage) []UpdateLogMeta {
89+
var tmp []UpdateLogMeta
90+
err := json.Unmarshal(data, &tmp)
91+
if err != nil {
92+
logger.Warningf("%v failed to Unmarshal msg.Data to UpdateLogMeta: %v ", GetUpdateLog.string(), err.Error())
93+
return nil
94+
}
95+
return tmp
96+
}

0 commit comments

Comments
 (0)