Skip to content

Commit

Permalink
Enable full access when authentication is disabled - #202 [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
hmiguim committed Apr 2, 2020
1 parent 30c61fc commit 0dc6daf
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,16 @@ public Boolean isAuthenticationEnabled() {

@Override
public User getAuthenticatedUser() {
User user = UserUtility.getUser(request);
final boolean isAuthenticationEnabled = ViewerConfiguration.getInstance().getIsAuthenticationEnabled();

User user;

if (isAuthenticationEnabled) {
user = UserUtility.getUser(request);
} else {
user = UserUtility.getNoAuthenticationUser();
UserUtility.setUser(request, user);
}
LOGGER.debug("Serving user {}", user);
return user;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.databasepreservation.common.client;

import com.databasepreservation.common.client.models.user.User;
import org.roda.core.data.common.RodaConstants;
import com.databasepreservation.common.client.index.filter.BasicSearchFilterParameter;
import com.databasepreservation.common.client.index.filter.Filter;
Expand Down Expand Up @@ -529,6 +530,9 @@ public class ViewerConstants {
public static final String SIARD_RECORD_PREFIX = "record";
public static final String SIARD_LOB_FILE_EXTENSION = ".bin";

public static final String DEFAULT_USERNAME = "admin";
public static final String DEFAULT_FULL_NAME = "admin";

/**
* private constructor
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,56 +152,62 @@ private void buildMenuForUser(final User user) {
AuthenticationService.Util.call((Boolean authenticationIsEnabled) -> {
if (authenticationIsEnabled) {
if (user.isGuest()) {
menu.addItem(FontAwesomeIconManager.loaded(FontAwesomeIconManager.USER, messages.loginLogin()),
(Command) () -> UserLogin.getInstance().login());
MenuBar languagesMenu = new MenuBar(true);

setLanguageMenu(languagesMenu);

MenuItem languagesMenuItem = new MenuItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.GLOBE, selectedLanguage), languagesMenu);
languagesMenuItem.addStyleName("menu-item menu-item-label menu-item-language");
menu.addItem(languagesMenuItem);
buildGuestMenu();
} else {
if (!hideMenu) {
MenuBar subMenu = new MenuBar(true);
subMenu.addItem(messages.loginLogout(), (Command) () -> UserLogin.getInstance().logout());
menu.addItem(FontAwesomeIconManager.loaded(FontAwesomeIconManager.USER, user.getFullName()), subMenu);
if (user.isAdmin()) {
MenuBar administrationMenu = new MenuBar(true);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.ACTIVITY_LOG, messages.activityLogMenuText()),
(Command) HistoryManager::gotoActivityLog);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.NETWORK_WIRED, messages.menuTextForJobs()),
(Command) HistoryManager::gotoJobs);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.PREFERENCES, messages.menuTextForPreferences()),
(Command) HistoryManager::gotoPreferences);
menu.addItem(messages.menuTextForAdministration(), administrationMenu);
}

MenuBar languagesMenu = new MenuBar(true);

setLanguageMenu(languagesMenu);

MenuItem languagesMenuItem = new MenuItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.GLOBE, selectedLanguage), languagesMenu);
languagesMenuItem.addStyleName("menu-item menu-item-label menu-item-language");
menu.addItem(languagesMenuItem);
}
buildDefaultMenu(user, true, hideMenu);
}
} else {
menu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.NEW_UPLOAD, messages.uploadPanelTextForTitle()),
(Command) HistoryManager::gotoNewUpload);
menu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.DATABASES, messages.menusidebar_manageDatabases()),
(Command) HistoryManager::gotoDatabaseList);
buildDefaultMenu(user, false, hideMenu);
}
}).isAuthenticationEnabled();
}

private void buildGuestMenu() {
menu.addItem(FontAwesomeIconManager.loaded(FontAwesomeIconManager.USER, messages.loginLogin()),
(Command) () -> UserLogin.getInstance().login());
MenuBar languagesMenu = new MenuBar(true);

setLanguageMenu(languagesMenu);

MenuItem languagesMenuItem = new MenuItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.GLOBE, selectedLanguage), languagesMenu);
languagesMenuItem.addStyleName("menu-item menu-item-label menu-item-language");
menu.addItem(languagesMenuItem);
}

private void buildDefaultMenu(User user, boolean authenticationIsEnabled, boolean hideMenu) {
if (!hideMenu) {
GWT.log("authentication: " + authenticationIsEnabled);
if (authenticationIsEnabled) {
MenuBar subMenu = new MenuBar(true);
subMenu.addItem(messages.loginLogout(), (Command) () -> UserLogin.getInstance().logout());
menu.addItem(FontAwesomeIconManager.loaded(FontAwesomeIconManager.USER, user.getFullName()), subMenu);
}
if (user.isAdmin()) {
MenuBar administrationMenu = new MenuBar(true);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.ACTIVITY_LOG, messages.activityLogMenuText()),
(Command) HistoryManager::gotoActivityLog);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.NETWORK_WIRED, messages.menuTextForJobs()),
(Command) HistoryManager::gotoJobs);
administrationMenu.addItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.PREFERENCES, messages.menuTextForPreferences()),
(Command) HistoryManager::gotoPreferences);
menu.addItem(messages.menuTextForAdministration(), administrationMenu);
}

MenuBar languagesMenu = new MenuBar(true);

setLanguageMenu(languagesMenu);

MenuItem languagesMenuItem = new MenuItem(
FontAwesomeIconManager.loaded(FontAwesomeIconManager.GLOBE, selectedLanguage), languagesMenu);
languagesMenuItem.addStyleName("menu-item menu-item-label menu-item-language");
menu.addItem(languagesMenuItem);
}
}

private void setLanguageMenu(MenuBar languagesMenu) {
String locale = LocaleInfo.getCurrentLocale().getLocaleName();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand Down Expand Up @@ -364,7 +366,15 @@ public Path getReportPathForValidation(String databaseUUID) {

public List<String> getWhitelistedIPs() {
if (cachedWhitelistedIPs == null) {
cachedWhitelistedIPs = getViewerConfigurationAsList(ViewerConfiguration.PROPERTY_FILTER_ONOFF_WHITELISTED_IPS);
cachedWhitelistedIPs = new ArrayList<>();
for (String whitelistedIP : getViewerConfigurationAsList(ViewerConfiguration.PROPERTY_FILTER_ONOFF_WHITELISTED_IPS)) {
try {
final InetAddress address = InetAddress.getByName(whitelistedIP);
cachedWhitelistedIPs.add(address.getHostAddress());
} catch (UnknownHostException e) {
LOGGER.debug("Invalid IP address from config: {}", whitelistedIP, e);
}
}
}
return cachedWhitelistedIPs;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package com.databasepreservation.common.server.swagger;

import java.time.LocalDate;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;

import io.swagger.annotations.Api;
import org.springframework.http.ResponseEntity;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
Expand All @@ -19,45 +21,40 @@
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.time.LocalDate;

/**
* @author Miguel Guimarães <mguimaraes@keep.pt>
*/

@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket eDesignApi(SwaggerConfigProperties swaggerConfigProperties) {
return new
Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo(swaggerConfigProperties))
.enable(Boolean.parseBoolean(swaggerConfigProperties.getEnabled())).select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).paths(PathSelectors.any()).build().pathMapping("/")
.directModelSubstitute(LocalDate.class,
String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(Boolean.parseBoolean(swaggerConfigProperties.getUseDefaultResponseMessages()))
.enableUrlTemplating(Boolean.parseBoolean(swaggerConfigProperties.getEnableUrlTemplating()));
}
@Bean
public Docket api(SwaggerConfigProperties swaggerConfigProperties) {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo(swaggerConfigProperties))
.enable(Boolean.parseBoolean(swaggerConfigProperties.getEnabled())).select()
.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).paths(PathSelectors.any()).build().pathMapping("/")
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(Boolean.parseBoolean(swaggerConfigProperties.getUseDefaultResponseMessages()))
.enableUrlTemplating(Boolean.parseBoolean(swaggerConfigProperties.getEnableUrlTemplating()));
}

