TunnelServer.java

package jasper.component.channel;

import jasper.repository.UserRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;

import static jasper.domain.proj.HasOrigin.nesting;
import static jasper.repository.spec.OriginSpec.isOrigin;
import static jasper.repository.spec.UserSpec.hasAuthorizedKeys;
import static org.apache.commons.lang3.StringUtils.isBlank;

public interface TunnelServer {
	Logger logger = LoggerFactory.getLogger(TunnelServer.class);

	void generateHostKey();
	void generateConfig();

	default String authorizedKeys(List<String> origins, UserRepository userRepository) {
		var result = new StringBuilder();
		for (var origin : origins) {
			result
				.append("\n# ")
				.append(isBlank(origin) ? "default" : origin)
				.append("\n");
			for (var u : userRepository.findAll(hasAuthorizedKeys().and(isOrigin(origin)))) {
				if (isBlank(u.getAuthorizedKeys())) continue;
				if (nesting(u.getOrigin()) > nesting(origin)) continue;
				logger.debug("Enabling SSH access for {}", u.getQualifiedTag());
				var lines = u.getAuthorizedKeys().split("\n");
				for (var l : lines) {
					if (isBlank(l)) continue;
					var parts = l.split("\\s+");
					result
						.append(parts[0])
						.append(" ")
						.append(parts[1])
						.append(" ")
						.append(u.getQualifiedTag())
						.append("\n");
				}
			}
		}
		return result.toString();
	}
}