Skip to main content

mte_core_login

/// <summary>
/// Login to the server.
/// </summary>
/// <param name="clientId">The clientId.</param>
/// <param name="encoderState">The current encoderState.</param>
/// <param name="decoderState">The current decoderState.</param>
public ResponseModel<LoginResposne> LoginToServer(string clientId,
string encoderState,
string decoderState)
{
ResponseModel<LoginResposne> response = new ResponseModel<LoginResposne>
{ Data = new LoginResposne
{ EncoderState = encoderState, DecoderState = decoderState }
};
try
{
//-----------------------------------
// Login first before uploading file
// Use regular MTE
//-----------------------------------
string loginRoute = "api/login";
LoginModel login = new LoginModel
{ Password = "P@ssw0rd!", UserName = "email@eclypses.com" };

//---------------------------------
// Serialize login model and encode
//---------------------------------
string serializedLogin = JsonSerializer.Serialize(login);

//----------------------------------
// Encode outgoing message with MTE
//----------------------------------
MteEnc enc = new MteEnc();
MteStatus encoderStatus = enc.RestoreStateB64(encoderState);
if (encoderStatus != MteStatus.mte_status_success)
{
response.Message = $"Failed to restore MTE Encoder engine. Status: "
+ "{enc.GetStatusName(encoderStatus)} / "
+ "{enc.GetStatusDescription(encoderStatus)}";
response.Success = false;
response.ExceptionUid = Guid.NewGuid().ToString();
response.ResultCode = Constants.RC_MTE_STATE_RETRIEVAL;
return response;
}
string encodeResult = enc.EncodeB64(serializedLogin);

//---------------------------
// Save updated Encoder State
//---------------------------
response.Data.EncoderState = enc.SaveStateB64();

//-------------------
// Perform Login
//-------------------
string loginResponse =
MakeHttpCall($"{Constants.RestAPIName}/api/login", HttpMethod.Post, clientId,
Constants.TextContentType, encodeResult).Result;

//---------------------------------------
// Deserialize the result from login
//---------------------------------------
ResponseModel<string> serverResponse =
JsonSerializer.Deserialize<ResponseModel<string>>
(loginResponse, Constants.JsonOptions);

//--------------
// If error end
//--------------
if (!serverResponse.Success)
{
response.Message = serverResponse.Message;
response.Success = serverResponse.Success;
response.ExceptionUid = serverResponse.ExceptionUid;
response.ResultCode = serverResponse.ResultCode;
return response;
}

//----------------------
// Set jwt/access_token
//----------------------
response.access_token = serverResponse.access_token;

//---------------------------------------------
// Decode the response and resave Decoder State
//---------------------------------------------
MteDec dec = new MteDec();
MteStatus decoderStatus = dec.RestoreStateB64(decoderState);
if (decoderStatus != MteStatus.mte_status_success)
{
response.Message = $"Failed to restore MTE Decoder engine. Status: "
+ "{dec.GetStatusName(decoderStatus)} / "
+ "{dec.GetStatusDescription(decoderStatus)}";
response.Success = false;
response.ExceptionUid = Guid.NewGuid().ToString();
response.ResultCode = Constants.RC_MTE_STATE_RETRIEVAL;
return response;
}
var decodedResult = dec.DecodeStrB64(serverResponse.Data);
Console.WriteLine($"Login response: {decodedResult}");
response.Data.DecoderState = dec.SaveStateB64();
response.Data.LoginMessage = decodedResult;

}
catch (Exception ex)
{
response.Message = $"Exception during login: {ex.Message}";
response.Success = false;
response.ExceptionUid = Guid.NewGuid().ToString();
response.ResultCode = Constants.RC_LOGIN_EXCEPTION;
}
return response;
}