@Bean
UiConfiguration uiConfig(SwaggerConfigProperties swaggerConfigProperties) {
return
UiConfigurationBuilder.builder().deepLinking(Boolean.valueOf(swaggerConfigProperties.getDeepLinking()))
.displayOperationId(Boolean.valueOf(swaggerConfigProperties.getDisplayOperationId()))
.defaultModelsExpandDepth(Integer.valueOf(swaggerConfigProperties.getDefaultModelsExpandDepth()))
.defaultModelExpandDepth(Integer.valueOf(swaggerConfigProperties.getDefaultModelExpandDepth()))
.defaultModelRendering(ModelRendering.EXAMPLE)
.displayRequestDuration(Boolean.valueOf(swaggerConfigProperties.getDisplayRequestDuration()))
.docExpansion(DocExpansion.NONE).filter(Boolean.valueOf(swaggerConfigProperties.getFilter()))
.maxDisplayedTags(Integer.valueOf(swaggerConfigProperties.getMaxDisplayedTags()))
.operationsSorter(OperationsSorter.ALPHA)
.showExtensions(Boolean.valueOf(swaggerConfigProperties.getShowExtensions())).tagsSorter(TagsSorter.ALPHA)
.supportedSubmitMethods(UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS).validatorUrl(null).build();
}
@Bean
UiConfiguration uiConfig(SwaggerConfigProperties swaggerConfigProperties) {
return UiConfigurationBuilder.builder().deepLinking(Boolean.valueOf(swaggerConfigProperties.getDeepLinking()))
.displayOperationId(Boolean.valueOf(swaggerConfigProperties.getDisplayOperationId()))
.defaultModelsExpandDepth(Integer.valueOf(swaggerConfigProperties.getDefaultModelsExpandDepth()))
.defaultModelExpandDepth(Integer.valueOf(swaggerConfigProperties.getDefaultModelExpandDepth()))
.defaultModelRendering(ModelRendering.EXAMPLE)
.displayRequestDuration(Boolean.valueOf(swaggerConfigProperties.getDisplayRequestDuration()))
.docExpansion(DocExpansion.NONE).filter(Boolean.valueOf(swaggerConfigProperties.getFilter()))
.maxDisplayedTags(Integer.valueOf(swaggerConfigProperties.getMaxDisplayedTags()))
.operationsSorter(OperationsSorter.ALPHA)
.showExtensions(Boolean.valueOf(swaggerConfigProperties.getShowExtensions())).tagsSorter(TagsSorter.ALPHA)
.supportedSubmitMethods(UiConfiguration.Constants.DEFAULT_SUBMIT_METHODS).validatorUrl(null).build();
}

