Search in sources :

Example 1 with ResponderType

use of org.xipki.ca.server.mgmt.api.conf.jaxb.ResponderType in project xipki by xipki.

the class CaManagerImpl method exportConf.

@Override
public void exportConf(String zipFilename, List<String> caNames) throws CaMgmtException, IOException {
    ParamUtil.requireNonBlank("zipFilename", zipFilename);
    if (!caSystemSetuped) {
        throw new CaMgmtException("CA system is not initialized yet.");
    }
    zipFilename = IoUtil.expandFilepath(zipFilename);
    if (caNames != null) {
        List<String> tmpCaNames = new ArrayList<>(caNames.size());
        for (String name : caNames) {
            name = name.toLowerCase();
            if (x509cas.containsKey(name)) {
                tmpCaNames.add(name);
            }
        }
        caNames = tmpCaNames;
    } else {
        List<String> tmpCaNames = new ArrayList<>(x509cas.size());
        for (String name : x509cas.keySet()) {
            tmpCaNames.add(name);
        }
        caNames = tmpCaNames;
    }
    File zipFile = new File(zipFilename);
    if (zipFile.exists()) {
        throw new IOException(concat("File ", zipFilename, " exists."));
    }
    File parentFile = zipFile.getParentFile();
    if (parentFile != null && !parentFile.exists()) {
        parentFile.mkdirs();
    }
    CAConfType root = new CAConfType();
    root.setVersion(1);
    ZipOutputStream zipStream = getZipOutputStream(zipFile);
    try {
        Set<String> includeCmpControlNames = new HashSet<>();
        Set<String> includeResponderNames = new HashSet<>();
        Set<String> includeRequestorNames = new HashSet<>();
        Set<String> includeProfileNames = new HashSet<>();
        Set<String> includePublisherNames = new HashSet<>();
        Set<String> includeCrlSignerNames = new HashSet<>();
        Set<String> includeUserNames = new HashSet<>();
        // users
        root.setUsers(new CAConfType.Users());
        List<UserType> users = root.getUsers().getUser();
        // cas
        if (CollectionUtil.isNonEmpty(caNames)) {
            List<CaType> list = new LinkedList<>();
            for (String name : x509cas.keySet()) {
                if (!caNames.contains(name)) {
                    continue;
                }
                CaType jaxb = new CaType();
                jaxb.setName(name);
                Set<String> strs = getAliasesForCa(name);
                if (CollectionUtil.isNonEmpty(strs)) {
                    jaxb.setAliases(createStrings(strs));
                }
                strs = caHasProfiles.get(name);
                if (CollectionUtil.isNonEmpty(strs)) {
                    includeProfileNames.addAll(strs);
                    jaxb.setProfiles(createStrings(strs));
                }
                strs = caHasPublishers.get(name);
                if (CollectionUtil.isNonEmpty(strs)) {
                    includePublisherNames.addAll(strs);
                    jaxb.setPublishers(createStrings(strs));
                }
                // CaHasRequestors
                Set<CaHasRequestorEntry> requestors = caHasRequestors.get(name);
                if (CollectionUtil.isNonEmpty(requestors)) {
                    jaxb.setRequestors(new CaType.Requestors());
                    for (CaHasRequestorEntry m : requestors) {
                        String requestorName = m.getRequestorIdent().getName();
                        includeRequestorNames.add(requestorName);
                        CaHasRequestorType jaxb2 = new CaHasRequestorType();
                        jaxb2.setRequestorName(requestorName);
                        jaxb2.setRa(m.isRa());
                        jaxb2.setProfiles(createStrings(m.getProfiles()));
                        jaxb2.setPermission(m.getPermission());
                        jaxb.getRequestors().getRequestor().add(jaxb2);
                    }
                }
                // CaHasUsers
                List<CaHasUserEntry> caHasUsers = queryExecutor.getCaHasUsersForCa(name, idNameMap);
                if (CollectionUtil.isNonEmpty(caHasUsers)) {
                    jaxb.setUsers(new CaType.Users());
                    List<CaHasUserType> list2 = jaxb.getUsers().getUser();
                    for (CaHasUserEntry m : caHasUsers) {
                        String username = m.getUserIdent().getName();
                        CaHasUserType jaxb2 = new CaHasUserType();
                        jaxb2.setUserName(username);
                        jaxb2.setPermission(m.getPermission());
                        jaxb2.setProfiles(createStrings(m.getProfiles()));
                        list2.add(jaxb2);
                        if (includeUserNames.contains(username)) {
                            continue;
                        }
                        // add also the user to the users
                        UserEntry userEntry = queryExecutor.getUser(username);
                        UserType jaxb3 = new UserType();
                        if (!userEntry.isActive()) {
                            jaxb3.setActive(Boolean.FALSE);
                        }
                        jaxb3.setName(username);
                        jaxb3.setHashedPassword(userEntry.getHashedPassword());
                        users.add(jaxb3);
                        includeUserNames.add(username);
                    }
                }
                X509CaEntry entry = x509cas.get(name).getCaInfo().getCaEntry();
                X509CaInfoType ciJaxb = new X509CaInfoType();
                ciJaxb.setCacertUris(createStrings(entry.getCaCertUris()));
                byte[] certBytes;
                try {
                    certBytes = entry.getCert().getEncoded();
                } catch (CertificateEncodingException ex) {
                    throw new CaMgmtException(concat("could not encode CA certificate ", name));
                }
                ciJaxb.setCert(createFileOrBinary(zipStream, certBytes, concat("files/ca-", name, "-cert.der")));
                if (entry.getCmpControlName() != null) {
                    includeCmpControlNames.add(entry.getCmpControlName());
                    ciJaxb.setCmpcontrolName(entry.getCmpControlName());
                }
                if (entry.getCrlSignerName() != null) {
                    includeCrlSignerNames.add(entry.getCrlSignerName());
                    ciJaxb.setCrlsignerName(entry.getCrlSignerName());
                }
                ciJaxb.setCrlUris(createStrings(entry.getCrlUris()));
                ciJaxb.setDeltacrlUris(createStrings(entry.getDeltaCrlUris()));
                ciJaxb.setDuplicateKey(entry.isDuplicateKeyPermitted());
                ciJaxb.setDuplicateSubject(entry.isDuplicateSubjectPermitted());
                ciJaxb.setExpirationPeriod(entry.getExpirationPeriod());
                if (entry.getExtraControl() != null) {
                    ciJaxb.setExtraControl(createFileOrValue(zipStream, entry.getExtraControl().getEncoded(), concat("files/ca-", name, "-extracontrol.conf")));
                }
                ciJaxb.setKeepExpiredCertDays(entry.getKeepExpiredCertInDays());
                ciJaxb.setMaxValidity(entry.getMaxValidity().toString());
                ciJaxb.setNextCrlNo(entry.getNextCrlNumber());
                ciJaxb.setNumCrls(entry.getNumCrls());
                ciJaxb.setOcspUris(createStrings(entry.getOcspUris()));
                ciJaxb.setPermission(entry.getPermission());
                if (entry.getResponderName() != null) {
                    includeResponderNames.add(entry.getResponderName());
                    ciJaxb.setResponderName(entry.getResponderName());
                }
                ciJaxb.setSaveReq(entry.isSaveRequest());
                ciJaxb.setSignerConf(createFileOrValue(zipStream, entry.getSignerConf(), concat("files/ca-", name, "-signerconf.conf")));
                ciJaxb.setSignerType(entry.getSignerType());
                ciJaxb.setSnSize(entry.getSerialNoBitLen());
                ciJaxb.setStatus(entry.getStatus().getStatus());
                ciJaxb.setValidityMode(entry.getValidityMode().name());
                jaxb.setCaInfo(new CaType.CaInfo());
                jaxb.getCaInfo().setX509Ca(ciJaxb);
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setCas(new CAConfType.Cas());
                root.getCas().getCa().addAll(list);
            }
        }
        // clear the users if the list is empty
        if (users.isEmpty()) {
            root.setUsers(null);
        }
        // cmp controls
        if (CollectionUtil.isNonEmpty(cmpControlDbEntries)) {
            List<CmpcontrolType> list = new LinkedList<>();
            for (String name : cmpControlDbEntries.keySet()) {
                if (!includeCmpControlNames.contains(name)) {
                    continue;
                }
                CmpcontrolType jaxb = new CmpcontrolType();
                CmpControlEntry entry = cmpControlDbEntries.get(name);
                jaxb.setName(name);
                jaxb.setConf(createFileOrValue(zipStream, entry.getConf(), concat("files/cmpcontrol-", name, ".conf")));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setCmpcontrols(new CAConfType.Cmpcontrols());
                root.getCmpcontrols().getCmpcontrol().addAll(list);
            }
        }
        // environments
        Set<String> names = envParameterResolver.allParameterNames();
        if (CollectionUtil.isNonEmpty(names)) {
            List<NameValueType> list = new LinkedList<>();
            for (String name : names) {
                if (ENV_EPOCH.equalsIgnoreCase(name)) {
                    continue;
                }
                NameValueType jaxb = new NameValueType();
                jaxb.setName(name);
                jaxb.setValue(envParameterResolver.getParameter(name));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setEnvironments(new CAConfType.Environments());
                root.getEnvironments().getEnvironment().addAll(list);
            }
        }
        // crlsigners
        if (CollectionUtil.isNonEmpty(crlSignerDbEntries)) {
            List<CrlsignerType> list = new LinkedList<>();
            for (String name : crlSignerDbEntries.keySet()) {
                if (!includeCrlSignerNames.contains(name)) {
                    continue;
                }
                X509CrlSignerEntry entry = crlSignerDbEntries.get(name);
                CrlsignerType jaxb = new CrlsignerType();
                jaxb.setName(name);
                jaxb.setSignerType(entry.getType());
                jaxb.setSignerConf(createFileOrValue(zipStream, entry.getConf(), concat("files/crlsigner-", name, ".conf")));
                jaxb.setSignerCert(createFileOrBase64Value(zipStream, entry.getBase64Cert(), concat("files/crlsigner-", name, ".der")));
                jaxb.setCrlControl(entry.crlControl());
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setCrlsigners(new CAConfType.Crlsigners());
                root.getCrlsigners().getCrlsigner().addAll(list);
            }
        }
        // requestors
        if (CollectionUtil.isNonEmpty(requestorDbEntries)) {
            List<RequestorType> list = new LinkedList<>();
            for (String name : requestorDbEntries.keySet()) {
                if (!includeRequestorNames.contains(name)) {
                    continue;
                }
                RequestorEntry entry = requestorDbEntries.get(name);
                RequestorType jaxb = new RequestorType();
                jaxb.setName(name);
                jaxb.setCert(createFileOrBase64Value(zipStream, entry.getBase64Cert(), concat("files/requestor-", name, ".der")));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setRequestors(new CAConfType.Requestors());
                root.getRequestors().getRequestor().addAll(list);
            }
        }
        // publishers
        if (CollectionUtil.isNonEmpty(publisherDbEntries)) {
            List<PublisherType> list = new LinkedList<>();
            for (String name : publisherDbEntries.keySet()) {
                if (!includePublisherNames.contains(name)) {
                    continue;
                }
                PublisherEntry entry = publisherDbEntries.get(name);
                PublisherType jaxb = new PublisherType();
                jaxb.setName(name);
                jaxb.setType(entry.getType());
                jaxb.setConf(createFileOrValue(zipStream, entry.getConf(), concat("files/publisher-", name, ".conf")));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setPublishers(new CAConfType.Publishers());
                root.getPublishers().getPublisher().addAll(list);
            }
        }
        // profiles
        if (CollectionUtil.isNonEmpty(certprofileDbEntries)) {
            List<ProfileType> list = new LinkedList<>();
            for (String name : certprofileDbEntries.keySet()) {
                if (!includeProfileNames.contains(name)) {
                    continue;
                }
                CertprofileEntry entry = certprofileDbEntries.get(name);
                ProfileType jaxb = new ProfileType();
                jaxb.setName(name);
                jaxb.setType(entry.getType());
                jaxb.setConf(createFileOrValue(zipStream, entry.getConf(), concat("files/certprofile-", name, ".conf")));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setProfiles(new CAConfType.Profiles());
                root.getProfiles().getProfile().addAll(list);
            }
        }
        // sceps
        if (CollectionUtil.isNonEmpty(scepDbEntries)) {
            List<ScepType> list = new LinkedList<>();
            for (String name : scepDbEntries.keySet()) {
                ScepEntry entry = scepDbEntries.get(name);
                String caName = entry.getCaIdent().getName();
                if (!caNames.contains(caName)) {
                    continue;
                }
                String responderName = entry.getResponderName();
                includeResponderNames.add(responderName);
                ScepType jaxb = new ScepType();
                jaxb.setName(name);
                jaxb.setCaName(caName);
                jaxb.setResponderName(responderName);
                jaxb.setProfiles(createStrings(entry.getCertProfiles()));
                jaxb.setControl(entry.getControl());
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setSceps(new CAConfType.Sceps());
                root.getSceps().getScep().addAll(list);
            }
        }
        // responders
        if (CollectionUtil.isNonEmpty(responderDbEntries)) {
            List<ResponderType> list = new LinkedList<>();
            for (String name : responderDbEntries.keySet()) {
                if (!includeResponderNames.contains(name)) {
                    continue;
                }
                ResponderEntry entry = responderDbEntries.get(name);
                ResponderType jaxb = new ResponderType();
                jaxb.setName(name);
                jaxb.setType(entry.getType());
                jaxb.setConf(createFileOrValue(zipStream, entry.getConf(), concat("files/responder-", name, ".conf")));
                jaxb.setCert(createFileOrBase64Value(zipStream, entry.getBase64Cert(), concat("files/responder-", name, ".der")));
                list.add(jaxb);
            }
            if (!list.isEmpty()) {
                root.setResponders(new CAConfType.Responders());
                root.getResponders().getResponder().addAll(list);
            }
        }
        // add the CAConf XML file
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        try {
            CaConf.marshal(root, bout);
        } catch (JAXBException | SAXException ex) {
            LogUtil.error(LOG, ex, "could not marshal CAConf");
            throw new CaMgmtException(concat("could not marshal CAConf: ", ex.getMessage()), ex);
        } finally {
            bout.flush();
        }
        zipStream.putNextEntry(new ZipEntry("caconf.xml"));
        try {
            zipStream.write(bout.toByteArray());
        } finally {
            zipStream.closeEntry();
        }
    } finally {
        zipStream.close();
    }
}
Also used : CaHasUserEntry(org.xipki.ca.server.mgmt.api.CaHasUserEntry) CmpcontrolType(org.xipki.ca.server.mgmt.api.conf.jaxb.CmpcontrolType) NameValueType(org.xipki.ca.server.mgmt.api.conf.jaxb.NameValueType) PublisherType(org.xipki.ca.server.mgmt.api.conf.jaxb.PublisherType) ArrayList(java.util.ArrayList) CaHasRequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasRequestorType) RequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.RequestorType) CaHasRequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasRequestorType) CaType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaType) SAXException(org.xml.sax.SAXException) PublisherEntry(org.xipki.ca.server.mgmt.api.PublisherEntry) CmpControlEntry(org.xipki.ca.server.mgmt.api.CmpControlEntry) ResponderEntry(org.xipki.ca.server.mgmt.api.ResponderEntry) HashSet(java.util.HashSet) JAXBException(javax.xml.bind.JAXBException) CAConfType(org.xipki.ca.server.mgmt.api.conf.jaxb.CAConfType) ResponderType(org.xipki.ca.server.mgmt.api.conf.jaxb.ResponderType) LinkedList(java.util.LinkedList) ChangeScepEntry(org.xipki.ca.server.mgmt.api.x509.ChangeScepEntry) ScepEntry(org.xipki.ca.server.mgmt.api.x509.ScepEntry) File(java.io.File) CaHasUserType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasUserType) UserType(org.xipki.ca.server.mgmt.api.conf.jaxb.UserType) CrlsignerType(org.xipki.ca.server.mgmt.api.conf.jaxb.CrlsignerType) X509CaEntry(org.xipki.ca.server.mgmt.api.x509.X509CaEntry) ScepType(org.xipki.ca.server.mgmt.api.conf.jaxb.ScepType) RequestorEntry(org.xipki.ca.server.mgmt.api.RequestorEntry) CaHasRequestorEntry(org.xipki.ca.server.mgmt.api.CaHasRequestorEntry) ZipEntry(java.util.zip.ZipEntry) X509CrlSignerEntry(org.xipki.ca.server.mgmt.api.x509.X509CrlSignerEntry) ProfileType(org.xipki.ca.server.mgmt.api.conf.jaxb.ProfileType) CertificateEncodingException(java.security.cert.CertificateEncodingException) IOException(java.io.IOException) ByteArrayOutputStream(java.io.ByteArrayOutputStream) CertprofileEntry(org.xipki.ca.server.mgmt.api.CertprofileEntry) CaMgmtException(org.xipki.ca.server.mgmt.api.CaMgmtException) ZipOutputStream(java.util.zip.ZipOutputStream) CaHasUserType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasUserType) X509CaInfoType(org.xipki.ca.server.mgmt.api.conf.jaxb.X509CaInfoType) AddUserEntry(org.xipki.ca.server.mgmt.api.AddUserEntry) UserEntry(org.xipki.ca.server.mgmt.api.UserEntry) CaHasUserEntry(org.xipki.ca.server.mgmt.api.CaHasUserEntry) ChangeUserEntry(org.xipki.ca.server.mgmt.api.ChangeUserEntry) CaHasRequestorEntry(org.xipki.ca.server.mgmt.api.CaHasRequestorEntry)

