001package org.kuali.common.httplib.api.model;
002
003import static com.google.common.io.Files.asByteSource;
004import static org.kuali.common.jute.reflect.Reflection.checkNoNulls;
005
006import java.io.File;
007
008import com.fasterxml.jackson.annotation.JsonSetter;
009import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
010import com.google.common.io.ByteSource;
011
012@JsonDeserialize(builder = SecurityContext.Builder.class)
013public final class SecurityContext {
014
015    private final ByteSource clientCertificate;
016    private final String clientCertificateType;
017    private final ByteSource privateKey;
018    private final ByteSource rootCertificate;
019    private final String rootCertificateType;
020
021    private SecurityContext(Builder builder) {
022        this.clientCertificate = builder.clientCertificate;
023        this.privateKey = builder.privateKey;
024        this.rootCertificate = builder.rootCertificate;
025        this.clientCertificateType = builder.clientCertificateType;
026        this.rootCertificateType = builder.rootCertificateType;
027    }
028
029    public static Builder builder() {
030        return new Builder();
031    }
032
033    public static class Builder implements org.apache.commons.lang3.builder.Builder<SecurityContext> {
034
035        private ByteSource clientCertificate;
036        private String clientCertificateType = "X.509";
037        private ByteSource privateKey;
038        private ByteSource rootCertificate;
039        private String rootCertificateType = "X.509";
040
041        public Builder withClientCertificateType(String rootCertificateType) {
042            this.rootCertificateType = rootCertificateType;
043            return this;
044        }
045
046        public Builder withRootCertificateType(String clientCertificateType) {
047            this.clientCertificateType = clientCertificateType;
048            return this;
049        }
050
051        @JsonSetter
052        public Builder withClientCertificate(ByteSource clientCertificate) {
053            this.clientCertificate = clientCertificate;
054            return this;
055        }
056
057        @JsonSetter
058        public Builder withPrivateKey(ByteSource privateKey) {
059            this.privateKey = privateKey;
060            return this;
061        }
062
063        @JsonSetter
064        public Builder withRootCertificate(ByteSource rootCertificate) {
065            this.rootCertificate = rootCertificate;
066            return this;
067        }
068
069        public Builder withRootCertificate(File rootCertificate) {
070            return withRootCertificate(asByteSource(rootCertificate));
071        }
072
073        public Builder withClientCertificate(File clientCertificate) {
074            return withClientCertificate(asByteSource(clientCertificate));
075        }
076
077        public Builder withPrivateKey(File privateKey) {
078            return withPrivateKey(asByteSource(privateKey));
079        }
080
081        @Override
082        public SecurityContext build() {
083            return checkNoNulls(new SecurityContext(this));
084        }
085
086    }
087
088    public ByteSource getClientCertificate() {
089        return clientCertificate;
090    }
091
092    public ByteSource getPrivateKey() {
093        return privateKey;
094    }
095
096    public ByteSource getRootCertificate() {
097        return rootCertificate;
098    }
099
100    public String getClientCertificateType() {
101        return clientCertificateType;
102    }
103
104    public String getRootCertificateType() {
105        return rootCertificateType;
106    }
107
108}