UsernameToken::UsernameToken(SOAPEnvelope& soap, const std::string& username, const std::string& uid, bool mac, int iteration) { header_=soap.Header(); uid_ = uid; iteration_ = iteration; //Get the username username_=username; if(username_.empty()) get_username(username_); salt_ = get_salt(mac); // Apply predefined namespace prefix NS ns; ns["wsse"]=WSSE_NAMESPACE; ns["wsse11"]=WSSE11_NAMESPACE; ns["wsu"]=WSU_NAMESPACE; header_.Namespaces(ns); //Check the arguments if(username_.empty() || salt_.empty()) { std::cerr<<"Username and Salt should not be empty"<<std::endl; header_=XMLNode(); return; } // Insert the related elements XMLNode wsse = get_node(header_,"wsse:Security"); XMLNode ut = get_node(wsse, "wsse:UsernameToken"); if(!uid_.empty()) { ut.NewAttribute("wsse:Id") = uid_; } get_node(ut, "wsse:Username") = username_; get_node(ut, "wsse11:Salt") = salt_; get_node(ut, "wsse11:Iteration") = tostring(iteration); }
bool UNICOREClient::listTargetSystemFactories(std::list< std::pair<URL, ServiceType> >& tsf) { logger.msg(INFO, "Creating and sending an index service query"); PayloadSOAP req(unicore_ns); XMLNode query = req.NewChild("rp:QueryResourceProperties"); XMLNode exp = query.NewChild("rp:QueryExpression"); exp.NewAttribute("Dialect") = "http://www.w3.org/TR/1999/REC-xpath-19991116"; exp = "//*"; PayloadSOAP *resp = NULL; client->process("http://docs.oasis-open.org/wsrf/rpw-2" "/QueryResourceProperties/QueryResourcePropertiesRequest", &req, &resp); if (resp == NULL) { logger.msg(VERBOSE, "There was no SOAP response"); return false; } XMLNodeList memberServices = resp->Body().Path("QueryResourcePropertiesResponse/Entry/MemberServiceEPR"); for (XMLNodeList::iterator it = memberServices.begin(); it != memberServices.end(); it++) { if (((std::string)(*it)["Metadata"]["InterfaceName"]).find("BESFactoryPortType") != std::string::npos) { // it.Metadata.InterfaceName should contain 'BESFactoryPortType'... tsf.push_back(std::pair<URL, ServiceType>(URL((std::string)(*it)["Address"]), COMPUTING)); } } return true; }
UsernameToken::UsernameToken(SOAPEnvelope& soap, const std::string& username, const std::string& password,const std::string& uid, PasswordType pwdtype) { header_=soap.Header(); uid_ = uid; iteration_ = 0; //Get the username username_=username; if(username_.empty()) get_username(username_); //Get the password password_=password; if(password_.empty()) get_password(password_,false); // Apply predefined namespace prefix NS ns; ns["wsse"]=WSSE_NAMESPACE; ns["wsse11"]=WSSE11_NAMESPACE; ns["wsu"]=WSU_NAMESPACE; header_.Namespaces(ns); //Check the arguments if(username_.empty() || password_.empty()) { std::cerr<<"Username and Password should not be empty"<<std::endl; header_=XMLNode(); return; } // Insert the related elements XMLNode wsse = get_node(header_,"wsse:Security"); XMLNode ut = get_node(wsse, "wsse:UsernameToken"); if(!uid_.empty()) { ut.NewAttribute("wsu:Id") = uid_; } get_node(ut, "wsse:Username") = username_; XMLNode passwd_node = get_node(ut, "wsse:Password"); if(pwdtype == PasswordText) { passwd_node.NewAttribute("Type") = passwdtype_ = PASSWORD_TEXT; passwd_node = password_; } else if(pwdtype == PasswordDigest) { passwd_node.NewAttribute("Type") = passwdtype_ = PASSWORD_DIGEST; nonce_ = get_nonce(); get_node(ut, "wsse:Nonce") = nonce_; created_ = Time().str(UTCTime); get_node(ut, "wsu:Created") = created_; //std::cout<<"nonce: "<<nonce_<<"createdtime: "<<created_<<"password: "******"Unsupported password type requested"<<std::endl; header_=XMLNode(); return; } }
bool UNICOREClient::clean(const std::string& jobid) { std::string result, faultstring; logger.msg(INFO, "Creating and sending request to terminate a job"); PayloadSOAP req(unicore_ns); XMLNode op = req.NewChild("a-rex:ChangeActivityStatus"); XMLNode jobref = op.NewChild(XMLNode(jobid)); XMLNode jobstate = op.NewChild("a-rex:NewStatus"); jobstate.NewAttribute("bes-factory:state") = "Finished"; jobstate.NewChild("a-rex:state") = "Deleted"; // Send clean request PayloadSOAP *resp = NULL; if (client) { MCC_Status status = client->process("", &req, &resp); if (resp == NULL) { logger.msg(VERBOSE, "There was no SOAP response"); return false; } } else if (client_entry) { Message reqmsg; Message repmsg; MessageAttributes attributes_req; MessageAttributes attributes_rep; MessageContext context; reqmsg.Payload(&req); reqmsg.Attributes(&attributes_req); reqmsg.Context(&context); repmsg.Attributes(&attributes_rep); repmsg.Context(&context); MCC_Status status = client_entry->process(reqmsg, repmsg); if (!status) { logger.msg(ERROR, "A job cleaning request failed"); return false; } logger.msg(INFO, "A job cleaning request succeed"); if (repmsg.Payload() == NULL) { logger.msg(VERBOSE, "There was no response to a job cleaning request"); return false; } try { resp = dynamic_cast<PayloadSOAP*>(repmsg.Payload()); } catch (std::exception&) {} if (resp == NULL) { logger.msg(ERROR, "The response of a job cleaning request was not " "a SOAP message"); delete repmsg.Payload(); return false; } } else { logger.msg(ERROR, "There is no connection chain configured"); return false; } if (!((*resp)["ChangeActivityStatusResponse"])) { delete resp; XMLNode fs; (*resp)["Fault"]["faultstring"].New(fs); faultstring = (std::string)fs; if (faultstring != "") { logger.msg(ERROR, faultstring); return false; } if (result != "true") { logger.msg(ERROR, "Job termination failed"); return false; } } delete resp; return true; }
bool SOAPSecAttr::Export(SecAttrFormat format,XMLNode &val) const { if(format == UNDEFINED) { } else if(format == ARCAuth) { NS ns; ns["ra"]="http://www.nordugrid.org/schemas/request-arc"; val.Namespaces(ns); val.Name("ra:Request"); XMLNode item = val.NewChild("ra:RequestItem"); if(!object_.empty()) { XMLNode object = item.NewChild("ra:Resource"); object=object_; object.NewAttribute("Type")="string"; object.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/endpoint"; }; if(!action_.empty()) { XMLNode action = item.NewChild("ra:Action"); action=action_; action.NewAttribute("Type")="string"; action.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/operation"; }; if(!context_.empty()) { XMLNode context = item.NewChild("ra:Context").NewChild("ra:ContextAttribute"); context=context_; context.NewAttribute("Type")="string"; context.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/namespace"; }; return true; } else if(format == XACML) { NS ns; ns["ra"]="urn:oasis:names:tc:xacml:2.0:context:schema:os"; val.Namespaces(ns); val.Name("ra:Request"); if(!object_.empty()) { XMLNode object = val.NewChild("ra:Resource"); XMLNode attr = object.NewChild("ra:Attribute"); attr.NewChild("ra:AttributeValue") = object_; attr.NewAttribute("DataType")="xs:string"; attr.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/endpoint"; }; if(!action_.empty()) { XMLNode action = val.NewChild("ra:Action"); XMLNode attr = action.NewChild("ra:Attribute"); attr.NewChild("ra:AttributeValue") = action_; attr.NewAttribute("DataType")="xs:string"; attr.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/operation"; }; if(!context_.empty()) { XMLNode context = val.NewChild("ra:Environment"); XMLNode attr = context.NewChild("ra:Attribute"); attr.NewChild("ra:AttributeValue") = context_; attr.NewAttribute("DataType")="xs:string"; attr.NewAttribute("AttributeId")="http://www.nordugrid.org/schemas/policy-arc/types/soap/namespace"; }; return true; } else { }; return false; }