Package org.foo.policy

Source Code of org.foo.policy.Activator

package org.foo.policy;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ConcurrentModificationException;
import java.util.Iterator;
import java.util.List;

import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.condpermadmin.ConditionalPermissionAdmin;
import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
import org.osgi.service.condpermadmin.ConditionalPermissionUpdate;

public class Activator implements BundleActivator
{

    public void start(BundleContext context) throws Exception
    {
      File policyFile = getPolicyFile(context);                            
      List<String> encodedInfos = readPolicyFile(policyFile);
    encodedInfos.add(0, "ALLOW {"                                         
        + "[org.osgi.service.condpermadmin.BundleLocationCondition \""
        + context.getBundle().getLocation() + "\"]"
        + "(java.security.AllPermission \"*\" \"*\")"
        + "} \"Management Agent Policy\"");
      ConditionalPermissionAdmin cpa = getConditionalPermissionAdmin(context);     
      ConditionalPermissionUpdate u = cpa.newConditionalPermissionUpdate()
      List infos = u.getConditionalPermissionInfos();                       
      infos.clear();                                                        
      for (String encodedInfo : encodedInfos) {                             
        infos.add(cpa.newConditionalPermissionInfo(encodedInfo));
      }
      if (!u.commit()) {                                                    
        throw new ConcurrentModificationException(                         
      "Permissions changed during update");
      }
    }

    private File getPolicyFile(BundleContext context) throws BundleException {
        String policyFilePath = context.getProperty("org.foo.policy.file");
        if (policyFilePath == null) {
            policyFilePath = "security.policy";
        }
        File policyFile = new File(policyFilePath);
        if (!policyFile.isFile()) {
            throw new BundleException("No policy file at: " + policyFile.getAbsolutePath());
        }
    return policyFile;
  }
 
  private List<String> readPolicyFile(File policyFile) throws Exception {
        BufferedReader policyReader = null;
        Exception org = null;
        try
        {
            policyReader = new BufferedReader(new FileReader(policyFile));
            List policy = new ArrayList();
            StringBuffer buffer = new StringBuffer();
            for (String input = policyReader.readLine(); input != null; input = policyReader.readLine()) {
                if (!input.trim().startsWith("#")) {
                  buffer.append(input);
                  if (input.contains("}")) {
                    policy.add(buffer.toString());
                    buffer = new StringBuffer();
                  }
        }
            }
      return policy;
        }
        catch (Exception ex) {
            org = ex;
            throw ex;
        }
        finally {
            if (policyReader != null) {
                try
                {
                    policyReader.close();
                }
                catch (Exception ex) {
                    if (org == null) {
                        throw ex;
                    }
                }
            }
        }
    }

    public void stop(BundleContext context) throws Exception
    {
    }

    private ConditionalPermissionAdmin getConditionalPermissionAdmin(BundleContext context) throws BundleException
    {
        ServiceReference ref = context.getServiceReference(ConditionalPermissionAdmin.class.getName());
        ConditionalPermissionAdmin result = null;
        if (ref != null) {
            result = (ConditionalPermissionAdmin) context.getService(ref);
        }
        return result;
    }

}
TOP

Related Classes of org.foo.policy.Activator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.