Example 2 with ResponderType

use of org.xipki.ca.server.mgmt.api.conf.jaxb.ResponderType in project xipki by xipki.

the class CaConf method init.

private void init(CAConfType jaxb, String baseDir, ZipFile zipFile, SecurityFactory securityFactory) throws IOException, InvalidConfException, CaMgmtException {
    // Properties
    if (baseDir != null) {
        properties.put("baseDir", baseDir);
    }
    if (jaxb.getProperties() != null) {
        for (NameValueType m : jaxb.getProperties().getProperty()) {
            String name = m.getName();
            if (properties.containsKey(name)) {
                throw new InvalidConfException("Property " + name + " already defined");
            }
            properties.put(name, m.getValue());
        }
    }
    // CMP controls
    if (jaxb.getCmpcontrols() != null) {
        for (CmpcontrolType m : jaxb.getCmpcontrols().getCmpcontrol()) {
            CmpControlEntry en = new CmpControlEntry(m.getName(), getValue(m.getConf(), zipFile));
            addCmpControl(en);
        }
    }
    // Responders
    if (jaxb.getResponders() != null) {
        for (ResponderType m : jaxb.getResponders().getResponder()) {
            ResponderEntry en = new ResponderEntry(m.getName(), expandConf(m.getType()), getValue(m.getConf(), zipFile), getBase64Binary(m.getCert(), zipFile));
            addResponder(en);
        }
    }
    // Environments
    if (jaxb.getEnvironments() != null) {
        for (NameValueType m : jaxb.getEnvironments().getEnvironment()) {
            addEnvironment(m.getName(), expandConf(m.getValue()));
        }
    }
    // CRL signers
    if (jaxb.getCrlsigners() != null) {
        for (CrlsignerType m : jaxb.getCrlsigners().getCrlsigner()) {
            X509CrlSignerEntry en = new X509CrlSignerEntry(m.getName(), expandConf(m.getSignerType()), getValue(m.getSignerConf(), zipFile), getBase64Binary(m.getSignerCert(), zipFile), expandConf(m.getCrlControl()));
            addCrlSigner(en);
        }
    }
    // Requestors
    if (jaxb.getRequestors() != null) {
        for (RequestorType m : jaxb.getRequestors().getRequestor()) {
            RequestorEntry en = new RequestorEntry(new NameId(null, m.getName()), getBase64Binary(m.getCert(), zipFile));
            addRequestor(en);
        }
    }
    // Users
    if (jaxb.getUsers() != null) {
        for (UserType m : jaxb.getUsers().getUser()) {
            boolean active = (m.isActive() != null) ? m.isActive() : true;
            String password = m.getPassword();
            if (password != null) {
                AddUserEntry en = new AddUserEntry(new NameId(null, m.getName()), active, password);
                addUser(en);
            } else {
                UserEntry en = new UserEntry(new NameId(null, m.getName()), active, m.getHashedPassword());
                addUser(en);
            }
        }
    }
    // Publishers
    if (jaxb.getPublishers() != null) {
        for (PublisherType m : jaxb.getPublishers().getPublisher()) {
            PublisherEntry en = new PublisherEntry(new NameId(null, m.getName()), expandConf(m.getType()), getValue(m.getConf(), zipFile));
            addPublisher(en);
        }
    }
    // CertProfiles
    if (jaxb.getProfiles() != null) {
        for (ProfileType m : jaxb.getProfiles().getProfile()) {
            CertprofileEntry en = new CertprofileEntry(new NameId(null, m.getName()), expandConf(m.getType()), getValue(m.getConf(), zipFile));
            addProfile(en);
        }
    }
    // CAs
    if (jaxb.getCas() != null) {
        for (CaType m : jaxb.getCas().getCa()) {
            String name = m.getName();
            GenSelfIssued genSelfIssued = null;
            X509CaEntry caEntry = null;
            if (m.getCaInfo() != null) {
                X509CaInfoType ci = m.getCaInfo().getX509Ca();
                if (ci.getGenSelfIssued() != null) {
                    String certFilename = null;
                    if (ci.getCert() != null) {
                        if (ci.getCert().getFile() != null) {
                            certFilename = expandConf(ci.getCert().getFile());
                        } else {
                            throw new InvalidConfException("cert.file of CA " + name + " must not be null");
                        }
                    }
                    byte[] csr = getBinary(ci.getGenSelfIssued().getCsr(), zipFile);
                    BigInteger serialNumber = null;
                    String str = ci.getGenSelfIssued().getSerialNumber();
                    if (str != null) {
                        if (str.startsWith("0x") || str.startsWith("0X")) {
                            serialNumber = new BigInteger(str.substring(2), 16);
                        } else {
                            serialNumber = new BigInteger(str);
                        }
                    }
                    genSelfIssued = new GenSelfIssued(ci.getGenSelfIssued().getProfile(), csr, serialNumber, certFilename);
                }
                X509CaUris caUris = new X509CaUris(getStrings(ci.getCacertUris()), getStrings(ci.getOcspUris()), getStrings(ci.getCrlUris()), getStrings(ci.getDeltacrlUris()));
                int exprirationPeriod = (ci.getExpirationPeriod() == null) ? 365 : ci.getExpirationPeriod().intValue();
                int numCrls = (ci.getNumCrls() == null) ? 30 : ci.getNumCrls().intValue();
                caEntry = new X509CaEntry(new NameId(null, name), ci.getSnSize(), ci.getNextCrlNo(), expandConf(ci.getSignerType()), getValue(ci.getSignerConf(), zipFile), caUris, numCrls, exprirationPeriod);
                caEntry.setCmpControlName(ci.getCmpcontrolName());
                caEntry.setCrlSignerName(ci.getCrlsignerName());
                caEntry.setDuplicateKeyPermitted(ci.isDuplicateKey());
                caEntry.setDuplicateSubjectPermitted(ci.isDuplicateSubject());
                if (ci.getExtraControl() != null) {
                    String value = getValue(ci.getExtraControl(), zipFile);
                    if (value != null) {
                        caEntry.setExtraControl(new ConfPairs(value).unmodifiable());
                    }
                }
                int keepExpiredCertDays = (ci.getKeepExpiredCertDays() == null) ? -1 : ci.getKeepExpiredCertDays().intValue();
                caEntry.setKeepExpiredCertInDays(keepExpiredCertDays);
                caEntry.setMaxValidity(CertValidity.getInstance(ci.getMaxValidity()));
                caEntry.setPermission(ci.getPermission());
                caEntry.setResponderName(ci.getResponderName());
                caEntry.setSaveRequest(ci.isSaveReq());
                caEntry.setStatus(CaStatus.forName(ci.getStatus()));
                if (ci.getValidityMode() != null) {
                    caEntry.setValidityMode(ValidityMode.forName(ci.getValidityMode()));
                }
                if (ci.getGenSelfIssued() == null) {
                    X509Certificate caCert;
                    if (ci.getCert() != null) {
                        byte[] bytes = getBinary(ci.getCert(), zipFile);
                        try {
                            caCert = X509Util.parseCert(bytes);
                        } catch (CertificateException ex) {
                            throw new InvalidConfException("invalid certificate of CA " + name, ex);
                        }
                    } else {
                        // extract from the signer configuration
                        ConcurrentContentSigner signer;
                        try {
                            List<String[]> signerConfs = CaEntry.splitCaSignerConfs(getValue(ci.getSignerConf(), zipFile));
                            SignerConf signerConf = new SignerConf(signerConfs.get(0)[1]);
                            signer = securityFactory.createSigner(expandConf(ci.getSignerType()), signerConf, (X509Certificate) null);
                        } catch (ObjectCreationException | XiSecurityException ex) {
                            throw new InvalidConfException("could not create CA signer for CA " + name, ex);
                        }
                        caCert = signer.getCertificate();
                    }
                    caEntry.setCert(caCert);
                }
            }
            List<CaHasRequestorEntry> caHasRequestors = null;
            if (m.getRequestors() != null) {
                caHasRequestors = new LinkedList<>();
                for (CaHasRequestorType req : m.getRequestors().getRequestor()) {
                    CaHasRequestorEntry en = new CaHasRequestorEntry(new NameId(null, req.getRequestorName()));
                    en.setRa(req.isRa());
                    List<String> strs = getStrings(req.getProfiles());
                    if (strs != null) {
                        en.setProfiles(new HashSet<>(strs));
                    }
                    en.setPermission(req.getPermission());
                    caHasRequestors.add(en);
                }
            }
            List<CaHasUserEntry> caHasUsers = null;
            if (m.getUsers() != null) {
                caHasUsers = new LinkedList<>();
                for (CaHasUserType req : m.getUsers().getUser()) {
                    CaHasUserEntry en = new CaHasUserEntry(new NameId(null, req.getUserName()));
                    en.setPermission(req.getPermission());
                    List<String> strs = getStrings(req.getProfiles());
                    if (strs != null) {
                        en.setProfiles(new HashSet<>(strs));
                    }
                    caHasUsers.add(en);
                }
            }
            List<String> aliases = getStrings(m.getAliases());
            List<String> profileNames = getStrings(m.getProfiles());
            List<String> publisherNames = getStrings(m.getPublishers());
            SingleCaConf singleCa = new SingleCaConf(name, genSelfIssued, caEntry, aliases, profileNames, caHasRequestors, caHasUsers, publisherNames);
            addSingleCa(singleCa);
        }
    }
    // SCEPs
    if (jaxb.getSceps() != null) {
        for (ScepType m : jaxb.getSceps().getScep()) {
            String name = m.getName();
            NameId caIdent = new NameId(null, m.getCaName());
            List<String> certProfiles = getStrings(m.getProfiles());
            ScepEntry dbEntry = new ScepEntry(name, caIdent, true, m.getResponderName(), new HashSet<>(certProfiles), m.getControl());
            sceps.put(name, dbEntry);
        }
    }
}
Also used : CmpcontrolType(org.xipki.ca.server.mgmt.api.conf.jaxb.CmpcontrolType) CaHasUserEntry(org.xipki.ca.server.mgmt.api.CaHasUserEntry) NameValueType(org.xipki.ca.server.mgmt.api.conf.jaxb.NameValueType) NameId(org.xipki.ca.api.NameId) PublisherType(org.xipki.ca.server.mgmt.api.conf.jaxb.PublisherType) RequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.RequestorType) CaHasRequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasRequestorType) CertificateException(java.security.cert.CertificateException) CaHasRequestorType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasRequestorType) CaType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaType) PublisherEntry(org.xipki.ca.server.mgmt.api.PublisherEntry) CmpControlEntry(org.xipki.ca.server.mgmt.api.CmpControlEntry) ResponderEntry(org.xipki.ca.server.mgmt.api.ResponderEntry) SignerConf(org.xipki.security.SignerConf) ResponderType(org.xipki.ca.server.mgmt.api.conf.jaxb.ResponderType) X509Certificate(java.security.cert.X509Certificate) ScepEntry(org.xipki.ca.server.mgmt.api.x509.ScepEntry) AddUserEntry(org.xipki.ca.server.mgmt.api.AddUserEntry) BigInteger(java.math.BigInteger) UserType(org.xipki.ca.server.mgmt.api.conf.jaxb.UserType) CaHasUserType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasUserType) CrlsignerType(org.xipki.ca.server.mgmt.api.conf.jaxb.CrlsignerType) X509CaEntry(org.xipki.ca.server.mgmt.api.x509.X509CaEntry) ScepType(org.xipki.ca.server.mgmt.api.conf.jaxb.ScepType) RequestorEntry(org.xipki.ca.server.mgmt.api.RequestorEntry) CaHasRequestorEntry(org.xipki.ca.server.mgmt.api.CaHasRequestorEntry) InvalidConfException(org.xipki.common.InvalidConfException) XiSecurityException(org.xipki.security.exception.XiSecurityException) X509CrlSignerEntry(org.xipki.ca.server.mgmt.api.x509.X509CrlSignerEntry) ProfileType(org.xipki.ca.server.mgmt.api.conf.jaxb.ProfileType) ConfPairs(org.xipki.common.ConfPairs) CertprofileEntry(org.xipki.ca.server.mgmt.api.CertprofileEntry) X509CaUris(org.xipki.ca.server.mgmt.api.x509.X509CaUris) ConcurrentContentSigner(org.xipki.security.ConcurrentContentSigner) ObjectCreationException(org.xipki.common.ObjectCreationException) CaHasUserType(org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasUserType) X509CaInfoType(org.xipki.ca.server.mgmt.api.conf.jaxb.X509CaInfoType) CaHasUserEntry(org.xipki.ca.server.mgmt.api.CaHasUserEntry) AddUserEntry(org.xipki.ca.server.mgmt.api.AddUserEntry) UserEntry(org.xipki.ca.server.mgmt.api.UserEntry) CaHasRequestorEntry(org.xipki.ca.server.mgmt.api.CaHasRequestorEntry)

