163 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Function HTTP_Version_Services(RemainingURL)
 | |
| /***********************************************************************************************************************
 | |
| 
 | |
|     This program is proprietary and is not to be used by or disclosed to others, nor is it to be copied without written
 | |
|     permission from SRP Computer Solutions, Inc.
 | |
| 
 | |
|     Name        :   HTTP_Version_Services
 | |
| 
 | |
|     Description :   Handler program for the HTTP Version service module.
 | |
| 
 | |
|     Notes       :   All HTTP web services should include the HTTP_SERVICE_SETUP insert. This will provide several useful
 | |
|                     variables:
 | |
| 
 | |
|                         HTTPMethod              - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
 | |
|                         APIURL                  - The URL for the API entry point (e.g., api.mysite.com/v1).
 | |
|                         SelfURL                 - The URL path representing the current service.
 | |
|                         FullEndPointURL         - The URL submitted by the client. This can be the same or longer than
 | |
|                                                   the SelfURL.
 | |
|                         NextSegment             - The URL segment immediately following the SelfURL (if any). This
 | |
|                                                   could contain the name of the next service or it could contain the
 | |
|                                                   Item ID for the current service (aka resource).
 | |
|                         CurrentServiceHandler   - The name of this stored procedure.
 | |
| 
 | |
|     Parameters  :
 | |
|         RemainingURL    [in] -- The remaining portion of the URL that follows the URL that launched this current
 | |
|                                 service. This information is used in the HTTP_SERVICE_SETUP insert to populate other
 | |
|                                 useful variables (see Notes above).
 | |
|         Response       [out] -- Response to be sent back to the Controller (HTTP_MCP) or requesting procedure. Web API
 | |
|                                 services do not rely upon anything being returned in the response. This is what the
 | |
|                                 various services like SetResponseBody and SetResponseStatus services are for. A response
 | |
|                                 value is only helpful if the developers want to use it for debug purposes.
 | |
| 
 | |
|     History     :   (Date, Initials, Notes)
 | |
|         07/10/17    dmb     Original programmer. - [SRPFW-188]
 | |
| 
 | |
| ***********************************************************************************************************************/
 | |
| 
 | |
| #pragma precomp SRP_PreCompiler
 | |
| 
 | |
| $insert APP_INSERTS
 | |
| $insert HTTP_SERVICE_SETUP
 | |
| $insert HTTP_INSERTS
 | |
| 
 | |
| // Assume the current HTTP method is valid until proven otherwise.
 | |
| ValidMethod     = True$
 | |
| // Assume the current web service is valid until provent otherwise.
 | |
| ValidService    = True$
 | |
| // Assume no HTTP methods are valid until proven otherwise.
 | |
| AllowedMethods  = ''
 | |
| // A list of all services able to be called from this URL.
 | |
| AllowedServices = ''
 | |
| 
 | |
| // Handle the HTTP request as needed.
 | |
| Begin Case
 | |
|     Case RemainingURL _EQC ''
 | |
|         // This means the URL ends with /version.
 | |
|         AllowedMethods  = 'GET,OPTIONS'
 | |
|         Locate HTTPMethod in AllowedMethods using ',' setting MethodPos then
 | |
|             On MethodPos GoSub Get, Options
 | |
|         end else
 | |
|             ValidMethod = False$
 | |
|         end
 | |
| 
 | |
|     Case Otherwise$
 | |
|         ValidService    = False$
 | |
| End Case
 | |
| 
 | |
| // Resolve any invalid conditions with the HTTP request.
 | |
| Begin Case
 | |
|     Case Not(ValidService)
 | |
|         HTTP_Services('SetResponseStatus', 404, NextSegment : ' is not a valid service request within the ' : CurrentServiceHandler : ' module.')
 | |
| 
 | |
|     Case Not(ValidMethod)
 | |
|         HTTP_Services('SetResponseStatus', 405, HTTPMethod : ' is not valid for this service.')
 | |
| 
 | |
|         GoSub SetAllowedMethods
 | |
| End Case
 | |
| 
 | |
| Return Response OR ''
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Service Parameter Options
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| Options BOOLEAN                     = True$, False$
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Web Services
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| // Get
 | |
| //
 | |
| // Returns the version resource.
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| Get:
 | |
| 
 | |
|     Version     = HTTP_Services('GetVersion')
 | |
|     If Error_Services('NoError') then
 | |
|         Swap CRLF$ with @FM in Version
 | |
|         If SRP_JSON(hVersionObj, 'NEW', 'OBJECT') then
 | |
|             SRP_JSON(hVersionObj, 'SETVALUE', 'Version', Version<1>)
 | |
|             SRP_JSON(hVersionObj, 'SETVALUE', 'Date', Field(Version<2>, ' ', 1, 1))
 | |
|             SRP_JSON(hVersionObj, 'SETVALUE', 'Time', Field(Version<2>, ' ', 2, 1))
 | |
|             VersionBody = SRP_JSON(hVersionObj, 'STRINGIFY', 'STYLED')
 | |
|             SRP_JSON(hVersionObj, 'RELEASE')
 | |
|             HTTP_Services('SetResponseStatus', 200)
 | |
|             HTTP_Services('SetResponseBody', VersionBody, False, 'application/json')
 | |
|         end
 | |
|     end
 | |
| 
 | |
| return
 | |
| 
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| // Options
 | |
| //
 | |
| // Sets the appropriate response header fields for an OPTIONS request.
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| Options:
 | |
| 
 | |
|     GoSub SetCommonOptionResponseHeaders
 | |
| 
 | |
| return
 | |
| 
 | |
| 
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| // Internal GoSubs
 | |
| ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| // SetCommonOptionResponseHeaders
 | |
| //
 | |
| // Sets the response headers that will be common for all OPTIONS methods.
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| SetCommonOptionResponseHeaders:
 | |
| 
 | |
|     HTTP_Services('SetResponseHeaderField', 'Access-Control-Allow-Headers', 'authorization', True$)
 | |
|     HTTP_Services('SetResponseHeaderField', 'Access-Control-Allow-Headers', 'x-authorization', True$)
 | |
|     HTTP_Services('SetResponseHeaderField', 'Access-Control-Max-Age', 1728000)
 | |
| 
 | |
|     GoSub SetAllowedMethods
 | |
| 
 | |
| return
 | |
| 
 | |
| 
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| // SetAllowedMethods
 | |
| //
 | |
| // Sets the Allow response header field as appropriate for the requested URL.
 | |
| //----------------------------------------------------------------------------------------------------------------------
 | |
| SetAllowedMethods:
 | |
| 
 | |
|     If AllowedMethods NE '' then
 | |
|         For Each Method in AllowedMethods using ','
 | |
|             HTTP_Services('SetResponseHeaderField', 'Allow', Method, True$)
 | |
|         Next Method
 | |
|     end
 | |
| 
 | |
| return
 |