SEBWIN-405: Implemented detection of Moodle session identifier and server disconnection.
This commit is contained in:
parent
22f6e8b664
commit
facc8c9442
6 changed files with 52 additions and 14 deletions
|
@ -10,6 +10,7 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Timers;
|
||||
using CefSharp;
|
||||
using CefSharp.WinForms;
|
||||
|
@ -353,8 +354,7 @@ namespace SafeExamBrowser.Browser
|
|||
var task = manager.VisitAllCookiesAsync();
|
||||
var cookies = task.GetAwaiter().GetResult();
|
||||
var edxLogin = cookies.FirstOrDefault(c => c.Name == "edxloggedin");
|
||||
|
||||
// TODO: MoodleSession
|
||||
var moodleSession = cookies.FirstOrDefault(c => c.Name == "MoodleSession");
|
||||
|
||||
if (edxLogin != default(Cookie))
|
||||
{
|
||||
|
@ -363,9 +363,15 @@ namespace SafeExamBrowser.Browser
|
|||
if (edxSession != default(Cookie) && !sessionCookies.Contains(edxSession.Domain))
|
||||
{
|
||||
sessionCookies.Add(edxSession.Domain);
|
||||
SessionIdentifierDetected?.Invoke(edxSession.Value);
|
||||
Task.Run(() => SessionIdentifierDetected?.Invoke(edxSession.Value));
|
||||
}
|
||||
}
|
||||
|
||||
if (moodleSession != default(Cookie) && !sessionCookies.Contains(moodleSession.Domain))
|
||||
{
|
||||
sessionCookies.Add(moodleSession.Domain);
|
||||
Task.Run(() => SessionIdentifierDetected?.Invoke(moodleSession.Value));
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
|
@ -354,7 +354,6 @@ namespace SafeExamBrowser.Client
|
|||
while (!response.Success)
|
||||
{
|
||||
logger.Error($"Failed to communicate session identifier with server! {response.Message}");
|
||||
// TODO: Check that is running in separat thread (not UI thread!!) or use different mechanism to wait!
|
||||
Thread.Sleep(Settings.Server.RequestAttemptInterval);
|
||||
response = Server.SendSessionIdentifier(identifier);
|
||||
}
|
||||
|
|
|
@ -241,7 +241,7 @@ namespace SafeExamBrowser.Client
|
|||
|
||||
private IOperation BuildServerOperation()
|
||||
{
|
||||
var server = new ServerProxy(context.AppConfig, logger);
|
||||
var server = new ServerProxy(context.AppConfig, ModuleLogger(nameof(ServerProxy)));
|
||||
var operation = new ServerOperation(actionCenter, context, logger, server, taskbar);
|
||||
|
||||
context.Server = server;
|
||||
|
|
|
@ -70,9 +70,9 @@ namespace SafeExamBrowser.Client.Operations
|
|||
logger.Info("Finalizing server...");
|
||||
StatusChanged?.Invoke(TextKey.OperationStatus_FinalizeServer);
|
||||
|
||||
// TODO: Stop sending pings and logs (or in controller?)
|
||||
server.StopConnectivity();
|
||||
// TODO: Stop action center and taskbar notifications
|
||||
|
||||
server.StopConnectivity();
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
@ -19,12 +19,12 @@ namespace SafeExamBrowser.Server.Contracts
|
|||
public interface IServerProxy
|
||||
{
|
||||
/// <summary>
|
||||
/// Attempts to initialize a connection to the server.
|
||||
/// Attempts to initialize a connection with the server.
|
||||
/// </summary>
|
||||
ServerResponse Connect();
|
||||
|
||||
/// <summary>
|
||||
/// TODO
|
||||
/// Terminates a connection with the server.
|
||||
/// </summary>
|
||||
ServerResponse Disconnect();
|
||||
|
||||
|
@ -39,7 +39,7 @@ namespace SafeExamBrowser.Server.Contracts
|
|||
ServerResponse<Uri> GetConfigurationFor(Exam exam);
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the information required to establish a connection with this server.
|
||||
/// Retrieves the information required to establish a connection with the server.
|
||||
/// </summary>
|
||||
ConnectionInfo GetConnectionInfo();
|
||||
|
||||
|
@ -54,7 +54,7 @@ namespace SafeExamBrowser.Server.Contracts
|
|||
void Initialize(string api, string connectionToken, string examId, string oauth2Token, ServerSettings settings);
|
||||
|
||||
/// <summary>
|
||||
/// TODO
|
||||
/// Sends the given user session identifier of a LMS and thus establishes a connection with the server.
|
||||
/// </summary>
|
||||
ServerResponse SendSessionIdentifier(string identifier);
|
||||
|
||||
|
|
|
@ -80,7 +80,23 @@ namespace SafeExamBrowser.Server
|
|||
|
||||
public ServerResponse Disconnect()
|
||||
{
|
||||
return new ServerResponse(false, "TODO!");
|
||||
var authorization = ("Authorization", $"Bearer {oauth2Token}");
|
||||
var contentType = "application/x-www-form-urlencoded";
|
||||
var token = ("SEBConnectionToken", connectionToken);
|
||||
|
||||
var success = TryExecute(HttpMethod.Delete, api.HandshakeEndpoint, out var response, default(string), contentType, authorization, token);
|
||||
var message = ToString(response);
|
||||
|
||||
if (success)
|
||||
{
|
||||
logger.Info("Successfully terminated connection.");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Failed to terminate connection!");
|
||||
}
|
||||
|
||||
return new ServerResponse(success, message);
|
||||
}
|
||||
|
||||
public ServerResponse<IEnumerable<Exam>> GetAvailableExams()
|
||||
|
@ -186,7 +202,24 @@ namespace SafeExamBrowser.Server
|
|||
|
||||
public ServerResponse SendSessionIdentifier(string identifier)
|
||||
{
|
||||
return new ServerResponse(false, "TODO!");
|
||||
var authorization = ("Authorization", $"Bearer {oauth2Token}");
|
||||
var content = $"examId={examId}&seb_user_session_id={identifier}";
|
||||
var contentType = "application/x-www-form-urlencoded";
|
||||
var token = ("SEBConnectionToken", connectionToken);
|
||||
|
||||
var success = TryExecute(HttpMethod.Put, api.HandshakeEndpoint, out var response, content, contentType, authorization, token);
|
||||
var message = ToString(response);
|
||||
|
||||
if (success)
|
||||
{
|
||||
logger.Info("Successfully sent session identifier.");
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Error("Failed to send session identifier!");
|
||||
}
|
||||
|
||||
return new ServerResponse(success, message);
|
||||
}
|
||||
|
||||
public void StartConnectivity()
|
||||
|
@ -352,7 +385,7 @@ namespace SafeExamBrowser.Server
|
|||
try
|
||||
{
|
||||
response = httpClient.SendAsync(request).GetAwaiter().GetResult();
|
||||
logger.Debug($"Request was successful: {request.Method} '{request.RequestUri}' -> {ToString(response)}");
|
||||
logger.Debug($"Completed request: {request.Method} '{request.RequestUri}' -> {ToString(response)}");
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue