@@ -160,6 +160,16 @@ func (r *RDBDriver) MigrateDB() error {
160
160
& models.NvdReference {},
161
161
& models.NvdCert {},
162
162
163
+ & models.Vulncheck {},
164
+ & models.VulncheckDescription {},
165
+ & models.VulncheckCvss2Extra {},
166
+ & models.VulncheckCvss3 {},
167
+ & models.VulncheckCvss40 {},
168
+ & models.VulncheckCwe {},
169
+ & models.VulncheckCpe {},
170
+ & models.VulncheckReference {},
171
+ & models.VulncheckCert {},
172
+
163
173
& models.Jvn {},
164
174
& models.JvnCvss2 {},
165
175
& models.JvnCvss3 {},
@@ -894,6 +904,85 @@ func insertNvd(tx *gorm.DB, cves []models.Nvd, batchSize int) error {
894
904
return nil
895
905
}
896
906
907
+ // CountVulncheck count vulncheck table
908
+ func (r * RDBDriver ) CountVulncheck () (int , error ) {
909
+ var count int64
910
+ if err := r .conn .Model (& models.Vulncheck {}).Count (& count ).Error ; err != nil {
911
+ return 0 , err
912
+ }
913
+ return int (count ), nil
914
+ }
915
+
916
+ // InsertVulncheck Cve information from DB.
917
+ func (r * RDBDriver ) InsertVulncheck (cves iter.Seq2 [models.Vulncheck , error ]) (err error ) {
918
+ bar := pb .ProgressBarTemplate (`{{cycle . "[ ]" "[=> ]" "[===> ]" "[=====> ]" "[======> ]" "[========> ]" "[==========> ]" "[============> ]" "[==============> ]" "[================> ]" "[==================> ]" "[===================>]"}} {{counters .}} files processed. ({{speed .}})` ).New (0 ).Start ().SetWriter (func () io.Writer {
919
+ if viper .GetBool ("log-json" ) {
920
+ return io .Discard
921
+ }
922
+ return os .Stderr
923
+ }())
924
+
925
+ tx := r .conn .Begin ()
926
+ defer func () {
927
+ if re := recover (); re != nil {
928
+ tx .Rollback ()
929
+ }
930
+ }()
931
+ if err := tx .Error ; err != nil {
932
+ return err
933
+ }
934
+
935
+ batchSize := viper .GetInt ("batch-size" )
936
+ if batchSize < 1 {
937
+ return fmt .Errorf ("Failed to set batch-size. err: batch-size option is not set properly" )
938
+ }
939
+
940
+ logger .Infof ("Deleting Vulncheck tables..." )
941
+ if err := deleteVulncheck (tx ); err != nil {
942
+ tx .Rollback ()
943
+ return xerrors .Errorf ("Failed to deleteVulncheck. err: %w" , err )
944
+ }
945
+
946
+ for cve , err := range cves {
947
+ if err != nil {
948
+ tx .Rollback ()
949
+ return xerrors .Errorf ("Failed to convert Vulncheck cves. err: %w" , err )
950
+ }
951
+
952
+ if err := tx .Omit ("Cpes" ).Create (& cve ).Error ; err != nil {
953
+ tx .Rollback ()
954
+ return xerrors .Errorf ("Failed to insert. err: %w" , err )
955
+ }
956
+
957
+ for i := range cve .Cpes {
958
+ cve .Cpes [i ].VulncheckID = uint (cve .ID )
959
+ }
960
+
961
+ for chunk := range slices .Chunk (cve .Cpes , batchSize ) {
962
+ if err := tx .Create (chunk ).Error ; err != nil {
963
+ tx .Rollback ()
964
+ return xerrors .Errorf ("Failed to insert. err: %w" , err )
965
+ }
966
+ }
967
+
968
+ bar .Increment ()
969
+ }
970
+
971
+ if err := tx .Commit ().Error ; err != nil {
972
+ return xerrors .Errorf ("Failed to Commit Transaction. err: %w" , err )
973
+ }
974
+ return nil
975
+ }
976
+
977
+ func deleteVulncheck (tx * gorm.DB ) error {
978
+ for _ , table := range []interface {}{models.Vulncheck {}, models.VulncheckDescription {}, models.VulncheckCvss2Extra {}, models.VulncheckCvss3 {}, models.VulncheckCvss40 {}, models.VulncheckCwe {}, models.VulncheckCpe {}, models.VulncheckReference {}, models.VulncheckCert {}} {
979
+ if err := tx .Session (& gorm.Session {AllowGlobalUpdate : true }).Delete (table ).Error ; err != nil {
980
+ return xerrors .Errorf ("Failed to delete old records. err: %w" , err )
981
+ }
982
+ }
983
+ return nil
984
+ }
985
+
897
986
// GetAdvisoriesFortinet get AdvisoryID: []CVE IDs
898
987
func (r * RDBDriver ) GetAdvisoriesFortinet () (map [string ][]string , error ) {
899
988
var fs []models.Fortinet
0 commit comments