Skip to content

Commit 0ee29cc

Browse files
authored
Merge pull request #8 from schibsted/bugfixes
Fix bug in checking if NPM package already exists
2 parents 332b6d0 + ada0a29 commit 0ee29cc

File tree

1 file changed

+16
-35
lines changed
  • src/main/java/com/schibsted/security/artishock/npm/client

1 file changed

+16
-35
lines changed

src/main/java/com/schibsted/security/artishock/npm/client/NpmClient.java

Lines changed: 16 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,8 @@
1010
import com.schibsted.security.artishock.npm.NpmPackageOrScope;
1111
import com.schibsted.security.artishock.shared.HttpClient;
1212
import com.schibsted.security.artishock.shared.SimpleCache;
13-
import java.io.IOException;
1413
import java.util.ArrayList;
15-
import java.util.HashMap;
1614
import java.util.List;
17-
import java.util.Map;
1815
import java.util.Optional;
1916
import java.util.function.Supplier;
2017
import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -33,7 +30,7 @@ public NpmClient() {
3330

3431
public List<NpmPackageIdentifier> getPackageList(List<NpmPackageIdentifier> packages, ConnectionInfo connectionInfo) {
3532
log.info(() -> "Fetching select packages from " + connectionInfo.getPrefix());
36-
return new ArrayList<>(getNpmPackages(packages, connectionInfo).keySet());
33+
return checkUpstream(packages, connectionInfo);
3734
}
3835

3936
public List<NpmPackageOrScope> notClaimedOrg(List<String> scopes) {
@@ -61,52 +58,36 @@ boolean claimedOrgCached(String scope) {
6158
}
6259
}
6360

64-
Map<NpmPackageIdentifier, NpmPackageInfo> getNpmPackages(List<NpmPackageIdentifier> packages, ConnectionInfo connectionInfo) {
65-
var result = new HashMap<NpmPackageIdentifier, NpmPackageInfo>();
61+
List<NpmPackageIdentifier> checkUpstream(List<NpmPackageIdentifier> packages, ConnectionInfo connectionInfo) {
62+
var result = new ArrayList<NpmPackageIdentifier>();
6663
for (var packageName : packages) {
67-
var npmjs = getPackageInfo(packageName, connectionInfo);
68-
var p = convert(npmjs);
69-
p.ifPresent(npmPackageInfo -> result.put(packageName, npmPackageInfo));
64+
if (existsUpstream(packageName, connectionInfo)) {
65+
result.add(packageName);
66+
}
7067
}
7168

7269
return result;
7370
}
7471

75-
Optional<NpmPackageInfo> convert(ViewRaw viewRaw) {
76-
if (viewRaw.error == null && viewRaw.errors == null) {
77-
return Optional.of(new NpmPackageInfo(viewRaw));
78-
} else {
79-
if (viewRaw.errors != null && viewRaw.errors.get(0).status == 404) {
80-
return Optional.empty();
81-
} else if (viewRaw.error != null && (viewRaw.error.equals("Not found") || viewRaw.error.equals("not_found"))) {
82-
return Optional.empty();
83-
}
72+
boolean existsUpstream(NpmPackageIdentifier packageName, ConnectionInfo connectionInfo) {
73+
Supplier<String> f = () -> Boolean.toString(packageExists(packageName.toString(), connectionInfo));
74+
var result = SimpleCache.getFromCacheOrExecute(connectionInfo, packageName.toString(), CacheCategory.PACKAGE_EXISTS, f);
8475

85-
if (viewRaw.errors != null) {
86-
throw new RuntimeException(String.format("Got error %s", viewRaw.errors.get(0).message));
76+
if (result.equals("true")) {
77+
return true;
78+
} else if (result.equals("false")) {
79+
return false;
8780
} else {
88-
throw new RuntimeException(String.format("Got error %s", viewRaw.error));
81+
throw new RuntimeException(String.format("Must be 'true' or 'false' got '%s'", result));
8982
}
90-
}
91-
}
92-
93-
ViewRaw getPackageInfo(NpmPackageIdentifier packageName, ConnectionInfo connectionInfo) {
94-
try {
95-
Supplier<String> f = () -> fetchPackageInfo(packageName.toString(), connectionInfo);
96-
var result = SimpleCache.getFromCacheOrExecute(connectionInfo, packageName.toString(), CacheCategory.PACKAGE_INFO, f);
97-
98-
return mapper.readValue(result, ViewRaw.class);
99-
} catch (IOException e) {
100-
throw new RuntimeException(e);
101-
}
10283
}
10384

10485
boolean fetchOrgIsClaimed(ConnectionInfo connectionInfo, String scope) {
10586
return HttpClient.exists(connectionInfo, "/org/" + scope);
10687
}
10788

108-
private String fetchPackageInfo(String packageName, ConnectionInfo connectionInfo) {
109-
return HttpClient.fetch(connectionInfo, "/" + packageName);
89+
private boolean packageExists(String packageName, ConnectionInfo connectionInfo) {
90+
return HttpClient.exists(connectionInfo, "/" + packageName);
11091
}
11192

11293
public ConnectionInfo upstream() {

0 commit comments

Comments
 (0)