Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2013 Trillian Mobile AB
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License
   * as published by the Free Software Foundation; either version 2
   * of the License, or (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
  */
 package org.robovm.compiler.target.ios;
 
 import java.io.File;
 import java.util.Date;
 import java.util.List;
 
 
Represents a provisioning profile.
 
 public class ProvisioningProfile implements Comparable<ProvisioningProfile> {
     
     public enum Type {
         Development, AppStore, AdHoc
     }
     
     private static final String HEX_DIGITS = "0123456789ABCDEF";
 
     private final Type type;
     private final File file;
     private final NSDictionary dict;
     private final String uuid;
     private final String name;
     private final String appIdName;
     private final String appIdPrefix;
     private final String appId;
     private final Date creationDate;
     private final Date expirationDate;
     private final NSDictionary entitlements;
     private final List<StringcertFingerprints = new ArrayList<String>();
     
     ProvisioningProfile(File fileNSDictionary dict) {
         this. = file;
         this. = dict;
         this. = dict.objectForKey("UUID").toString();
         this. = dict.objectForKey("Name").toString();
         this. = dict.objectForKey("AppIDName") != null 
                 ? dict.objectForKey("AppIDName").toString() : null;
         this. = ((NSArraydict.objectForKey("ApplicationIdentifierPrefix"))
                 .objectAtIndex(0).toString();
         this. = ((NSDatedict.objectForKey("CreationDate")).getDate();
         this. = ((NSDatedict.objectForKey("ExpirationDate")).getDate();
         this. = (NSDictionarydict.objectForKey("Entitlements");
         this. = this..objectForKey("application-identifier").toString();
         
         for (NSObject o : ((NSArraydict.objectForKey("DeveloperCertificates")).getArray()) {
             NSData data = (NSDatao;
             .add(getCertFingerprint(data.bytes()));
         }
         
         boolean getTaskAllow = ((NSNumber.objectForKey("get-task-allow")).boolValue();
         NSArray provisionedDevices = (NSArraydict.objectForKey("ProvisionedDevices");
         if (getTaskAllow) {
              = .;
         } else if (provisionedDevices != null) {
              = .;
         } else {
              = .;
         }
     }
     
     @Override
    public int compareTo(ProvisioningProfile o) {
        return this..compareToIgnoreCase(o.name);
    }
    
    private static String getCertFingerprint(byte[] certData) {
        try {
            CertificateFactory x509CertFact = CertificateFactory.getInstance("X.509");
            X509Certificate cert = (X509Certificatex509CertFact.generateCertificate(new ByteArrayInputStream(certData));
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            return toHexString(md.digest(cert.getEncoded()));
        } catch (CertificateException e) {
            throw new RuntimeException(e);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }
    
    private static String toHexString(byte bytes[]) {
        StringBuffer buf = new StringBuffer(bytes.length * 2);
        for (int i = 0; i < bytes.length; ++i) {
            buf.append(.charAt((bytes[i] & 0xf0) >> 4));
            buf.append(.charAt(bytes[i] & 0x0f));
        }
        return buf.toString();
    }
    
    public Type getType() {
        return ;
    }
    
    public File getFile() {
        return ;
    }
    public NSDictionary getDict() {
        return ;
    }
    public String getUuid() {
        return ;
    }
    public String getName() {
        return ;
    }
    public String getAppIdName() {
        return ;
    }
    public String getAppIdPrefix() {
        return ;
    }
    public Date getCreationDate() {
        return ;
    }
    public Date getExpirationDate() {
        return ;
    }
    public NSDictionary getEntitlements() {
        return ;
    }
    private static ProvisioningProfile create(File file) {
        InputStream in = null;
        try {
            in = new BufferedInputStream(new FileInputStream(file));
            CMSSignedData data = new CMSSignedData(in);
            byte[] content = (byte[]) data.getSignedContent().getContent();
            NSDictionary dict = (NSDictionary) PropertyListParser.parse(content);
            return new ProvisioningProfile(filedict);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }
    
    public static List<ProvisioningProfilelist() {
        File dir = new File(new File(System.getProperty("user.home")), "Library/MobileDevice/Provisioning Profiles");
        if (!dir.exists() || !dir.isDirectory()) {
            return Collections.emptyList();
        }
        List<ProvisioningProfileresult = new ArrayList<ProvisioningProfile>();
        for (File f : dir.listFiles()) {
            if (f.getName().endsWith(".mobileprovision")) {
                ProvisioningProfile p = create(f);
                if (p.expirationDate.after(new Date())) {
                    result.add(p);
                }
            }
        }
        Collections.sort(result);
        return result;
    }
    public static ProvisioningProfile find(List<ProvisioningProfileprofilesString search) {
        for (ProvisioningProfile p : profiles) {
            if (p.uuid.equals(search) || p.appIdPrefix.equals(search) || p.appIdName != null && p.appIdName.equals(search)
                    || p.name.equals(search)) {
                return p;
            }
        }        
        throw new IllegalArgumentException("No provisioning profile found matching '" + search + "'");
    }
    
    public static ProvisioningProfile find(List<ProvisioningProfileprofilesSigningIdentity signingIdentityString bundleId) {
        return find(profilessigningIdentitybundleIdbundleId);
    }
    
    private static ProvisioningProfile find(List<ProvisioningProfileprofilesSigningIdentity signingIdentityString bundleIdString origBundleId) {
        // Try a direct match first
        for (ProvisioningProfile p : profiles) {
            if (p.appId.equals(p.appIdPrefix + "." + bundleId)) {
                for (String fp : p.certFingerprints) {
                    if (fp.equals(signingIdentity.getFingerprint())) {
                        return p;
                    }
                }
            }
        }
        if (!bundleId.equals("*")) {
            // Try with the last component replaced with a wildcard
            if (bundleId.endsWith(".*")) {
                bundleId = bundleId.substring(0, bundleId.length() - 2);
            }
            int lastDot = bundleId.lastIndexOf('.');
            if (lastDot != -1) {
                bundleId = bundleId.substring(0, lastDot) + ".*";
            } else {
                bundleId = "*";
            }
            return find(profilessigningIdentitybundleIdorigBundleId);
        }
        throw new IllegalArgumentException("No provisioning profile found " 
                + "matching signing identity '" + signingIdentity.getName() 
                + "' and app bundle ID '" + origBundleId + "'");
    }
    
    @Override
    public String toString() {
        return "ProvisioningProfile [type=" +  + ", file=" + 
                + ", uuid=" +  + ", name=" +  + ", appIdName="
                +  + ", appIdPrefix=" +  + ", appId="
                +  + ", creationDate=" + 
                + ", expirationDate=" +  + ", certFingerprints="
                +  + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + (( == null) ? 0 : .hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        ProvisioningProfile other = (ProvisioningProfileobj;
        if ( == null) {
            if (other.uuid != null)
                return false;
        } else if (!.equals(other.uuid))
            return false;
        return true;
    }
    public static void main(String[] args) {
        if (args.length == 0) {
            ..println(list());
        } else if (args.length == 1) {
            ..println(find(list(), args[0]));
        } else {
            ..println(find(list(), SigningIdentity.find(SigningIdentity.list(), args[0]), args[1]));
        }
    }
New to GrepCode? Check out our FAQ X