blob: 49d1744fd3b5968030ae6bcf1b5df67540df075a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you 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 org.apache.knox.gateway.services.security.token;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.knox.gateway.util.JsonUtils;
import com.fasterxml.jackson.annotation.JsonIgnore;
public class TokenMetadata {
public static final String USER_NAME = "userName";
public static final String COMMENT = "comment";
public static final String ENABLED = "enabled";
public static final String PASSCODE = "passcode";
private final Map<String, String> metadataMap = new HashMap<>();
public TokenMetadata(String userName) {
this(userName, null);
}
public TokenMetadata(String userName, String comment) {
this(userName, comment, true);
}
public TokenMetadata(String userName, String comment, boolean enabled) {
saveMetadata(USER_NAME, userName);
saveMetadata(COMMENT, comment);
setEnabled(enabled);
}
private void saveMetadata(String key, String value) {
if (StringUtils.isNotBlank(value)) {
this.metadataMap.put(key, value);
}
}
public TokenMetadata(Map<String, String> metadataMap) {
this.metadataMap.clear();
this.metadataMap.putAll(metadataMap);
}
@JsonIgnore
public Map<String, String> getMetadataMap() {
return new HashMap<String, String>(this.metadataMap);
}
public String getUserName() {
return metadataMap.get(USER_NAME);
}
public String getComment() {
return metadataMap.get(COMMENT);
}
public void setEnabled(boolean enabled) {
saveMetadata(ENABLED, String.valueOf(enabled));
}
public boolean isEnabled() {
return Boolean.parseBoolean(metadataMap.get(ENABLED));
}
public void setPasscode(String passcode) {
saveMetadata(PASSCODE, passcode);
}
@JsonIgnore
public String getPasscode() {
return metadataMap.get(PASSCODE);
}
public String toJSON() {
return JsonUtils.renderAsJsonString(metadataMap);
}
public static TokenMetadata fromJSON(String json) {
final Map<String, String> metadataMap = JsonUtils.getMapFromJsonString(json);
if (metadataMap != null) {
return new TokenMetadata(metadataMap);
}
throw new IllegalArgumentException("Invalid metadata JSON: " + json);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
}