/*
* Copyright 2012 Juergen Groothues
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.groothues.mysaml.impl;
import java.util.Collections;
import java.util.Map;
import org.w3c.dom.Document;
import de.groothues.mysaml.SamlContext;
import de.groothues.mysaml.assertion.AssertionBuilder;
import de.groothues.mysaml.assertion.AssertionType;
import de.groothues.mysaml.assertion.AudienceRestrictionBuilder;
import de.groothues.mysaml.assertion.AuthnContextBuilder;
import de.groothues.mysaml.assertion.AuthnStatementBuilder;
import de.groothues.mysaml.assertion.ConditionsBuilder;
import de.groothues.mysaml.assertion.IssuerBuilder;
import de.groothues.mysaml.assertion.PropertyKeys;
import de.groothues.mysaml.assertion.SignedAssertionBuilder;
import de.groothues.mysaml.assertion.SubjectBuilder;
import de.groothues.mysaml.assertion.SubjectConfirmationBuilder;
import de.groothues.mysaml.assertion.SubjectConfirmationDataBuilder;
import de.groothues.mysaml.assertion.SubjectNameIDBuilder;
import de.groothues.mysaml.assertion.impl.AssertionBuilderImpl;
import de.groothues.mysaml.assertion.impl.AudienceRestrictionBuilderImpl;
import de.groothues.mysaml.assertion.impl.AuthnContextBuilderImpl;
import de.groothues.mysaml.assertion.impl.AuthnStatementBuilderImpl;
import de.groothues.mysaml.assertion.impl.ConditionsBuilderImpl;
import de.groothues.mysaml.assertion.impl.IssuerBuilderImpl;
import de.groothues.mysaml.assertion.impl.SignedAssertionBuilderImpl;
import de.groothues.mysaml.assertion.impl.SubjectBuilderImpl;
import de.groothues.mysaml.assertion.impl.SubjectConfirmationBuilderImpl;
import de.groothues.mysaml.assertion.impl.SubjectConfirmationDataBuilderImpl;
import de.groothues.mysaml.assertion.impl.SubjectNameIDBuilderImpl;
import de.groothues.mysaml.protocol.ResponseBuilder;
import de.groothues.mysaml.protocol.impl.ResponseBuilderImpl;
import de.groothues.mysaml.signature.DocumentSigner;
import de.groothues.mysaml.signature.SignatureKeyStore;
import de.groothues.mysaml.signature.SignatureTrustStore;
import de.groothues.mysaml.signature.impl.DocumentSignerImpl;
import de.groothues.mysaml.signature.impl.SignatureKeyStoreImpl;
import de.groothues.mysaml.signature.impl.SignatureTrustStoreImpl;
import de.groothues.mysaml.validator.Validator;
import de.groothues.mysaml.validator.impl.AssertionAgeValidator;
import de.groothues.mysaml.validator.impl.AssertionAudienceValidator;
import de.groothues.mysaml.validator.impl.AssertionValidityPeriodValidator;
import de.groothues.mysaml.validator.impl.SigatureValidator;
public class SamlContextImpl implements SamlContext, PropertyKeys {
private static final String DEFAULT_PROPERTIES_FILE = "samlDefault.properties";
private Map<String, String> properties;
private AssertionBuilder assertionBuilder;
private SignedAssertionBuilder signedAssertionBuilder;
private IssuerBuilder issuerBuilder;
private SubjectBuilder subjectBuilder;
private SubjectNameIDBuilder nameIDBuilder;
private SubjectConfirmationBuilder subjectConfirmationBuilder;
private SubjectConfirmationDataBuilder subjectConfirmationDataBuilder;
private ConditionsBuilder conditionsBuilder;
private AudienceRestrictionBuilder audienceRestrictionBuilder;
private AuthnStatementBuilder authnStatementBuilder;
private AuthnContextBuilder authnContextBuilder;
private DocumentSigner documentSigner;
private Validator<Document> documentValidator;
private SignatureKeyStoreImpl signatureKeyStore;
private SignatureTrustStore signatureTrustStore;
private ResponseBuilder responseBuilder;
private Validator<AssertionType> assertionAgeValidator;
private Validator<AssertionType> assertionValidityPeriodValidator;
private Validator<AssertionType> assertionAudienceValidator;
public SamlContextImpl() {
this(null);
}
public SamlContextImpl(Map<String, String> overwriteProperties) {
Map<String, String> defaultProperties = PropertiesHelper.toStringMap(
PropertiesHelper.loadProperties(DEFAULT_PROPERTIES_FILE));
if (overwriteProperties != null) {
defaultProperties.putAll(overwriteProperties);
}
this.properties = Collections.unmodifiableMap(defaultProperties);
initializeBuilders();
}
@Override
public Map<String, String> getProperties() {
return this.properties;
}
@Override
public String getProperty(String key) {
return this.properties.get(key);
}
@Override
public AssertionBuilder getAssertionBuilder() {
return this.assertionBuilder;
}
@Override
public SignedAssertionBuilder getSignedAssertionBuilder() {
return this.signedAssertionBuilder;
}
@Override
public ResponseBuilder getResponseBuilder() {
return this.responseBuilder;
}
@Override
public IssuerBuilder getIssuerBuilder() {
return this.issuerBuilder;
}
@Override
public SubjectBuilder getSubjectBuilder() {
return this.subjectBuilder;
}
@Override
public SubjectNameIDBuilder getNameIDBuilder() {
return this.nameIDBuilder;
}
@Override
public SubjectConfirmationBuilder getSubjectConfirmationBuilder() {
return this.subjectConfirmationBuilder;
}
@Override
public SubjectConfirmationDataBuilder getSubjectConfirmationDataBuilder() {
return this.subjectConfirmationDataBuilder;
}
@Override
public ConditionsBuilder getConditionsBuilder() {
return this.conditionsBuilder;
}
@Override
public AudienceRestrictionBuilder getAudienceRestrictionBuilder() {
return this.audienceRestrictionBuilder;
}
@Override
public AuthnStatementBuilder getAuthnStatementBuilder() {
return this.authnStatementBuilder;
}
@Override
public AuthnContextBuilder getAuthnContextBuilder() {
return this.authnContextBuilder;
}
@Override
public DocumentSigner getDocumentSigner() {
return this.documentSigner;
}
@Override
public Validator<Document> getSignatureValidator() {
return this.documentValidator;
}
@Override
public Validator<AssertionType> getAssertionAgeValidator() {
return this.assertionAgeValidator;
}
@Override
public Validator<AssertionType> getAssertionValidityPeriodValidator() {
return this.assertionValidityPeriodValidator;
}
@Override
public Validator<AssertionType> getAssertionAudienceValidator() {
return this.assertionAudienceValidator;
}
@Override
public SignatureKeyStore getSignatureKeyStore() {
return this.signatureKeyStore;
}
@Override
public SignatureTrustStore getSignatureTrustStore() {
return this.signatureTrustStore;
}
private void initializeBuilders() {
this.assertionBuilder = new AssertionBuilderImpl(this);
this.signedAssertionBuilder = new SignedAssertionBuilderImpl(this);
this.responseBuilder = new ResponseBuilderImpl(this);
this.issuerBuilder = new IssuerBuilderImpl(this);
this.subjectBuilder = new SubjectBuilderImpl(this);
this.nameIDBuilder = new SubjectNameIDBuilderImpl(this);
this.subjectConfirmationBuilder = new SubjectConfirmationBuilderImpl(this);
this.subjectConfirmationDataBuilder = new SubjectConfirmationDataBuilderImpl(this);
this.conditionsBuilder = new ConditionsBuilderImpl(this);
this.audienceRestrictionBuilder = new AudienceRestrictionBuilderImpl(this);
this.authnStatementBuilder = new AuthnStatementBuilderImpl(this);
this.authnContextBuilder = new AuthnContextBuilderImpl(this);
this.documentSigner = new DocumentSignerImpl(this);
this.documentValidator = new SigatureValidator(this);
this.assertionAgeValidator = new AssertionAgeValidator(this);
this.assertionValidityPeriodValidator = new AssertionValidityPeriodValidator(this);
this.assertionAudienceValidator = new AssertionAudienceValidator(this);
this.signatureKeyStore = new SignatureKeyStoreImpl(this);
this.signatureTrustStore = new SignatureTrustStoreImpl(this);
}
}