Interface for invoking Salesforce.com REST calls over SSL with OAUTH authentication. This interface is designed to simplify the interaction between mbed devices and salesforce.com web services.
Dependencies: HTTPClient-SSL MbedJSONValue
Diff: SalesforceInterface.h
- Revision:
- 8:47db53cd5884
- Parent:
- 7:97ea5ef906f7
- Child:
- 9:a254fcd904be
--- a/SalesforceInterface.h Sun Sep 21 07:08:51 2014 +0000 +++ b/SalesforceInterface.h Mon Sep 22 04:28:02 2014 +0000 @@ -30,14 +30,25 @@ // verbose debugging #if ENABLE_DEBUG_LOGGING - #define DEBUG(...) { this->logger()->logConsole(__VA_ARGS__); } + #define DEBUG(...) { this->logger()->logConsole(__VA_ARGS__); } #else #define DEBUG(...) #endif // convenience macros - #define RESET_BUFFER(x) memset(x,0,MAX_BUFFER_LENGTH+1) - #define ALLOC_BUFFER(x) char x[MAX_BUFFER_LENGTH+1];RESET_BUFFER(x) + #define DEFINE_BUFFER(x) char x[MAX_BUFFER_LENGTH+1] + #define RESET_BUFFER(x) memset(x,0,MAX_BUFFER_LENGTH+1) + #define ALLOC_BUFFER(x) DEFINE_BUFFER(x);RESET_BUFFER(x) + + #define DEFINE_SML_BUFFER(x) char x[MAX_SMALL_BUFFER_LENGTH+1] + #define RESET_SML_BUFFER(x) memset(x,0,MAX_SMALL_BUFFER_LENGTH+1) + #define ALLOC_SML_BUFFER(x) DEFINE_SML_BUFFER(x);RESET_SML_BUFFER(x) + + // Default salesforce API version (must be in XX.Y format and must be a string) + #define SALESFORCE_API_VERSION_LENGTH 10 + #ifndef SALESFORCE_API_VERSION + #define SALESFORCE_API_VERSION "28.0" + #endif // HTTP Verbs typedef enum { @@ -81,6 +92,8 @@ HTTPResult m_http_status; int m_http_response_code; char m_http_redirection_url[MAX_BUFFER_LENGTH+1]; + char m_salesforce_id[MAX_BUFFER_LENGTH+1]; + char m_salesforce_api[SALESFORCE_API_VERSION_LENGTH]; public: // construction/destruction @@ -91,19 +104,28 @@ void setCredentials(char *username,char *password,char *client_id,char *client_secret); // get our ID structure from Salesforce - char *getSalesforceID(char *output_buffer,int output_buffer_length); - - // invoke REST calls into Salesforce.com - char *invoke(const char *url,char *output_buffer,int output_buffer_len); // defaults to GET - char *invoke(const char *url,const char *input_data,const int input_data_len,char *output_buffer,int output_buffer_len); // defaults to POST with JSON input data type // defaults to GET - char *invoke(const char *url,const InputDataTypes input_type,const char *input_data,const int input_data_len,char *output_buffer,int output_buffer_len); // defaults to POST with variable input data type + char *getSalesforceID(); + bool haveSalesforceID(); + + // set/get our salesforce API version + void setSalesforceAPIVersion(int version); + void setSalesforceAPIVersion(char *version); + char *getSalesforceAPIVersion(); + + // QUERY: into Salesforce.com + char *query(char *query_str,char *output_buffer,int output_buffer_length); + + // raw invocation of REST calls into Salesforce.com + char *invoke(const char *url,char *output_buffer,int output_buffer_len); // defaults to GET + char *invoke(const char *url,const char *input_data,const int input_data_len,char *output_buffer,int output_buffer_len); // defaults to POST with JSON input data type // defaults to GET + char *invoke(const char *url,const InputDataTypes input_type,const char *input_data,const int input_data_len,char *output_buffer,int output_buffer_len); // defaults to POST with variable input data type char *invoke(const char *url,const InputDataTypes input_type,const char *input_data,const int input_data_len,char *output_buffer,int output_buffer_len,const HttpVerb verb); // full fidelity method - - private: + + private: // get our OAUTH Token void checkAndGetOauthToken(); char *getOauthToken(char *output_buffer,int output_buffer_length); - + // convenience accessors ErrorHandler *logger(); HTTPClient *http(); @@ -116,6 +138,15 @@ void resetOauthToken(); void fillOauthToken(char *token); bool validOauthToken(); + + // get the specified URL from our Salesforce ID + char *getSalesforceURL(char *key,char *url_buffer,int url_buffer_length); + + // simple char array replacement (modifies input string!) + void replace(char *str,char orig_char,char new_char); + + // needed to replace substrings within std::string + void replace(string& line, string& oldString, string& newString); }; #endif // _SALESFORCE_INTERFACE_H_ \ No newline at end of file