loginToCas method

Future<int> loginToCas(
  1. String login,
  2. String password,
  3. String service
)

Fonction permettant de se connecter au CAS String login : Login de l'utilisatuer String password : Mot de passe de l'utilisateur String service : Service vers lequel effectuer la redirection

Implementation

Future<int> loginToCas(String login,String password, String service) async {
  DateTime startDate = DateTime.now();
  if (!casServiceENUM.containsKey(service)){
    logger("Service passed in parameters isn't supported or doesn't exists");
    return -1;
  }
  String casServiceEndpoint = casEndpoint + SERVICE_PARAM + casServiceENUM[service]!;
  Uri cseUri = Uri.parse(casServiceEndpoint); // cseURI stands for CasServiceEndpoitURI;
  Response loginPage = await session.get(
    cseUri,
    headers: headers
  );
  if (loginPage.statusCode != 200){
    logger("Failed to recieve CAS Login page");
    return -1;
  }
  BeautifulSoup soup = BeautifulSoup(loginPage.body);
  Bs4Element? exec_field = soup.find('input', attrs: {"name": 'execution'});
  Bs4Element? event_id_field = soup.find('input', attrs: {"name": '_eventId'});
  if (exec_field == null || event_id_field == null){
    logger("Failed finding required form field");
    return -1;
  }
  String execution = exec_field["value"]!;
  String eventID = event_id_field["value"]!;
  Map<String,dynamic> loginData = {
    'username':login,
    'password':password,
    'execution':execution,
    '_eventId': eventID,
    'submit' : 'SE CONNECTER'
  };
  Response response = await session.post(
    cseUri,
    headers: headers,
    body: loginData,
  );

  //prepareRequest();
  if (response.statusCode == 301 || response.statusCode == 303 || response.statusCode == 302){
    http.Response sd = await followRedirects(response);
    logger("Redirected");
    if (sd.statusCode == 200){
      _sessionStatus = true;
      logger("Conn sucessfull");
    }
  }
  else{
    logger("Not redirected");
    return -1;
  }
  logger(session.cookieStore.cookies);
  logger("Delta between now and last conn request ${DateTime.now().difference(startDate).inSeconds} secondes");

  return 1;
}