(r opensca.TaskResult)
| 213 | } |
| 214 | |
| 215 | func taskReport(r opensca.TaskResult) format.Report { |
| 216 | |
| 217 | path := config.Conf().Path |
| 218 | optional := config.Conf().Optional |
| 219 | |
| 220 | absPath, _ := filepath.Abs(path) |
| 221 | appName := filepath.Base(absPath) |
| 222 | |
| 223 | logs.Info("prepare report") |
| 224 | |
| 225 | report := format.Report{} |
| 226 | report.TaskInfo.ToolVersion = version |
| 227 | report.TaskInfo.AppName = appName |
| 228 | report.TaskInfo.Size = r.Size |
| 229 | |
| 230 | if r.Error != nil { |
| 231 | report.TaskInfo.ErrorString = r.Error.Error() |
| 232 | } |
| 233 | |
| 234 | // 合并检测结果 |
| 235 | root := &model.DepGraph{} |
| 236 | if len(r.Deps) > 1 { |
| 237 | for _, dep := range r.Deps { |
| 238 | root.AppendChild(dep) |
| 239 | } |
| 240 | } else if len(r.Deps) == 1 { |
| 241 | root = r.Deps[0] |
| 242 | } |
| 243 | report.DepDetailGraph = detail.NewDepDetailGraph(root) |
| 244 | |
| 245 | // 组件去重 |
| 246 | if optional.Dedup { |
| 247 | logs.Info("remove dup component") |
| 248 | report.RemoveDedup() |
| 249 | } |
| 250 | |
| 251 | // 去掉dev组件 |
| 252 | if !optional.SaveDev { |
| 253 | logs.Info("remove dev component") |
| 254 | report.RemoveDev() |
| 255 | } |
| 256 | |
| 257 | // 查询组件详情(漏洞/许可证) |
| 258 | err := detail.SearchDetail(report.DepDetailGraph) |
| 259 | if err != nil { |
| 260 | logs.Warnf("database origin error: %s", err.Error()) |
| 261 | if report.TaskInfo.ErrorString != "" { |
| 262 | report.TaskInfo.ErrorString += "\n" |
| 263 | } |
| 264 | report.TaskInfo.ErrorString += err.Error() |
| 265 | } |
| 266 | |
| 267 | // 仅保留漏洞组件 |
| 268 | /*if optional.VulnOnly { |
| 269 | logs.Info("remove no-vuln component") |
| 270 | var deps []*detail.DepDetailGraph |
| 271 | report.ForEach(func(n *detail.DepDetailGraph) bool { |
| 272 | if len(n.Vulnerabilities) > 0 { |
no test coverage detected