added LSL2 stored procedures
This commit is contained in:
139
LSL2/STPROC/HTTP_METROLOGY_SERVICES.txt
Normal file
139
LSL2/STPROC/HTTP_METROLOGY_SERVICES.txt
Normal file
@ -0,0 +1,139 @@
|
||||
Function HTTP_Metrology_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_Metrology_Services
|
||||
|
||||
Description : Handler program for the HTTP Metrology service module.
|
||||
|
||||
Notes : All HTTP web services should include the HTTP_SERVICE_SETUP insert. This will provide several useful
|
||||
variables:
|
||||
|
||||
APIURL - The base URL for the API entry point (e.g., api.mysite.com/v1).
|
||||
FullEndPointURL - The URL submitted by the client.
|
||||
HTTPMethod - The HTTP Method (Verb) submitted by the client (e.g., GET, POST, etc.)
|
||||
SelfURL - The URL path representing the current service.
|
||||
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 the currently running BASIC+ 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
|
||||
|
||||
Metadata :
|
||||
@@DEFINE_SERVICES_SIGNATURE(@SERVICE, RemainingURL)
|
||||
@@DEFINE_UNQUOTED_OPTIONS BOOLEAN(True$, False$)
|
||||
|
||||
History : (Date, Initials, Notes)
|
||||
08/19/16 dmb Original programmer. - [IREPIOI-8]
|
||||
|
||||
***********************************************************************************************************************/
|
||||
|
||||
$insert APP_INSERTS
|
||||
$insert HTTP_SERVICE_SETUP
|
||||
$insert HTTP_INSERTS
|
||||
|
||||
Declare subroutine RList
|
||||
Declare function Metrology_Services
|
||||
|
||||
ValidMethod = True$ ; // Assume the HTTP method is valid until proven otherwise.
|
||||
HasGetString = HTTP_Services('GetHTTPGetString') NE ''
|
||||
|
||||
// Some methods are restricted to authorized users only. Get their security level for cross-checking later.
|
||||
Username = Memory_Services('GetValue', 'Username')
|
||||
Security = Xlate('USERS', Username, 'ACCESS_LEVEL', 'X')
|
||||
|
||||
Begin Case
|
||||
Case RemainingURL _EQC ''
|
||||
// This means the URL ends with /metrology.
|
||||
SelfURL = HTTP_Services('GetSelfURL')
|
||||
|
||||
Begin Case
|
||||
Case HTTPMethod _EQC 'OPTIONS' ; GoSub Options
|
||||
Case HTTPMethod _EQC 'POST' ; GoSub Post
|
||||
Case Otherwise$ ; ValidMethod = False$
|
||||
End Case
|
||||
|
||||
Case Otherwise$
|
||||
HTTP_Services('SetResponseStatus', 404, NextSegment : ' is not a valid service request within the ' : CurrentServiceHandler : ' module.')
|
||||
End Case
|
||||
|
||||
If Not(ValidMethod) then
|
||||
HTTP_Services('SetResponseStatus', 405, HTTPMethod : ' is not valid for this service.')
|
||||
|
||||
// These services are always allowed.
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'GET', True$)
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'OPTIONS', True$)
|
||||
|
||||
// These services are only allowed if the service is for a specific item resource.
|
||||
If Len(NextSegment) then
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'POST', True$)
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'DELETE', True$)
|
||||
end
|
||||
|
||||
If Not(HasGetString) AND NextSegment _EQC '' then
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'POST', True$)
|
||||
end
|
||||
end
|
||||
|
||||
If Assigned(Response) else Response = ''
|
||||
|
||||
Return Response
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// Options
|
||||
//
|
||||
// @@DEFINE_SERVICE(Options)
|
||||
//
|
||||
// Sets the appropriate response header fields for an OPTIONS request.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Options:
|
||||
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)
|
||||
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'OPTIONS', True$)
|
||||
HTTP_Services('SetResponseHeaderField', 'Allow', 'POST', True$)
|
||||
return
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
// Post
|
||||
//
|
||||
// @@DEFINE_SERVICE(Post)
|
||||
//
|
||||
// Attempts to create the resource.
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
Post:
|
||||
Body = HTTP_Services('GetHTTPPostString')
|
||||
Body = HTTP_Services('DecodePercentString', Body)
|
||||
// This is to allow a developer to capture the request and response in text files for external inspection.
|
||||
CapturePath = HTTP_Services('GetCapturePath')
|
||||
Declare function RTI_OS_Directory
|
||||
If RTI_OS_Directory('EXISTS', CapturePath) EQ True$ then
|
||||
FileTimeStamp = Oconv(Date(), 'DJS-') : '_' : Oconv(Time(), 'MTS-')
|
||||
BodyFileName = 'Body_@_' : FileTimeStamp : '.txt'
|
||||
OSWrite Body to CapturePath : '\' : BodyFileName
|
||||
end
|
||||
|
||||
Success = Metrology_Services('ImportMetrologyRunData', Body)
|
||||
|
||||
If Success then
|
||||
HTTP_Services('SetResponseStatus', 204, 'Metrology run data was successfully imported.')
|
||||
ResponseBody = '{"status":"204","description":"Metrology run data was successfully imported."}'
|
||||
HTTP_Services('SetResponseBody', ResponseBody, False$, 'text/json')
|
||||
end else
|
||||
HTTP_Services('SetResponseStatus', 500, 'Metrology run data was unsuccessfully imported.')
|
||||
ResponseBody = '{"status":"500","description":"Metrology run data was unsuccessfully imported."}'
|
||||
HTTP_Services('SetResponseBody', ResponseBody, False$, 'text/json')
|
||||
end
|
||||
* Debug
|
||||
return
|
Reference in New Issue
Block a user