Aggregations

AddUserEntry (org.xipki.ca.server.mgmt.api.AddUserEntry)2 CaHasRequestorEntry (org.xipki.ca.server.mgmt.api.CaHasRequestorEntry)2 CaHasUserEntry (org.xipki.ca.server.mgmt.api.CaHasUserEntry)2 CertprofileEntry (org.xipki.ca.server.mgmt.api.CertprofileEntry)2 CmpControlEntry (org.xipki.ca.server.mgmt.api.CmpControlEntry)2 PublisherEntry (org.xipki.ca.server.mgmt.api.PublisherEntry)2 RequestorEntry (org.xipki.ca.server.mgmt.api.RequestorEntry)2 ResponderEntry (org.xipki.ca.server.mgmt.api.ResponderEntry)2 UserEntry (org.xipki.ca.server.mgmt.api.UserEntry)2 CaHasRequestorType (org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasRequestorType)2 CaHasUserType (org.xipki.ca.server.mgmt.api.conf.jaxb.CaHasUserType)2 CaType (org.xipki.ca.server.mgmt.api.conf.jaxb.CaType)2 CmpcontrolType (org.xipki.ca.server.mgmt.api.conf.jaxb.CmpcontrolType)2 CrlsignerType (org.xipki.ca.server.mgmt.api.conf.jaxb.CrlsignerType)2 NameValueType (org.xipki.ca.server.mgmt.api.conf.jaxb.NameValueType)2 ProfileType (org.xipki.ca.server.mgmt.api.conf.jaxb.ProfileType)2 PublisherType (org.xipki.ca.server.mgmt.api.conf.jaxb.PublisherType)2 RequestorType (org.xipki.ca.server.mgmt.api.conf.jaxb.RequestorType)2 ResponderType (org.xipki.ca.server.mgmt.api.conf.jaxb.ResponderType)2 ScepType (org.xipki.ca.server.mgmt.api.conf.jaxb.ScepType)2