X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FKernelUtils.java;h=81c9242b2589c6114fdcc885ac8b054fa8ff38ce;hb=34130a879d419e1def9526d9d31f8aaa55c950d4;hp=c3297cba87dd5d814ad4385624bf4a065e5aa73d;hpb=63446804f4954bfedd50d8c692bde0fab13aa1ec;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java index c3297cba8..81c9242b2 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/KernelUtils.java @@ -2,15 +2,27 @@ package org.argeo.cms.internal.kernel; import java.io.File; import java.io.IOException; +import java.net.URI; import java.util.Dictionary; +import java.util.Enumeration; import java.util.Hashtable; import java.util.Properties; +import java.util.TreeSet; +import javax.security.auth.Subject; +import javax.security.auth.login.LoginContext; +import javax.security.auth.login.LoginException; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.logging.Log; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.AuthConstants; import org.osgi.framework.BundleContext; -class KernelUtils { - final static String OSGI_INSTANCE_AREA = "osgi.instance.area"; +/** Package utilities */ +class KernelUtils implements KernelConstants { + private final static String OSGI_INSTANCE_AREA = "osgi.instance.area"; + private final static String OSGI_CONFIGURATION_AREA = "osgi.configuration.area"; static Dictionary asDictionary(Properties props) { Hashtable hashtable = new Hashtable(); @@ -20,8 +32,7 @@ class KernelUtils { return hashtable; } - static Dictionary asDictionary(ClassLoader cl, - String resource) { + static Dictionary asDictionary(ClassLoader cl, String resource) { Properties props = new Properties(); try { props.load(cl.getResourceAsStream(resource)); @@ -32,9 +43,120 @@ class KernelUtils { return asDictionary(props); } - static File getOsgiInstanceDir(BundleContext bundleContext) { - return new File(bundleContext.getProperty(OSGI_INSTANCE_AREA) - .substring("file:".length())).getAbsoluteFile(); + static File getExecutionDir(String relativePath) { + File executionDir = new File(getFrameworkProp("user.dir")); + if (relativePath == null) + return executionDir; + try { + return new File(executionDir, relativePath).getCanonicalFile(); + } catch (IOException e) { + throw new CmsException("Cannot get canonical file", e); + } + } + + static File getOsgiInstanceDir() { + return new File(Activator.getBundleContext() + .getProperty(OSGI_INSTANCE_AREA).substring("file:".length())) + .getAbsoluteFile(); + } + + static String getOsgiInstancePath(String relativePath) { + try { + if (relativePath == null) + return getOsgiInstanceDir().getCanonicalPath(); + else + return new File(getOsgiInstanceDir(), relativePath) + .getCanonicalPath(); + } catch (IOException e) { + throw new CmsException("Cannot get instance path for " + + relativePath, e); + } + } + + static File getOsgiConfigurationFile(String relativePath) { + try { + return new File(new URI(Activator.getBundleContext().getProperty( + OSGI_CONFIGURATION_AREA) + + relativePath)).getCanonicalFile(); + } catch (Exception e) { + throw new CmsException("Cannot get configuration file for " + + relativePath, e); + } + } + + static String getFrameworkProp(String key, String def) { + String value = Activator.getBundleContext().getProperty(key); + if (value == null) + return def; + return value; + } + + static String getFrameworkProp(String key) { + return getFrameworkProp(key, null); + } + + // Security + static Subject anonymousLogin() { + Subject subject = new Subject(); + LoginContext lc; + try { + lc = new LoginContext(AuthConstants.LOGIN_CONTEXT_ANONYMOUS, + subject); + lc.login(); + return subject; + } catch (LoginException e) { + throw new CmsException("Cannot login as anonymous", e); + } + } + + // @Deprecated + // static void anonymousLogin(AuthenticationManager authenticationManager) { + // try { + // List anonAuthorities = Collections + // .singletonList(new GrantedAuthorityPrincipal( + // KernelHeader.ROLE_ANONYMOUS)); + // UserDetails anonUser = new User(KernelHeader.USERNAME_ANONYMOUS, + // "", true, true, true, true, anonAuthorities); + // AnonymousAuthenticationToken anonToken = new + // AnonymousAuthenticationToken( + // DEFAULT_SECURITY_KEY, anonUser, anonAuthorities); + // Authentication authentication = authenticationManager + // .authenticate(anonToken); + // SecurityContextHolder.getContext() + // .setAuthentication(authentication); + // } catch (Exception e) { + // throw new CmsException("Cannot authenticate", e); + // } + // } + + // HTTP + static void logRequestHeaders(Log log, HttpServletRequest request) { + if (!log.isDebugEnabled()) + return; + for (Enumeration headerNames = request.getHeaderNames(); headerNames + .hasMoreElements();) { + String headerName = headerNames.nextElement(); + Object headerValue = request.getHeader(headerName); + log.debug(headerName + ": " + headerValue); + } + log.debug(request.getRequestURI()+"\n"); + } + + static void logFrameworkProperties(Log log) { + BundleContext bc = Activator.getBundleContext(); + for (Object sysProp : new TreeSet(System.getProperties() + .keySet())) { + log.debug(sysProp + "=" + bc.getProperty(sysProp.toString())); + } + // String[] keys = { Constants.FRAMEWORK_STORAGE, + // Constants.FRAMEWORK_OS_NAME, Constants.FRAMEWORK_OS_VERSION, + // Constants.FRAMEWORK_PROCESSOR, Constants.FRAMEWORK_SECURITY, + // Constants.FRAMEWORK_TRUST_REPOSITORIES, + // Constants.FRAMEWORK_WINDOWSYSTEM, Constants.FRAMEWORK_VENDOR, + // Constants.FRAMEWORK_VERSION, Constants.FRAMEWORK_STORAGE_CLEAN, + // Constants.FRAMEWORK_LANGUAGE, Constants.FRAMEWORK_UUID }; + // for (String key : keys) + // log.debug(key + "=" + bc.getProperty(key)); } private KernelUtils() {