org.italiangrid.voms.request.impl.RESTVOMSResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of voms-api-java Show documentation
Show all versions of voms-api-java Show documentation
Java APIs to validate and request VOMS attribute certificates
/**
* Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2012.
*
* 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 org.italiangrid.voms.request.impl;
import org.italiangrid.voms.request.ACDecodingStrategy;
import org.italiangrid.voms.request.VOMSErrorMessage;
import org.italiangrid.voms.request.VOMSWarningMessage;
import org.italiangrid.voms.util.XMLUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
*
* This class is used to parse and represent VOMS server responses
* coming from a RESTful VOMS service.
*
* @author Andrea Ceccanti
* @author Vincenzo Ciaschini
* @author Valerio Venturi
*
*/
public class RESTVOMSResponse implements org.italiangrid.voms.request.VOMSResponse {
private static int ERROR_OFFSET = 1000;
protected Document xmlResponse;
public RESTVOMSResponse(Document res) {
xmlResponse = res;
}
/* (non-Javadoc)
* @see org.glite.voms.contact.VOMSResponseIF#getVersion()
*/
public int getVersion() {
Element versionElement = (Element) xmlResponse.getElementsByTagName("version").item(0);
if (versionElement == null) {
return 0;
}
return Integer.parseInt(versionElement.getFirstChild().getNodeValue());
}
/* (non-Javadoc)
* @see org.glite.voms.contact.VOMSResponseIF#hasErrors()
*/
public boolean hasErrors() {
return (xmlResponse.getElementsByTagName("error").getLength() != 0);
}
/* (non-Javadoc)
* @see org.glite.voms.contact.VOMSResponseIF#hasWarnings()
*/
public boolean hasWarnings() {
return (xmlResponse.getElementsByTagName("warning").getLength() != 0);
}
/* (non-Javadoc)
* @see org.glite.voms.contact.VOMSResponseIF#getAC()
*/
public byte[] getAC() {
Element acElement = (Element) xmlResponse.getElementsByTagName("ac").item(0);
if (acElement == null || !acElement.hasChildNodes())
return null;
String acString = acElement.getFirstChild().getNodeValue();
ACDecodingStrategy acDecodingStrategy = new GoodACDecodingStrategy();
byte[] decodedAc = acDecodingStrategy.decode(acString);
return decodedAc;
}
public VOMSErrorMessage[] errorMessages() {
NodeList nodes = xmlResponse.getElementsByTagName("error");
if (nodes.getLength() == 0)
return null;
VOMSErrorMessage[] result = new VOMSErrorMessage[nodes.getLength()];
for (int i = 0; i < nodes.getLength(); i++) {
Element itemElement = (Element) nodes.item(i);
Element codeElement = (Element) itemElement.getElementsByTagName("code").item(0);
Element messageElement = (Element) itemElement.getElementsByTagName("message").item(0);
String strcode = codeElement.getFirstChild().getNodeValue();
int code;
if (strcode.equals("NoSuchUser"))
code = 1001;
else if (strcode.equals("BadRequest"))
code = 1005;
else if (strcode.equals("SuspendedUser"))
code = 1004;
else
// InternalError
code = 1006;
result[i] = new VOMSErrorMessage(code, messageElement.getFirstChild().getNodeValue());
}
return result;
}
public VOMSWarningMessage[] warningMessages() {
NodeList nodes = xmlResponse.getElementsByTagName("warning");
if (nodes.getLength() == 0)
return null;
VOMSWarningMessage[] result = new VOMSWarningMessage[nodes.getLength()];
for (int i = 0; i < nodes.getLength(); i++) {
Element itemElement = (Element) nodes.item(i);
// Element messageElement = (Element) itemElement.getElementsByTagName("message").item(0);
String message = itemElement.getFirstChild().getNodeValue();
int number;
if (message.contains("validity"))
number = 2;
else if (message.contains("selected"))
number = 1;
else if (message.contains("contains attributes"))
number = 3;
else
number = 4;
if (number < ERROR_OFFSET) {
result[i] = new VOMSWarningMessage(number, message);
}
}
return result;
}
public String getXMLAsString() {
return XMLUtils.documentAsString(xmlResponse);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy