• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

box / box-java-sdk / #5076

07 Oct 2025 12:35PM UTC coverage: 37.132% (+0.007%) from 37.125%
#5076

push

github

web-flow
test: Change `Event.additionalDetails` field assertion in events test (box/box-codegen#858) (#1491)

18454 of 49699 relevant lines covered (37.13%)

0.37 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.32
/src/main/java/com/box/sdkgen/box/developertokenauth/BoxDeveloperTokenAuth.java
1
package com.box.sdkgen.box.developertokenauth;
2

3
import com.box.sdkgen.box.errors.BoxSDKError;
4
import com.box.sdkgen.box.tokenstorage.InMemoryTokenStorage;
5
import com.box.sdkgen.box.tokenstorage.TokenStorage;
6
import com.box.sdkgen.managers.authorization.AuthorizationManager;
7
import com.box.sdkgen.networking.auth.Authentication;
8
import com.box.sdkgen.networking.network.NetworkSession;
9
import com.box.sdkgen.schemas.accesstoken.AccessToken;
10
import com.box.sdkgen.schemas.postoauth2revoke.PostOAuth2Revoke;
11
import com.box.sdkgen.schemas.postoauth2token.PostOAuth2Token;
12
import com.box.sdkgen.schemas.postoauth2token.PostOAuth2TokenGrantTypeField;
13
import com.box.sdkgen.schemas.postoauth2token.PostOAuth2TokenSubjectTokenTypeField;
14
import java.util.List;
15

16
public class BoxDeveloperTokenAuth implements Authentication {
17

18
  public final String token;
19

20
  /** Configuration object of DeveloperTokenAuth. */
21
  public DeveloperTokenConfig config;
22

23
  /**
24
   * An object responsible for storing token. If no custom implementation provided, the token will
25
   * be stored in memory.
26
   */
27
  public final TokenStorage tokenStorage;
28

29
  public BoxDeveloperTokenAuth(String token) {
1✔
30
    this.token = token;
1✔
31
    this.config = new DeveloperTokenConfig();
1✔
32
    this.tokenStorage =
1✔
33
        new InMemoryTokenStorage.Builder()
34
            .token(new AccessToken.Builder().accessToken(this.token).build())
1✔
35
            .build();
1✔
36
  }
1✔
37

38
  protected BoxDeveloperTokenAuth(Builder builder) {
1✔
39
    this.token = builder.token;
1✔
40
    this.config = builder.config;
1✔
41
    this.tokenStorage =
1✔
42
        new InMemoryTokenStorage.Builder()
43
            .token(new AccessToken.Builder().accessToken(this.token).build())
1✔
44
            .build();
1✔
45
  }
1✔
46

47
  /** Retrieves stored developer token */
48
  public AccessToken retrieveToken() {
49
    return retrieveToken(null);
1✔
50
  }
51

52
  /**
53
   * Retrieves stored developer token
54
   *
55
   * @param networkSession An object to keep network session state
56
   */
57
  @Override
58
  public AccessToken retrieveToken(NetworkSession networkSession) {
59
    AccessToken token = this.tokenStorage.get();
1✔
60
    if (token == null) {
1✔
61
      throw new BoxSDKError("No access token is available.");
1✔
62
    }
63
    return token;
1✔
64
  }
65

66
  /** Developer token cannot be refreshed */
67
  public AccessToken refreshToken() {
68
    return refreshToken(null);
×
69
  }
70

71
  /**
72
   * Developer token cannot be refreshed
73
   *
74
   * @param networkSession An object to keep network session state
75
   */
76
  @Override
77
  public AccessToken refreshToken(NetworkSession networkSession) {
78
    throw new BoxSDKError("Developer token has expired. Please provide a new one.");
×
79
  }
80

81
  public String retrieveAuthorizationHeader() {
82
    return retrieveAuthorizationHeader(null);
×
83
  }
84

85
  @Override
86
  public String retrieveAuthorizationHeader(NetworkSession networkSession) {
87
    AccessToken token = this.retrieveToken(networkSession);
1✔
88
    return String.join("", "Bearer ", token.getAccessToken());
1✔
89
  }
90

91
  /**
92
   * Revoke an active Access Token, effectively logging a user out that has been previously
93
   * authenticated.
94
   */
95
  public void revokeToken() {
96
    revokeToken(null);
1✔
97
  }
1✔
98

99
  /**
100
   * Revoke an active Access Token, effectively logging a user out that has been previously
101
   * authenticated.
102
   *
103
   * @param networkSession An object to keep network session state
104
   */
105
  @Override
106
  public void revokeToken(NetworkSession networkSession) {
107
    AccessToken token = this.tokenStorage.get();
1✔
108
    if (token == null) {
1✔
109
      return;
×
110
    }
111
    AuthorizationManager authManager =
1✔
112
        new AuthorizationManager.Builder()
113
            .networkSession((!(networkSession == null) ? networkSession : new NetworkSession()))
1✔
114
            .build();
1✔
115
    authManager.revokeAccessToken(
1✔
116
        new PostOAuth2Revoke.Builder()
117
            .clientId(this.config.getClientId())
1✔
118
            .clientSecret(this.config.getClientSecret())
1✔
119
            .token(token.getAccessToken())
1✔
120
            .build());
1✔
121
    this.tokenStorage.clear();
1✔
122
  }
1✔
123

124
  /**
125
   * Downscope access token to the provided scopes. Returning a new access token with the provided
126
   * scopes, with the original access token unchanged.
127
   *
128
   * @param scopes The scope(s) to apply to the resulting token.
129
   * @param resource The file or folder to get a downscoped token for. If None and shared_link None,
130
   *     the resulting token will not be scoped down to just a single item. The resource should be a
131
   *     full URL to an item, e.g. https://api.box.com/2.0/files/123456.
132
   * @param sharedLink The shared link to get a downscoped token for. If None and item None, the
133
   *     resulting token will not be scoped down to just a single item.
134
   * @param networkSession An object to keep network session state
135
   */
136
  @Override
137
  public AccessToken downscopeToken(
138
      List<String> scopes, String resource, String sharedLink, NetworkSession networkSession) {
139
    AccessToken token = this.retrieveToken(networkSession);
1✔
140
    if (token == null || token.getAccessToken() == null) {
1✔
141
      throw new BoxSDKError("No access token is available.");
×
142
    }
143
    AuthorizationManager authManager =
1✔
144
        new AuthorizationManager.Builder()
145
            .networkSession((!(networkSession == null) ? networkSession : new NetworkSession()))
1✔
146
            .build();
1✔
147
    AccessToken downscopedToken =
1✔
148
        authManager.requestAccessToken(
1✔
149
            new PostOAuth2Token.Builder(
150
                    PostOAuth2TokenGrantTypeField.URN_IETF_PARAMS_OAUTH_GRANT_TYPE_TOKEN_EXCHANGE)
151
                .subjectToken(token.getAccessToken())
1✔
152
                .subjectTokenType(
1✔
153
                    PostOAuth2TokenSubjectTokenTypeField
154
                        .URN_IETF_PARAMS_OAUTH_TOKEN_TYPE_ACCESS_TOKEN)
155
                .resource(resource)
1✔
156
                .scope(String.join(" ", scopes))
1✔
157
                .boxSharedLink(sharedLink)
1✔
158
                .build());
1✔
159
    return downscopedToken;
1✔
160
  }
161

162
  public TokenStorage getTokenStorage() {
163
    return tokenStorage;
×
164
  }
165

166
  public static class Builder {
167

168
    protected final String token;
169

170
    protected DeveloperTokenConfig config;
171

172
    public Builder(String token) {
1✔
173
      this.token = token;
1✔
174
      this.config = new DeveloperTokenConfig();
1✔
175
    }
1✔
176

177
    public Builder config(DeveloperTokenConfig config) {
178
      this.config = config;
1✔
179
      return this;
1✔
180
    }
181

182
    public BoxDeveloperTokenAuth build() {
183
      return new BoxDeveloperTokenAuth(this);
1✔
184
    }
185
  }
186
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc