47 lines
1.4 KiB
Java
47 lines
1.4 KiB
Java
/*
|
|
* SPDX-FileCopyrightText: Copyright © 2024 WebGoat authors
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
package org.owasp.webgoat.container;
|
|
|
|
import java.io.IOException;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Set;
|
|
import java.util.regex.Pattern;
|
|
import lombok.Getter;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.core.io.support.ResourcePatternResolver;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
@Component
|
|
@Slf4j
|
|
public class LessonResourceScanner {
|
|
|
|
private static final Pattern lessonPattern = Pattern.compile("^.*/lessons/([^/]*)/.*$");
|
|
|
|
@Getter private final Set<String> lessons = new HashSet<>();
|
|
|
|
public LessonResourceScanner(ResourcePatternResolver resourcePatternResolver) {
|
|
try {
|
|
var resources = resourcePatternResolver.getResources("classpath:/lessons/*/*");
|
|
for (var resource : resources) {
|
|
// WG can run as a fat jar or as directly from file system we need to support both so use
|
|
// the URL
|
|
var url = resource.getURL();
|
|
var matcher = lessonPattern.matcher(url.toString());
|
|
if (matcher.matches()) {
|
|
lessons.add(matcher.group(1));
|
|
}
|
|
}
|
|
log.debug("Found {} lessons", lessons.size());
|
|
} catch (IOException e) {
|
|
log.warn("No lessons found...");
|
|
}
|
|
}
|
|
|
|
public List<String> applyPattern(String pattern) {
|
|
return lessons.stream().map(lesson -> String.format(pattern, lesson)).toList();
|
|
}
|
|
}
|