Skip to content

Commit 4a4193d

Browse files
authored
Merge pull request #911 from amvanbaren/simplify-publisher-agreement
Simplify publisher agreement
2 parents 0b4ec92 + 145befd commit 4a4193d

File tree

12 files changed

+164
-424
lines changed

12 files changed

+164
-424
lines changed

server/src/main/java/org/eclipse/openvsx/UserAPI.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.eclipse.openvsx.util.ErrorResultException;
2121
import org.eclipse.openvsx.util.NotFoundException;
2222
import org.eclipse.openvsx.util.UrlUtil;
23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
2325
import org.springframework.http.CacheControl;
2426
import org.springframework.http.HttpStatus;
2527
import org.springframework.http.MediaType;
@@ -44,6 +46,8 @@ public class UserAPI {
4446

4547
private final static int TOKEN_DESCRIPTION_SIZE = 255;
4648

49+
protected final Logger logger = LoggerFactory.getLogger(UserAPI.class);
50+
4751
private final RepositoryService repositories;
4852
private final UserService users;
4953
private final EclipseService eclipse;
@@ -108,7 +112,11 @@ public UserJson getUserData() {
108112
json.role = user.getRole();
109113
json.tokensUrl = createApiUrl(serverUrl, "user", "tokens");
110114
json.createTokenUrl = createApiUrl(serverUrl, "user", "token", "create");
111-
eclipse.enrichUserJson(json, user);
115+
try {
116+
eclipse.enrichUserJson(json, user);
117+
} catch (ErrorResultException e) {
118+
logger.error("Failed to enrich UserJson", e);
119+
}
112120
return json;
113121
}
114122

server/src/main/java/org/eclipse/openvsx/admin/AdminService.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,12 @@ public UserPublishInfoJson getUserPublishInfo(String provider, String loginName)
265265

266266
var userPublishInfo = new UserPublishInfoJson();
267267
userPublishInfo.user = user.toUserJson();
268-
eclipse.enrichUserJson(userPublishInfo.user, user);
268+
try {
269+
eclipse.enrichUserJson(userPublishInfo.user, user);
270+
} catch (ErrorResultException e) {
271+
userPublishInfo.user.error = e.getMessage();
272+
}
273+
269274
userPublishInfo.activeAccessTokenNum = (int) repositories.countActiveAccessTokens(user);
270275
var extVersions = repositories.findLatestVersions(user);
271276
var types = new String[]{DOWNLOAD, MANIFEST, ICON, README, LICENSE, CHANGELOG, VSIXMANIFEST};
@@ -296,9 +301,7 @@ public ResultJson revokePublisherContributions(String provider, String loginName
296301
}
297302

298303
// Send a DELETE request to the Eclipse publisher agreement API
299-
if (eclipse.isActive() && user.getEclipseData() != null
300-
&& user.getEclipseData().publisherAgreement != null
301-
&& user.getEclipseData().publisherAgreement.isActive) {
304+
if (eclipse.isActive() && user.getEclipsePersonId() != null) {
302305
eclipse.revokePublisherAgreement(user, admin);
303306
}
304307

server/src/main/java/org/eclipse/openvsx/eclipse/EclipseService.java

Lines changed: 60 additions & 191 deletions
Large diffs are not rendered by default.
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/********************************************************************************
2+
* Copyright (c) 2020 TypeFox and others
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License v. 2.0 which is available at
6+
* http://www.eclipse.org/legal/epl-2.0.
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
********************************************************************************/
10+
package org.eclipse.openvsx.eclipse;
11+
12+
import java.time.LocalDateTime;
13+
import java.util.Objects;
14+
15+
public class PublisherAgreement {
16+
17+
public boolean isActive;
18+
19+
public String documentId;
20+
21+
/** Version of the last signed publisher agreement. */
22+
public String version;
23+
24+
/** Timestamp of the last signed publisher agreement. */
25+
public LocalDateTime timestamp;
26+
27+
@Override
28+
public boolean equals(Object o) {
29+
if (this == o) return true;
30+
if (o == null || getClass() != o.getClass()) return false;
31+
PublisherAgreement that = (PublisherAgreement) o;
32+
return isActive == that.isActive
33+
&& Objects.equals(documentId, that.documentId)
34+
&& Objects.equals(version, that.version)
35+
&& Objects.equals(timestamp, that.timestamp);
36+
}
37+
38+
@Override
39+
public int hashCode() {
40+
return Objects.hash(isActive, documentId, version, timestamp);
41+
}
42+
}

server/src/main/java/org/eclipse/openvsx/eclipse/PublisherAgreementResponse.java

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,13 @@
99
********************************************************************************/
1010
package org.eclipse.openvsx.eclipse;
1111

12-
import java.time.LocalDateTime;
13-
import java.util.function.Function;
14-
1512
import com.fasterxml.jackson.annotation.JsonProperty;
1613

17-
import org.eclipse.openvsx.entities.EclipseData;
18-
1914
/**
2015
* https://eclipsefdn.github.io/openvsx-publisher-agreement-specs/#/paths/~1publisher_agreement/post
2116
*/
2217
public class PublisherAgreementResponse {
2318

24-
public EclipseData.PublisherAgreement createEntityData(Function<String, LocalDateTime> parseDate) {
25-
var pub = new EclipseData.PublisherAgreement();
26-
pub.isActive = true;
27-
pub.documentId = documentID;
28-
pub.version = version;
29-
pub.timestamp = parseDate.apply(effectiveDate);
30-
return pub;
31-
}
32-
3319
/** Unique identifier for an addressable object in the API. */
3420
@JsonProperty("PersonID")
3521
String personID;
@@ -50,17 +36,10 @@ public EclipseData.PublisherAgreement createEntityData(Function<String, LocalDat
5036
@JsonProperty("ReceivedDate")
5137
String receivedDate;
5238

53-
/** Date string in the RFC 3339 format. */
54-
@JsonProperty("ExpirationDate")
55-
String expirationDate;
56-
5739
/** The signed document as a blob entity. */
5840
@JsonProperty("ScannedDocumentBLOB")
5941
String scannedDocumentBLOB;
6042

61-
@JsonProperty("ScannedDocumentBytes")
62-
String scannedDocumentBytes;
63-
6443
/** The MIME type for the posted document blob. */
6544
@JsonProperty("ScannedDocumentMime")
6645
String scannedDocumentMime;
@@ -72,5 +51,4 @@ public EclipseData.PublisherAgreement createEntityData(Function<String, LocalDat
7251
/** Comment about the document being posted. */
7352
@JsonProperty("Comments")
7453
String comments;
75-
7654
}

server/src/main/java/org/eclipse/openvsx/eclipse/PublisherComplianceChecker.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,14 @@
1010
package org.eclipse.openvsx.eclipse;
1111

1212
import jakarta.persistence.EntityManager;
13+
import org.apache.commons.lang3.StringUtils;
1314
import org.eclipse.openvsx.ExtensionService;
1415
import org.eclipse.openvsx.entities.Extension;
1516
import org.eclipse.openvsx.entities.PersonalAccessToken;
1617
import org.eclipse.openvsx.entities.UserData;
18+
import org.eclipse.openvsx.json.UserJson;
1719
import org.eclipse.openvsx.repositories.RepositoryService;
20+
import org.eclipse.openvsx.util.ErrorResultException;
1821
import org.eclipse.openvsx.util.NamingUtil;
1922
import org.slf4j.Logger;
2023
import org.slf4j.LoggerFactory;
@@ -78,20 +81,19 @@ private boolean isCompliant(UserData user) {
7881
if (user.getProvider() == null) {
7982
return true;
8083
}
81-
var eclipseData = user.getEclipseData();
82-
if (eclipseData == null || eclipseData.personId == null) {
84+
if (user.getEclipsePersonId() == null) {
8385
// The user has never logged in with Eclipse
8486
return false;
8587
}
86-
if (eclipseData.publisherAgreement == null || !eclipseData.publisherAgreement.isActive) {
87-
// We don't have any active PA in our DB, let's check their Eclipse profile
88-
var profile = eclipseService.getPublicProfile(eclipseData.personId);
89-
if (profile.publisherAgreements == null || profile.publisherAgreements.openVsx == null
90-
|| profile.publisherAgreements.openVsx.version == null) {
91-
return false;
92-
}
88+
89+
var json = new UserJson();
90+
try {
91+
eclipseService.enrichUserJson(json, user);
92+
return !json.publisherAgreement.status.equals("none");
93+
} catch(ErrorResultException e) {
94+
// no way to determine whether the user has a publisher agreement
95+
return true;
9396
}
94-
return true;
9597
}
9698

9799
private void deactivateExtensions(Streamable<PersonalAccessToken> accessTokens) {

server/src/main/java/org/eclipse/openvsx/entities/EclipseData.java

Lines changed: 0 additions & 79 deletions
This file was deleted.

server/src/main/java/org/eclipse/openvsx/entities/EclipseDataConverter.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

server/src/main/java/org/eclipse/openvsx/entities/UserData.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,7 @@ public class UserData implements Serializable {
5252
@OneToMany(mappedBy = "user")
5353
List<NamespaceMembership> memberships;
5454

55-
@Column(length = 4096)
56-
@Convert(converter = EclipseDataConverter.class)
57-
EclipseData eclipseData;
55+
String eclipsePersonId;
5856

5957
@Column(length = 4096)
6058
@Convert(converter = AuthTokenConverter.class)
@@ -150,12 +148,12 @@ public void setProviderUrl(String providerUrl) {
150148
this.providerUrl = providerUrl;
151149
}
152150

153-
public EclipseData getEclipseData() {
154-
return eclipseData;
151+
public String getEclipsePersonId() {
152+
return eclipsePersonId;
155153
}
156154

157-
public void setEclipseData(EclipseData eclipseData) {
158-
this.eclipseData = eclipseData;
155+
public void setEclipsePersonId(String eclipsePersonId) {
156+
this.eclipsePersonId = eclipsePersonId;
159157
}
160158

161159
public AuthToken getGithubToken() {
@@ -190,7 +188,7 @@ public boolean equals(Object o) {
190188
&& Objects.equals(providerUrl, userData.providerUrl)
191189
&& Objects.equals(tokens, userData.tokens)
192190
&& Objects.equals(memberships, userData.memberships)
193-
&& Objects.equals(eclipseData, userData.eclipseData)
191+
&& Objects.equals(eclipsePersonId, userData.eclipsePersonId)
194192
&& Objects.equals(githubToken, userData.githubToken)
195193
&& Objects.equals(eclipseToken, userData.eclipseToken);
196194
}
@@ -199,7 +197,7 @@ public boolean equals(Object o) {
199197
public int hashCode() {
200198
return Objects.hash(
201199
id, role, loginName, fullName, email, avatarUrl, provider, authId, providerUrl, tokens, memberships,
202-
eclipseData, githubToken, eclipseToken
200+
eclipsePersonId, githubToken, eclipseToken
203201
);
204202
}
205203
}

server/src/main/java/org/eclipse/openvsx/security/OAuth2UserServices.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,8 @@ private IdPrincipal loadEclipseUser(OAuth2UserRequest userRequest) {
146146
+ ") does not match your GitHub authentication ("
147147
+ userData.getLoginName() + ").",
148148
ECLIPSE_MISMATCH_GITHUB_ID);
149+
149150
eclipse.updateUserData(userData, profile);
150-
if (profile.publisherAgreements == null) {
151-
eclipse.getPublisherAgreement(userData, accessToken);
152-
}
153151
return principal;
154152
} catch (ErrorResultException exc) {
155153
throw new AuthenticationServiceException(exc.getMessage(), exc);

0 commit comments

Comments
 (0)