private ApiInfo apiInfo(SwaggerConfigProperties swaggerConfigProperties) {
return new ApiInfoBuilder().title(swaggerConfigProperties.getTitle())
.description(swaggerConfigProperties.getDescription()).version(swaggerConfigProperties.getApiVersion()).build();
}
private ApiInfo apiInfo(SwaggerConfigProperties swaggerConfigProperties) {
return new ApiInfoBuilder().title(swaggerConfigProperties.getTitle())
.description(swaggerConfigProperties.getDescription()).version(swaggerConfigProperties.getApiVersion()).build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -231,6 +231,21 @@ private static boolean userIsAdminOrManager(User user) {
return userIsAdmin(user) || userIsManager(user);
}

public static User getNoAuthenticationUser() {
User user = new User(ViewerConstants.DEFAULT_USERNAME);
final List<String> adminRoles = ViewerConfiguration.getInstance()
.getViewerConfigurationAsList(ViewerConfiguration.PROPERTY_AUTHORIZATION_ADMINISTRATORS);

user.setAdmin(true);
user.setDirectRoles(new HashSet<>(adminRoles));
user.setAllRoles(new HashSet<>(adminRoles));

user.setGuest(false);
user.setFullName(ViewerConstants.DEFAULT_FULL_NAME);

return user;
}

public static class Authorization {
private static final Map<Class, String> filterParameterDatabaseUUID;

Expand Down
3 changes: 2 additions & 1 deletion src/main/resources/config/dbvtk-viewer.properties
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,9 @@ ui.authorization.roda.cas.serviceServerName=http://localhost:8888
# server used to check dip permissions
ui.authorization.roda.dip.server=http://localhost:8888
ui.authorization.roda.dip.path=api/v1/dips/{dip_id}

ui.filter.onOff.protectedResourcesAllowAllIPs=true
#ui.filter.onOff.protectedResourcesWhitelistedIP = 127.0.0.1
ui.filter.onOff.protectedResourcesWhitelistedIP = 127.0.0.1
#ui.filter.onOff.protectedResourcesWhitelistedIP = 192.168.1.2

##############################################
Expand Down

0 comments on commit 0dc6daf

Please sign in to comment.