You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
405 lines
19 KiB
405 lines
19 KiB
// Copyright 2020 Siemens Digital Industries Software
|
|
// ==================================================
|
|
// Copyright 2017.
|
|
// Siemens Product Lifecycle Management Software Inc.
|
|
// All Rights Reserved.
|
|
// ==================================================
|
|
// Copyright 2020 Siemens Digital Industries Software
|
|
|
|
/**
|
|
@file
|
|
|
|
Contains common structures and functions for Lifecycle Interoperability Services Framework.
|
|
|
|
*/
|
|
|
|
#ifndef LIS0LISFMWRK_LISFMWRKUTILS_HXX
|
|
#define LIS0LISFMWRK_LISFMWRKUTILS_HXX
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <unidefs.h>
|
|
|
|
#include <base_utils/TcBaseTypes.hxx>
|
|
#include <Lis0lisfmwrk/Lis0ServiceDef.hxx>
|
|
#include <Lis0lisfmwrk/libLis0lisfmwrk_exports.h>
|
|
|
|
|
|
/**
|
|
@defgroup LIS0LISFMWRK Lifecycle Interoperability Services Framework
|
|
@ingroup TC
|
|
|
|
This file contains the definition of common structures and function.
|
|
|
|
@{
|
|
*/
|
|
|
|
namespace lis0lisfmwrk
|
|
{
|
|
class LisfmwrkUtils;
|
|
}
|
|
|
|
/**
|
|
Defines different values that can be used as Request Method
|
|
*/
|
|
enum RequestMethod
|
|
{
|
|
GET, /**< Request Method GET */
|
|
POST, /**< Request Method POST */
|
|
PUT /**< Request Method PUT */
|
|
};
|
|
/**
|
|
Defines different values that can be used as Response Format
|
|
*/
|
|
enum ResponseFormat
|
|
{
|
|
XML, /**< Response Format XML */
|
|
RDF_XML, /**< Response Format RDF+XML */
|
|
OSLC_COMPACT_XML, /**< Response Format OSLC Compact XML */
|
|
JSON /**< Response Format Json */
|
|
};
|
|
|
|
/**
|
|
User Authentication Tokens Information
|
|
*/
|
|
typedef struct UserOAuthTokens
|
|
{
|
|
std::string lis0AccessToken; /**< User Access Token for authentication */
|
|
std::string lis0AccessTokenSecret; /**< User Access Secret Token for authenticaiton */
|
|
std::string lis0RequestToken; /**< User Request Token for authentication */
|
|
std::string lis0RequestTokenSecret; /**< User Request Secret Token for authentication */
|
|
} UserTokens;
|
|
|
|
/**
|
|
Http request input
|
|
*/
|
|
|
|
typedef struct HttpRequestInput
|
|
{
|
|
std::string url; /**< URL to be requested */
|
|
RequestMethod method; /**< Http Request Method */
|
|
std::string postData; /**< Request Body for Post Data */
|
|
bool isAuthRequired; /**< Checks user authentication is required or not */
|
|
std::string consumerKey; /**< ConsumerKey for authentication */
|
|
std::string consumerSecret; /**< Consumer Secret key for authentication */
|
|
std::string tokenKey; /**< Token Key for authentication */
|
|
std::string tokenSecret; /**< Token Secret key for authentication */
|
|
std::string cookieStr; /**< Domain of Service Provider */
|
|
std::map<std::string, std::string> headers; /**< Request Header for Http Request */
|
|
|
|
} HttpRequestInputS;
|
|
|
|
/**
|
|
Service provider information
|
|
*/
|
|
typedef struct ServiceProviderInfo
|
|
{
|
|
std::string providerUrl; /**< URL of service provider */
|
|
std::string providerName; /**< Name of service provider */
|
|
std::string description; /**< Description of service provider */
|
|
std::vector<std::string> domain; /**< Domain of Service Provider */
|
|
|
|
} ServiceProviderInfoS;
|
|
|
|
/**
|
|
Service Provider Catalog Information
|
|
*/
|
|
|
|
typedef struct ServiceProviderCatalogInfoExtend : ServiceProviderCatalogInfo
|
|
{
|
|
std::vector <std::string> catalogDomain; /**< Domain of Service Provider Catalog */
|
|
|
|
} LIS_service_catalog_info_extend_t;
|
|
|
|
/**
|
|
* Root Services response information
|
|
*/
|
|
|
|
typedef struct RootServiceResponseExtend : RootServiceResponseInfo
|
|
{
|
|
std::vector<LIS_service_catalog_info_t> catalogList; /**< Array of catalogs */
|
|
LIS_Oauth_info_s oauthInfo; /**< OAuth information */
|
|
} LIS_rootservice_response_extend_t;
|
|
|
|
/**
|
|
* Delegated Dialog information
|
|
*/
|
|
typedef struct LIS_delegated_dialog_info_extend_s:LIS_delegated_dialog_info_s
|
|
{
|
|
std::string domain; /**< Domain of Delegated Dialog */
|
|
} LIS_delegated_dialog_info_extend_t;
|
|
|
|
/**
|
|
* Factory Service information
|
|
*/
|
|
typedef struct LIS_factory_service_info_extend_s:LIS_factory_service_info_s
|
|
{
|
|
std::string domain; /**< Domain for Factory Service */
|
|
} LIS_factory_service_info_extend_t;
|
|
|
|
/**
|
|
* Service response information
|
|
*/
|
|
typedef struct ServiceResponseInfoExtend
|
|
{
|
|
std::vector<LIS_delegated_dialog_info_extend_t> dialogList; /**< Array of creation dialogs */
|
|
std::vector<LIS_factory_service_info_extend_t> factoryServiceList; /**< Array of factory service */
|
|
} LIS_service_info_extend_t;
|
|
|
|
|
|
class LIS0LISFMWRK_API lis0lisfmwrk::LisfmwrkUtils
|
|
{
|
|
public:
|
|
/**
|
|
Creates request input information from a given HTTP URL.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>LIS0LISFMWRK_url_use_wrongformat if @p url provided URL is not properly formatted.
|
|
<li>#LIS0LISFMWRK_input_request_body_empty if the request body in @p postData is invalid.
|
|
<li>#CXPOM_invalid_tag if @p userAuthentication is not a valid User.
|
|
</ul>
|
|
*/
|
|
static int createHttpRequestInput( const std::string &url, /**< (I) The HTTP URL */
|
|
const RequestMethod method, /**< (I) The request method type */
|
|
const std::string &postData, /**< (I) The request body of POST request */
|
|
const tag_t userAuthentication, /**< (I) The User Authentication */
|
|
const ResponseFormat &format, /**< (I) The response format for a given URL */
|
|
HttpRequestInputS *requestInput /**< (O) The output request by a given HTTP URL */
|
|
);
|
|
/**
|
|
Retrieves the response and timestamp of authorization by a given HTTP connection URL.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_url_not_authorized if @p isRequestTokenUrl url cannot be accessed because of authorization issues.
|
|
<li>#LIS0LISFMWRK_url_cannot_resolve_host if the host cannot be extracted from @p isRequestTokenUrl.
|
|
<br/>Please check that the provided URL is correct
|
|
<li>#LIS0LISFMWRK_url_use_wrongformat if @p isRequestTokenUrl is not properly formatted.
|
|
<li>#LIS0LISFMWRK_input_request_body_empty if the request body in @p requestInput is invalid.
|
|
</ul>
|
|
*/
|
|
static int requestHttps( const bool isRequestTokenUrl, /**< (I) Specifies if this HTTP Request is authorizised.*/
|
|
const HttpRequestInputS &requestInput, /**< (I) The input HTTP URL*/
|
|
std::string& responseString, /**< (O) The response of requested HTPP URL */
|
|
long &responseCode, /**< (O) Status of request URL */
|
|
std::string& eTagString, /**< (O) TimeStamp of authorization */
|
|
int getResponseHeader=0 /**< (I) Response header with etag */
|
|
);
|
|
/**
|
|
Retrieves the response from a given HTTP Request Input .
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_input_request_body_empty if the request body in @p requestInput is invalid.
|
|
</ul>
|
|
*/
|
|
static int requestHttps( const HttpRequestInputS &requestInput, /**< (I) The HTTP request. */
|
|
std::string& responseString /**< (O) The response of HTTP request. */
|
|
);
|
|
/**
|
|
Requests an https connection and outputs the response code along with with its timestamp.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_input_request_body_empty if the request body in @p requestInput is invalid.
|
|
</ul>
|
|
*/
|
|
static int requestHttps( const HttpRequestInputS &requestInput, /**< (I) The HTTP Request */
|
|
std::string& responseString, /**< (O) The response of requested HTTP */
|
|
long &responseCode, /**< (O) The response Code of Requested HTTP */
|
|
std::string& eTagString, /**< (O) TimeStamp of request */
|
|
int getResponseHeader=0 /**< (I) The response header with etag */
|
|
);
|
|
/**
|
|
Retrieves the list of service provider catalog and authentication information from a given response content.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseContent is invalid HTTP response.
|
|
<br/>Probably it is not a good OSLC ( Open Services for Lifecycle Collabration ) provider.
|
|
</ul>
|
|
*/
|
|
static int parseRootServiceContent( const std::string& responseContent, /**< (I) The response content of root services */
|
|
LIS_rootservice_response_extend_t &responseInfo /**< (O) The list of service provider catalogs and authentication information */
|
|
);
|
|
/**
|
|
Parses and retrieves the information of catalog services from a given response content.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseContent is invalid HTTP response.
|
|
<br/>Probably it is not a good OSLC provider.
|
|
</ul>
|
|
*/
|
|
static int parseCatalogContent( const std::string& responseContent, /**< (I) The response content of catalog services */
|
|
std::vector<ServiceProviderInfo> &providerInfoList /**< (O) The information of catalog services */
|
|
);
|
|
/**
|
|
Parses and retrieves the list of dialogs of services from a given response content.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseContent is invalid HTTP response.
|
|
<br/>Probably it is not a good OSLC provider.
|
|
</ul>
|
|
*/
|
|
static int parseServiceContent( const std::string& responseContent, /**< (I) The response content of services */
|
|
LIS_service_info_extend_t &serviceInfo /**< (O) The list of dialogs of a given services */
|
|
);
|
|
/**
|
|
Parse and Retrives the information of Resource by a given Response Content.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseContent is invalid HTTP response.
|
|
<br/>Probably it is not a good OSLC provider.
|
|
</ul>
|
|
*/
|
|
static int parseResourceContent( const std::string& responseContent, /**< (I) The response content of ResourceShape. */
|
|
LIS_resource_info_t &resourceInfo /**< (O) The information of resource. */
|
|
);
|
|
/**
|
|
Validates the License Feature Package
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_validate_license_failed if @p licensePackage is not available.
|
|
<br/>Please contact the system administrator.
|
|
</ul>
|
|
*/
|
|
static int validateLicense( const char* licensePackage /**< (I) The License Feature Package */
|
|
);
|
|
/**
|
|
Retrieves the User Authorization URL from a given Service Provider.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p serviceProvider is invalid type.
|
|
</ul>
|
|
*/
|
|
static int getOAuthAuthorizationURL( const tag_t serviceProvider, /**< (I) The service provider tag */
|
|
char** userAuthorizationUrl /**< (O) The user authorization URL */
|
|
);
|
|
/**
|
|
Retrieves the list of Relations from a given Context Object and Remote Object. -- add one more
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p uidContextObject is invalid UID.
|
|
<li>#CXPOM_invalid_tag if @p remoteObjectType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p uidServiceProvider is invalid UID.
|
|
</ul>
|
|
*/
|
|
static int getRelationTypes( const std::string& uidContextObj, /**< (I) The UID of the context object */
|
|
const std::string& remoteObjType, /**< (I) The tag of the remote object */
|
|
const std::string& uidServiceProvider, /**< (I) The UID of the service provider */
|
|
std::vector<std::string>&relationNames /**< (O) The list of relation names */
|
|
);
|
|
/**
|
|
Retrieves the list of Relation Types from a given context object UID, remote object and service provider UID.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p uidContextObject is invalid UID.
|
|
<li>#CXPOM_invalid_tag if @p remoteObjectType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p uidServiceProvider is invalid UID.
|
|
</ul>
|
|
*/
|
|
static int getRelationTypesTags( const std::string& uidContextObj, /**< (I) The UID of the context object */
|
|
const std::string& remoteObjType, /**< (I) The remote object type */
|
|
const std::string& uidServiceProvider, /**< (I) The UID of the Service Provider */
|
|
std::vector< tag_t >&relationNames /**< (O) The list of relation names */
|
|
);
|
|
/**
|
|
Retrieves the list of relations from a given service provider, primary and remote objects.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p serviceProviderType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p primaryObjType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p remoteObjectType is invalid type.
|
|
</ul>
|
|
*/
|
|
static int queryAllRelationTypeRevise2( const tag_t serviceProviderType, /**< (I) The service provider type */
|
|
const tag_t primaryObjType, /**< (I) The primary object type */
|
|
const std::string& remoteObjectType, /**< (I) The remote object type */
|
|
std::vector<tag_t>&relationNames /**< (O) The list of relation names */
|
|
);
|
|
/**
|
|
Checks that the relation names exist for a given service provider, primary and remote objects.
|
|
<br/>It also retrieves the list of Relation types.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p serviceProviderType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p primaryObjType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p remoteObjectType is invalid type.
|
|
</ul>
|
|
*/
|
|
static int queryAllRelationTypeRevise( const tag_t serviceProviderType, /**< (I) The service provider type */
|
|
const tag_t primaryObjType, /**< (I) The primary object type */
|
|
const std::string &remoteObjectType, /**< (I) The remote object type */
|
|
std::vector<tag_t>&relationNames, /**< (O) The list of relation */
|
|
bool& isRelTypeExist /**< (O) The relation type exist */
|
|
);
|
|
/**
|
|
Retrieves the list of supported primary objects from a given service provider type and remote object type.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p serviceProvider is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p remoteObject is invalid type.
|
|
</ul>
|
|
*/
|
|
static int findAllPrimaryObjForRemoteObj( const tag_t serviceProviderType, /**< (I) The service provider */
|
|
const std::string& remoteObjectType, /**< (I) The remote object */
|
|
std::vector<tag_t> &supportedPrimaryObjTypes /**< (O) The list of supported primary object */
|
|
);
|
|
/**
|
|
Retrieves the list of matched primary objects from a given primary type.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#CXPOM_invalid_tag if @p primaryObjType is invalid type.
|
|
<li>#CXPOM_invalid_tag if @p supportedPrimaryObjTypes are invalid types.
|
|
</ul>
|
|
*/
|
|
static int findExactMatchOfPrimaryObjectList( const tag_t primaryObjType, /**< (I) The type tag of primary object */
|
|
const std::vector<tag_t > &supportedPrimaryObjTypes, /**< (I) The list of supported primary object types */
|
|
std::vector<tag_t>& exactListOfprimaryObjTypes /**< (O) The list of exact primary object types */
|
|
);
|
|
|
|
/**
|
|
Retrieves SSO parameters from the rootservice response.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseString has invalid structure.
|
|
</ul>
|
|
*/
|
|
static int getSSOParamsFromRootsvc( const std::string &responseString, /**< (I) Rootservice response string. */
|
|
std::string &ssoAppId, /**< (O) AppID parameter. */
|
|
std::string &ssoSvcUrl /**< (O) Service URL parameter. */ );
|
|
/**
|
|
Retrieves Access,Request and Auhtorization Tokens Url parameters from the rootservice response.
|
|
@returns
|
|
<ul>
|
|
<li>#ITK_ok on success
|
|
<li>#LIS0LISFMWRK_invalid_http_response if @p responseString has invalid structure.
|
|
</ul>
|
|
*/
|
|
static int getAuthorizationURLFromRootServices( const std::string& responseString, /**< (I) Rootservice response string */
|
|
std::string&accessTokenUrl, /**< (0) AccessTokenUrl */
|
|
std::string& requestTokenUrl, /**< (0) RequestTokenUrl */
|
|
std::string& userAuthorizaitonUrl, /**< (0) UserAuthorizationUrl */
|
|
std::string &consumerKeyUrl); /**< (0) ConsumerKeyUrl */
|
|
|
|
private:
|
|
|
|
};
|
|
/** @} */
|
|
#include <Lis0lisfmwrk/libLis0lisfmwrk_undef.h>
|
|
#endif
|