From 558a5fc4f709620f7520d539b5ddf32cf75d3cf5 Mon Sep 17 00:00:00 2001 From: Valmo Trindade Date: Mon, 19 Aug 2024 03:38:27 -0300 Subject: [PATCH] added get_uid and get_auth_token functions --- .../extract_data/fn_extract_auth_token.sqf | 15 +- addons/main/functions/fn_init.sqf | 45 +--- extensions/armatak/controller.go | 212 ++---------------- extensions/armatak/main.go | 121 +--------- extensions/armatak/service.go | 129 +++-------- 5 files changed, 71 insertions(+), 451 deletions(-) diff --git a/addons/main/functions/extract_data/fn_extract_auth_token.sqf b/addons/main/functions/extract_data/fn_extract_auth_token.sqf index 8279a8f..ecc031d 100644 --- a/addons/main/functions/extract_data/fn_extract_auth_token.sqf +++ b/addons/main/functions/extract_data/fn_extract_auth_token.sqf @@ -1,14 +1,15 @@ -_atak_server_instance_username = missionNamespace getVariable "_atak_server_instance_username"; -_atak_server_instance_password = missionNamespace getVariable "_atak_server_instance_password"; +private _atak_server_instance = missionNamespace getVariable "_atak_server_instance"; +private _atak_server_instance_username = missionNamespace getVariable "_atak_server_instance_username"; +private _atak_server_instance_password = missionNamespace getVariable "_atak_server_instance_password"; -_authentication = [_atak_server_instance_username, _atak_server_instance_password]; +private _authentication = [_atak_server_instance, _atak_server_instance_username, _atak_server_instance_password]; -_atak_server_instance_token = "armatak" callExtension ["get_auth_token", _authentication]; +_atak_server_instance_token = ("armatak" callExtension ["get_auth_token", _authentication]) select 0; -if (_atak_server_instance_token != "") then { - missionName setVariable ["_atak_server_instance_token", _atak_server_instance_token]; +if ((_atak_server_instance_token != "") and !(["error", _atak_server_instance_token, false] call BIS_fnc_inString)) then { + missionNamespace setVariable ["_atak_server_instance_token", _atak_server_instance_token]; - private _warning = format ["ARMATAK
%1", "Authorized"]; + private _warning = format ["ARMATAK
%1", "Authorized"]; [[_warning, 1.5]] call CBA_fnc_notify; } else { private _warning = format ["ARMATAK
%1", "Failed to get Auth Token"]; diff --git a/addons/main/functions/fn_init.sqf b/addons/main/functions/fn_init.sqf index 1a8fe3a..d377076 100644 --- a/addons/main/functions/fn_init.sqf +++ b/addons/main/functions/fn_init.sqf @@ -8,40 +8,17 @@ if (_activated) exitWith { private _warning = format ["ARMATAK
%1", "Connecting..."]; [[_warning, 1.5]] call CBA_fnc_notify; - _atak_fts_address = _logic getVariable "armatak_module_fts_api_instance_address"; - _atak_fts_protocol = _logic getVariable "armatak_module_fts_api_instance_protocol"; - _atak_fts_port = _logic getVariable "armatak_module_fts_api_instance_port"; + _atak_ots_address = _logic getVariable "armatak_module_ots_api_instance_address"; + _atak_ots_protocol = _logic getVariable "armatak_module_ots_api_instance_protocol"; + _atak_ots_port = _logic getVariable "armatak_module_ots_api_instance_port"; - _atak_fts_fulladdress = _atak_fts_protocol + ":" + "/" + "/" + _atak_fts_address + ":" + (str _atak_fts_port); - _atak_fts_bearer_token = _logic getVariable "armatak_module_fts_api_instance_token"; + _atak_ots_fulladdress = _atak_ots_protocol + ":" + "/" + "/" + _atak_ots_address + ":" + (str _atak_ots_port); + _atak_ots_api_username = _logic getVariable "armatak_module_ots_api_instance_username"; + _atak_ots_api_password = _logic getVariable "armatak_module_ots_api_instance_password"; - missionNamespace setVariable ["_atak_server_instance", _atak_fts_fulladdress]; - missionNamespace setVariable ["_atak_server_instance_token", _atak_fts_bearer_token]; + missionNamespace setVariable ["_atak_server_instance", _atak_ots_fulladdress]; + missionNamespace setVariable ["_atak_server_instance_username", _atak_ots_api_username]; + missionNamespace setVariable ["_atak_server_instance_password", _atak_ots_api_password]; - if (isMultiplayer) then { - { - [{ - _uid = _x getVariable "_atak_uid"; - - if (_uid == "") then { - [_x] call armatak_fnc_postGeoObject; - } else { - [_x] call armatak_fnc_putGeoObject; - }; - }, 1, []] call CBA_fnc_addPerFrameHandler; - } forEach playableUnits; - } else { - [{ - _uid = player getVariable "_atak_uid"; - - if (_uid == "") then { - [player] call armatak_fnc_postGeoObject; - } else { - [player] call armatak_fnc_putGeoObject; - }; - }, 1, []] call CBA_fnc_addPerFrameHandler; - }; - - private _warning = format ["ARMATAK
%1", "Connected!"]; - [[_warning, 1.5]] call CBA_fnc_notify; -}; \ No newline at end of file + _atak_server_instance_token = call armatak_fnc_extract_auth_token; +}; diff --git a/extensions/armatak/controller.go b/extensions/armatak/controller.go index 01ecf29..ef3e676 100644 --- a/extensions/armatak/controller.go +++ b/extensions/armatak/controller.go @@ -4,229 +4,51 @@ import ( "github.com/indig0fox/a3go/a3interface" ) -func armatak_controller_ManageAPI_getHelp( +func armatak_controller_get_uid( ctx a3interface.ArmaExtensionContext, data string, ) (string, error) { - - return armatak_service_ManageAPI_getHelp() + return armatak_service_get_uid() } -func armatak_controller_args_ManageAPI_getHelp( +func armatak_controller_args_get_uid( ctx a3interface.ArmaExtensionContext, command string, args []string, ) (string, error) { - return armatak_service_ManageAPI_getHelp() + return armatak_service_get_uid() } -func armatak_controller_ManageGeoObject_postGeoObject( +func armatak_controller_get_auth_token( ctx a3interface.ArmaExtensionContext, - data string, + command string, ) (string, error) { - return "You must use the armatak_fnc_extract_info function as param", nil + return invalidCallExtensionMethod("the auth informations must be provided") } -func armatak_controller_args_ManageGeoObject_postGeoObject( + +func armatak_controller_args_get_auth_token( ctx a3interface.ArmaExtensionContext, command string, args []string, ) (string, error) { sanitazeArgs(args) - return armatak_service_ManageGeoObject_postGeoObject(args) + + return armatak_service_get_auth_token(args) } -func armatak_controller_ManageGeoObject_putGeoObject( +func armatak_controller_post_marker( ctx a3interface.ArmaExtensionContext, data string, ) (string, error) { - return "You must use the armatak_fnc_extract_info function as param", nil + return invalidCallExtensionMethod("post market requires args") } -func armatak_controller_args_ManageGeoObject_putGeoObject( + +func armatak_controller_args_post_marker( ctx a3interface.ArmaExtensionContext, command string, args []string, ) (string, error) { - return armatak_service_ManageGeoObject_putGeoObject(args) -} + sanitazeArgs(args) -func armatak_controller_ManageGeoObject_getGeoObject( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageGeoObject_getGeoObject( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageGeoObject_getGeoObjectByZone( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageGeoObject_getGeoObjectByZone( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageEmergency_postEmergency( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageEmergency_postEmergency( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageEmergency_getEmergency( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageEmergency_getEmergency( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageEmergency_deleteEmergency( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageEmergency_deleteEmergency( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageChat_postChatToAll( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageChat_postChatToAll( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageRoute_postRoute( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageRoute_postRoute( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManagePresence_postPresence( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManagePresence_postPresence( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManagePresence_putPresence( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManagePresence_putPresence( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageVideoStream_postVideoStream( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageVideoStream_postVideoStream( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_Sensor_postDrone( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_Sensor_postDrone( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_Sensor_postSPI( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_Sensor_postSPI( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil -} - -func armatak_controller_ManageKML_postKML( - ctx a3interface.ArmaExtensionContext, - data string, -) (string, error) { - return "a", nil -} -func armatak_controller_args_ManageKML_postKML( - ctx a3interface.ArmaExtensionContext, - command string, - args []string, -) (string, error) { - return "a", nil + return "", nil } diff --git a/extensions/armatak/main.go b/extensions/armatak/main.go index 50be3f8..02f4262 100644 --- a/extensions/armatak/main.go +++ b/extensions/armatak/main.go @@ -18,122 +18,17 @@ func init() { a3interface.SetVersion("0.0.0") a3interface.RegisterErrorChan(a3ErrorChannel) - a3interface.NewRegistration("ping"). - SetDefaultResponse("Pong"). + a3interface.NewRegistration("get_uid"). + SetDefaultResponse("getting uuid4"). SetRunInBackground(false). - SetFunction(armatak_controller_ping_server). + SetFunction(armatak_controller_get_uid). + SetArgsFunction(armatak_controller_args_get_uid). Register() - a3interface.NewRegistration("ManageAPI/getHelp"). - SetDefaultResponse("[Requested Get Help Command, starting background process]"). - SetRunInBackground(true). - SetFunction(armatak_controller_ManageAPI_getHelp). - SetArgsFunction(armatak_controller_args_ManageAPI_getHelp). - Register() - - a3interface.NewRegistration("ManageGeoObject/postGeoObject"). - SetDefaultResponse("[Requested postGeoObject Command, starting background process]"). + a3interface.NewRegistration("get_auth_token"). + SetDefaultResponse("getting uuid4"). SetRunInBackground(false). - SetFunction(armatak_controller_ManageGeoObject_postGeoObject). - SetArgsFunction(armatak_controller_args_ManageGeoObject_postGeoObject). + SetFunction(armatak_controller_get_auth_token). + SetArgsFunction(armatak_controller_args_get_auth_token). Register() - - a3interface.NewRegistration("ManageGeoObject/putGeoObject"). - SetDefaultResponse("[Requested putGeoObject Command, starting background process]"). - SetRunInBackground(true). - SetFunction(armatak_controller_ManageGeoObject_putGeoObject). - SetArgsFunction(armatak_controller_args_ManageGeoObject_putGeoObject). - Register() - /* - a3interface.NewRegistration("ManageGeoObject/getGeoObject"). - SetDefaultResponse("[Requested getGeoObject Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageGeoObject_getGeoObject). - SetArgsFunction(armatak_controller_args_ManageGeoObject_getGeoObject). - Register() - - a3interface.NewRegistration("ManageGeoObject/getGeoObjectByZone"). - SetDefaultResponse("[Requested getGeoObjectByZone Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageGeoObject_getGeoObjectByZone). - SetArgsFunction(armatak_controller_args_ManageGeoObject_getGeoObjectByZone). - Register() - - a3interface.NewRegistration("ManageEmergency/postEmergency"). - SetDefaultResponse("[Requested postEmergency Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageEmergency_postEmergency). - SetArgsFunction(armatak_controller_args_ManageEmergency_postEmergency). - Register() - - a3interface.NewRegistration("ManageEmergency/getEmergency"). - SetDefaultResponse("[Requested getEmergency Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageEmergency_getEmergency). - SetArgsFunction(armatak_controller_args_ManageEmergency_getEmergency). - Register() - - a3interface.NewRegistration("ManageEmergency/deleteEmergency"). - SetDefaultResponse("[Requested deleteEmergency Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageEmergency_deleteEmergency). - SetArgsFunction(armatak_controller_args_ManageEmergency_deleteEmergency). - Register() - - a3interface.NewRegistration("ManageChat/postChatToAll"). - SetDefaultResponse("[Requested postChatToAll Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageChat_postChatToAll). - SetArgsFunction(armatak_controller_args_ManageChat_postChatToAll). - Register() - - a3interface.NewRegistration("ManageRoute/postRoute"). - SetDefaultResponse("[Requested postRoute Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageRoute_postRoute). - SetArgsFunction(armatak_controller_args_ManageRoute_postRoute). - Register() - - a3interface.NewRegistration("ManagePresence/postPresence"). - SetDefaultResponse("[Requested postPresence Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManagePresence_postPresence). - SetArgsFunction(armatak_controller_args_ManagePresence_postPresence). - Register() - - a3interface.NewRegistration("ManagePresence/putPresence"). - SetDefaultResponse("[Requested putPresence Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManagePresence_putPresence). - SetArgsFunction(armatak_controller_args_ManagePresence_putPresence). - Register() - - a3interface.NewRegistration("ManageVideoStream/postVideoStream"). - SetDefaultResponse("[Requested postVideoStream Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageVideoStream_postVideoStream). - SetArgsFunction(armatak_controller_args_ManageVideoStream_postVideoStream). - Register() - - a3interface.NewRegistration("Sensor/postDrone"). - SetDefaultResponse("[Requested postDrone Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_Sensor_postDrone). - SetArgsFunction(armatak_controller_args_Sensor_postDrone). - Register() - - a3interface.NewRegistration("Sensor/postSPI"). - SetDefaultResponse("[Requested postSPI Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_Sensor_postSPI). - SetArgsFunction(armatak_controller_args_Sensor_postSPI). - Register() - - a3interface.NewRegistration("ManageKML/postKML"). - SetDefaultResponse("[Requested postKML Command, starting background process]"). - SetRunInBackground(false). - SetFunction(armatak_controller_ManageKML_postKML). - SetArgsFunction(armatak_controller_args_ManageKML_postKML). - Register() - */ } diff --git a/extensions/armatak/service.go b/extensions/armatak/service.go index 51769f3..0e8acf4 100644 --- a/extensions/armatak/service.go +++ b/extensions/armatak/service.go @@ -1,120 +1,45 @@ package main import ( - "strconv" + "encoding/json" + + "github.com/google/uuid" ) -func armatak_service_ManageAPI_getHelp() (string, error) { - return getRequest("manageAPI/getHelp") // ERROR - returning unsuported on 2.2 FTS (API is returning this, not my fault) +func armatak_service_get_uid() (string, error) { + return uuid.New().String(), nil } -func armatak_service_ManageGeoObject_postGeoObject(args []string) (string, error) { - sanitazeArgs(args) - - latitude, latitudeError := strconv.ParseFloat(args[1], 32) - - if latitudeError != nil { - return "", latitudeError +func armatak_service_get_auth_token(args []string) (string, error) { + authInfo := AuthInfo{ + Username: args[1], + Password: args[2], } - longitude, longitudeError := strconv.ParseFloat(args[2], 32) + response, responseError := postRequestWithoutToken(args[0]+"/api/login?include_auth_token", authInfo) - if longitudeError != nil { - return "", longitudeError + if responseError != nil { + return "", responseError } - bearing, bearingError := strconv.ParseFloat(args[4], 32) + jsonString := string(response) - if bearingError != nil { - bearing = 0 + var data struct { + Meta struct{} `json:"meta"` + Response struct { + CSRFToken string `json:"csrf_token"` + User struct { + AuthenticationToken string `json:"authentication_token"` + } `json:"user"` + } `json:"response"` } - payload := GeoObject{ - UID: args[0], - Longitude: longitude, - Latitude: latitude, - Attitude: args[3], - Bearing: int(bearing), - GeoObject: args[5], - How: "nonCoT", - Name: args[6], - Timeout: 600, + err := json.Unmarshal([]byte(jsonString), &data) + if err != nil { + return "", err } - return postRequest(args[7]+"/ManageGeoObject/postGeoObject", payload, args[8]) + authToken := data.Response.User.AuthenticationToken + + return authToken, nil } - -func armatak_service_ManageGeoObject_putGeoObject(args []string) (string, error) { - sanitazeArgs(args) - - latitude, latitudeError := strconv.ParseFloat(args[1], 32) - - if latitudeError != nil { - return "", latitudeError - } - - longitude, longitudeError := strconv.ParseFloat(args[2], 32) - - if longitudeError != nil { - return "", longitudeError - } - - bearing, bearingError := strconv.ParseFloat(args[4], 32) - - if bearingError != nil { - bearing = 0 - } - - uid := "" - - if args[0] != "" { - uid = args[0] - } - - payload := GeoObject{ - UID: uid, - Longitude: longitude, - Latitude: latitude, - Attitude: args[3], - Bearing: int(bearing), - GeoObject: args[5], - How: "nonCoT", - Name: args[6], - Timeout: 600, - } - - return putRequest(args[7]+"/ManageGeoObject/putGeoObject", payload, args[8]) -} - -func armatak_service_ManageGeoObject_getGeoObject() {} - -func armatak_service_ManageGeoObject_getGeoObjectByZone() {} - -func armatak_service_ManageEmergency_postEmergency() {} - -func armatak_service_ManageEmergency_getEmergency() {} - -func armatak_service_ManageEmergency_deleteEmergency() {} - -func armatak_service_ManageChat_postChatToAll(args []string) (string, error) { - payload := Message{ - Message: args[0], - Sender: "ARMATAK", - } - - return postRequest(args[1]+"/ManageChat/postChatToAll", payload, args[2]) -} - -func armatak_service_ManageRoute_postRoute() {} - -func armatak_service_ManagePresence_postPresence() {} - -func armatak_service_ManagePresence_putPresence() {} - -func armatak_service_ManageVideoStream_postVideoStream() {} - -func armatak_service_Sensor_postDrone() {} - -func armatak_service_Sensor_postSPI() {} - -func armatak_service_ManageKML_postKML() {}