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}