Skip to content

Commit ba58496

Browse files
committed
Merge branch 'zakaria-shahen-issues/disable-springdoc-by-default'
2 parents 3b76772 + 55c3ea9 commit ba58496

File tree

3 files changed

+161
-2
lines changed

3 files changed

+161
-2
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
<spring-cloud-function.version>4.2.2</spring-cloud-function.version>
6464
<spring-security-oauth2-authorization-server.version>1.4.3
6565
</spring-security-oauth2-authorization-server.version>
66-
<scalar.version>0.1.0</scalar.version>
66+
<scalar.version>0.3.12</scalar.version>
6767
<skipPublishing>false</skipPublishing>
6868
</properties>
6969

springdoc-openapi-starter-common/src/main/java/org/springdoc/scalar/AbstractScalarController.java

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,11 @@
3030
import java.io.InputStream;
3131
import java.net.URLDecoder;
3232
import java.nio.charset.StandardCharsets;
33+
import java.util.List;
34+
import java.util.stream.Collectors;
3335

3436
import com.scalar.maven.webjar.ScalarProperties;
37+
import com.scalar.maven.webjar.ScalarProperties.ScalarSource;
3538

3639
import org.springframework.http.MediaType;
3740
import org.springframework.http.ResponseEntity;
@@ -182,4 +185,160 @@ protected String buildJsBundleUrl(String requestUrl, String scalarPath) {
182185
* @return the string
183186
*/
184187
protected abstract String buildJsBundleUrl(String requestUrl);
188+
189+
/**
190+
* Builds the configuration JSON for the Scalar API Reference.
191+
*
192+
* @return the configuration JSON as a string
193+
*/
194+
private String buildConfigurationJson() {
195+
StringBuilder config = new StringBuilder();
196+
config.append("{");
197+
198+
// Add URL
199+
config.append("\n url: \"").append(escapeJson(scalarProperties.getUrl())).append("\"");
200+
201+
// Add sources
202+
if (scalarProperties.getSources() != null && !scalarProperties.getSources().isEmpty()) {
203+
config.append(",\n sources: ").append(buildSourcesJsonArray(scalarProperties.getSources()));
204+
}
205+
206+
// Add showSidebar
207+
if (!scalarProperties.isShowSidebar()) {
208+
config.append(",\n showSidebar: false");
209+
}
210+
211+
// Add hideModels
212+
if (scalarProperties.isHideModels()) {
213+
config.append(",\n hideModels: true");
214+
}
215+
216+
// Add hideTestRequestButton
217+
if (scalarProperties.isHideTestRequestButton()) {
218+
config.append(",\n hideTestRequestButton: true");
219+
}
220+
221+
// Add darkMode
222+
if (scalarProperties.isDarkMode()) {
223+
config.append(",\n darkMode: true");
224+
}
225+
226+
// Add hideDarkModeToggle
227+
if (scalarProperties.isHideDarkModeToggle()) {
228+
config.append(",\n hideDarkModeToggle: true");
229+
}
230+
231+
// Add customCss
232+
if (scalarProperties.getCustomCss() != null && !scalarProperties.getCustomCss().trim().isEmpty()) {
233+
config.append(",\n customCss: \"").append(escapeJson(scalarProperties.getCustomCss())).append("\"");
234+
}
235+
236+
// Add theme
237+
if (scalarProperties.getTheme() != null && !"default".equals(scalarProperties.getTheme())) {
238+
config.append(",\n theme: \"").append(escapeJson(scalarProperties.getTheme())).append("\"");
239+
}
240+
241+
// Add layout
242+
if (scalarProperties.getLayout() != null && !"modern".equals(scalarProperties.getLayout())) {
243+
config.append(",\n layout: \"").append(escapeJson(scalarProperties.getLayout())).append("\"");
244+
}
245+
246+
// Add hideSearch
247+
if (scalarProperties.isHideSearch()) {
248+
config.append(",\n hideSearch: true");
249+
}
250+
251+
// Add documentDownloadType
252+
if (scalarProperties.getDocumentDownloadType() != null && !"both".equals(scalarProperties.getDocumentDownloadType())) {
253+
config.append(",\n documentDownloadType: \"").append(escapeJson(scalarProperties.getDocumentDownloadType())).append("\"");
254+
}
255+
256+
config.append("\n}");
257+
return config.toString();
258+
}
259+
260+
/**
261+
* Escapes a string for JSON output.
262+
*
263+
* @param input the input string
264+
* @return the escaped string
265+
*/
266+
private String escapeJson(String input) {
267+
if (input == null) {
268+
return "";
269+
}
270+
return input.replace("\\", "\\\\")
271+
.replace("\"", "\\\"")
272+
.replace("\n", "\\n")
273+
.replace("\r", "\\r")
274+
.replace("\t", "\\t");
275+
}
276+
277+
/**
278+
* Builds the JSON for the OpenAPI reference sources
279+
*
280+
* @param sources list of OpenAPI reference sources
281+
* @return the sources as a JSON string
282+
*/
283+
private String buildSourcesJsonArray(List<ScalarSource> sources) {
284+
final StringBuilder builder = new StringBuilder("[");
285+
286+
// Filter out sources with invalid urls
287+
final List<ScalarProperties.ScalarSource> filteredSources = sources.stream()
288+
.filter(source -> isNotNullOrBlank(source.getUrl()))
289+
.collect(Collectors.toList());
290+
291+
// Append each source to json array
292+
for (int i = 0; i < filteredSources.size(); i++) {
293+
final ScalarProperties.ScalarSource source = filteredSources.get(i);
294+
295+
final String sourceJson = buildSourceJson(source);
296+
builder.append("\n").append(sourceJson);
297+
298+
if (i != filteredSources.size() - 1) {
299+
builder.append(",");
300+
}
301+
}
302+
303+
builder.append("\n]");
304+
return builder.toString();
305+
}
306+
307+
/**
308+
* Builds the JSON for an OpenAPI reference source
309+
*
310+
* @param source the OpenAPI reference source
311+
* @return the source as a JSON string
312+
*/
313+
private String buildSourceJson(ScalarProperties.ScalarSource source) {
314+
final StringBuilder builder = new StringBuilder("{");
315+
316+
builder.append("\n url: \"").append(escapeJson(source.getUrl())).append("\"");
317+
318+
319+
if (isNotNullOrBlank(source.getTitle())) {
320+
builder.append(",\n title: \"").append(escapeJson(source.getTitle())).append("\"");
321+
}
322+
323+
if (isNotNullOrBlank(source.getSlug())) {
324+
builder.append(",\n slug: \"").append(escapeJson(source.getSlug())).append("\"");
325+
}
326+
327+
if (source.isDefault() != null) {
328+
builder.append(",\n default: ").append(source.isDefault());
329+
}
330+
331+
builder.append("\n}");
332+
return builder.toString();
333+
}
334+
335+
/**
336+
* Returns whether a String is not null or blank
337+
*
338+
* @param input the string
339+
* @return whether the string is not null or blank
340+
*/
341+
private boolean isNotNullOrBlank(String input) {
342+
return input != null && !input.isBlank();
343+
}
185344
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/scalar/ScalarConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public class ScalarConstants {
4646
/**
4747
* The constant SCALAR_DEFAULT_URL.
4848
*/
49-
public static final String SCALAR_DEFAULT_URL = "https://cdn.jsdelivr.net/npm/@scalar/galaxy/dist/latest.json";
49+
public static final String SCALAR_DEFAULT_URL = "https://registry.scalar.com/@scalar/apis/galaxy/latest?format=json";
5050

5151
/**
5252
* The constant DEFAULT_SCALAR_ACTUATOR_PATH.

0 commit comments

Comments
 (0)