@@ -1220,64 +1220,85 @@ osv_scan(_) ->
1220
1220
application :ensure_all_started ([ssl , inets ]),
1221
1221
URI = " https://api.osv.dev/v1/querybatch" ,
1222
1222
Format = " application/x-www-form-urlencoded" ,
1223
+ File = " osv-scanner.json" ,
1223
1224
1224
1225
VendorSrcFiles = find_vendor_src_files (" ." ),
1225
1226
Packages = generate_vendor_info_package (VendorSrcFiles ),
1226
1227
1227
- OSVQuery = generate_osv_query (Packages ),
1228
- io :format (" [OSV] Information sent~n~s~n " , [json :format (OSVQuery )]),
1229
- OSV = json :encode (OSVQuery ),
1230
-
1231
- Content = {URI , [], Format , OSV },
1232
- Result = httpc :request (post , Content , [], []),
1233
- case Result of
1234
- {ok ,{{_ , 200 ,_ }, _Headers , Body }} ->
1235
- #{~ " results" := OSVResults } = json :decode (erlang :list_to_binary (Body )),
1236
- Vulnerabilities = lists :filter (fun (#{~ " vulns" := _Ids }) -> true ; (_ ) -> false end , OSVResults ),
1237
- case Vulnerabilities of
1238
- [] ->
1239
- io :format (" [OSV] No vulnerabilities found.~n " );
1240
- _ ->
1241
- FormatVulns = format_vulnerabilities (OSVQuery , OSVResults ),
1242
- fail (" [OSV] There are existing vulnerabilities:~n~s " , [FormatVulns ])
1243
- end ;
1244
- {error , Error } ->
1245
- fail (" [OSV] POST request to ~p errors: ~p " , [URI , Error ])
1246
- end .
1247
-
1248
- format_vulnerabilities (OSVQuery , OSVResults ) ->
1249
- NameVulnerabilities = lists :zip (osv_names (OSVQuery ), OSVResults ),
1250
- ExistingVulnerabilities = lists :filtermap (fun ({Name , #{~ " vulns" := Ids }}) ->
1251
- {true , {Name , [Id || #{~ " id" := Id } <- Ids ]}};
1252
- (_ ) ->
1253
- false
1254
- end , NameVulnerabilities ),
1255
- lists :map (fun ({N , Ids }) ->
1256
- io_lib :format (" - ~s : ~s~n " , [N , lists :join (" ," , Ids )])
1257
- end , ExistingVulnerabilities ).
1258
-
1259
- osv_names (#{~ " queries" := Packages }) ->
1260
- lists :map (fun osv_names /1 , Packages );
1261
- osv_names (#{~ " package" := #{~ " name" := Name }}) ->
1262
- Name .
1263
-
1264
- generate_osv_query (Packages ) ->
1265
- #{~ " queries" => lists :foldl (fun generate_osv_query /2 , [], Packages )}.
1266
- generate_osv_query (#{~ " versionInfo" := Vsn , ~ " ecosystem" := Ecosystem , ~ " name" := Name }, Acc ) ->
1267
- Package = #{~ " package" => #{~ " name" => Name , ~ " ecosystem" => Ecosystem }, ~ " version" => Vsn },
1228
+ % % Test if this works in a Github Workflow
1229
+ OSVQueryResults = generate_osv_results (Packages ),
1230
+ file :write_file (File , json :format (OSVQueryResults )).
1231
+
1232
+ % % OSVQuery = generate_osv_query(Packages),
1233
+ % % io:format("[OSV] Information sent~n~s~n", [json:format(OSVQuery)]),
1234
+ % % OSV = json:encode(OSVQuery),
1235
+
1236
+ % % Content = {URI, [], Format, OSV},
1237
+ % % Result = httpc:request(post, Content, [], []),
1238
+ % % case Result of
1239
+ % % {ok,{{_, 200,_}, _Headers, Body}} ->
1240
+ % % #{~"results" := OSVResults} = json:decode(erlang:list_to_binary(Body)),
1241
+ % % Vulnerabilities = lists:filter(fun (#{~"vulns" := _Ids}) -> true; (_) -> false end, OSVResults),
1242
+ % % case Vulnerabilities of
1243
+ % % [] ->
1244
+ % % io:format("[OSV] No vulnerabilities found.~n");
1245
+ % % _ ->
1246
+ % % FormatVulns = format_vulnerabilities(OSVQuery, OSVResults),
1247
+ % % fail("[OSV] There are existing vulnerabilities:~n~s", [FormatVulns])
1248
+ % % end;
1249
+ % % {error, Error} ->
1250
+ % % fail("[OSV] POST request to ~p errors: ~p", [URI, Error])
1251
+ % % end.
1252
+
1253
+ % % format_vulnerabilities(OSVQuery, OSVResults) ->
1254
+ % % NameVulnerabilities = lists:zip(osv_names(OSVQuery), OSVResults),
1255
+ % % ExistingVulnerabilities = lists:filtermap(fun ({Name, #{~"vulns" := Ids}}) ->
1256
+ % % {true, {Name, [Id || #{~"id" := Id} <- Ids]}};
1257
+ % % (_) ->
1258
+ % % false
1259
+ % % end, NameVulnerabilities),
1260
+ % % lists:map(fun ({N, Ids}) ->
1261
+ % % io_lib:format("- ~s: ~s~n", [N, lists:join(",", Ids)])
1262
+ % % end, ExistingVulnerabilities).
1263
+
1264
+ % % osv_names(#{~"queries" := Packages}) ->
1265
+ % % lists:map(fun osv_names/1, Packages);
1266
+ % % osv_names(#{~"package" := #{~"name" := Name }}) ->
1267
+ % % Name.
1268
+
1269
+ % % generate_osv_query(Packages) ->
1270
+ % % #{~"queries" => lists:foldl(fun generate_osv_query/2, [], Packages)}.
1271
+ % % generate_osv_query(#{~"versionInfo" := Vsn, ~"ecosystem" := Ecosystem, ~"name" := Name}, Acc) ->
1272
+ % % Package = #{~"package" => #{~"name" => Name, ~"ecosystem" => Ecosystem}, ~"version" => Vsn},
1273
+ % % [Package | Acc];
1274
+ % % generate_osv_query(#{~"sha" := SHA, ~"downloadLocation" := Location}, Acc) ->
1275
+ % % case string:prefix(Location, ~"https://") of
1276
+ % % nomatch ->
1277
+ % % Acc;
1278
+ % % URI ->
1279
+ % % Package = #{~"package" => #{~"name" => URI}, ~"commit" => SHA},
1280
+ % % [Package | Acc]
1281
+ % % end;
1282
+ % % generate_osv_query(_, Acc) ->
1283
+ % % Acc.
1284
+
1285
+
1286
+ generate_osv_results (Packages ) ->
1287
+ #{~ " results" => [#{~ " packages" => lists :foldl (fun generate_osv_results /2 , [], Packages )}]}.
1288
+ generate_osv_results (#{~ " versionInfo" := Vsn , ~ " ecosystem" := Ecosystem , ~ " name" := Name }, Acc ) ->
1289
+ Package = #{~ " package" => #{~ " name" => Name , ~ " ecosystem" => Ecosystem , ~ " version" => Vsn }},
1268
1290
[Package | Acc ];
1269
- generate_osv_query (#{~ " sha" := SHA , ~ " downloadLocation" := Location }, Acc ) ->
1291
+ generate_osv_results (#{~ " sha" := SHA , ~ " downloadLocation" := Location }, Acc ) ->
1270
1292
case string :prefix (Location , ~ " https://" ) of
1271
1293
nomatch ->
1272
1294
Acc ;
1273
1295
URI ->
1274
- Package = #{~ " package" => #{~ " name" => URI } , ~ " commit" => SHA },
1296
+ Package = #{~ " package" => #{~ " name" => URI , ~ " commit" => SHA } },
1275
1297
[Package | Acc ]
1276
1298
end ;
1277
- generate_osv_query (_ , Acc ) ->
1299
+ generate_osv_results (_ , Acc ) ->
1278
1300
Acc .
1279
1301
1280
-
1281
1302
cleanup_path (<<" ./" , Path /binary >>) when is_binary (Path ) -> Path ;
1282
1303
cleanup_path (Path ) when is_binary (Path ) -> Path .
1283
1304
0 commit comments