\chapter{Les classes}

\section{Credential}

Cette classe est utilisée pour sauvegarder les informations d'identifications pour accéder aux équipements et est identifiable par un nom unique. Le mot de passe est enregistré dans la base de donnée de façon chiffrée, mais avec un chiffrement symétrique, car il est nécessaire de pouvoir le réutiliser pour s'authentifier par la suite sur les équipements. Les fonctions pour chiffrer et déchiffrer le mot de passe sont fournit par l'attribut "password".

\begin{lstlisting}[language=Ruby, title="app/model/credential.rb"]
  # Returns the decrypted value of the 'encrypted_password' field
  def password
    @password = SymmetricEncryption.decrypt(encrypted_password)
  end

  # Encrypt the clear text password and set the 'encrypted_password' field.
  #
  # Params:
  # * new_password: the new value of the password
  def password=(new_password)
    @password = SymmetricEncryption.encrypt(new_password)
    self.encrypted_password = @password
  end
\end{lstlisting}

\section{Address}

Décrit un objet réseau qui se caractérise par un réseau IPv4 au format \acrshort{cidr}. De ce réseau nous allons pouvoir en déduire la première et dernière addresse. Ces addresses seront ensuite convertie en base10 pour pouvoir être indexé par la base de donnée. Ainsi \lstinline{start_ip} est la représentation numérique de la première addresse IP de ce réseau, et \lstinline{end_ip} la dernière. Dans le cas où le réseau ne contient qu'une seule adresse IP (masque réseau de 32 bits (cité la doc réseau au début)), ces deux adresses seront identiques. Ces valeurs sont calculés à chaque modifications de l'attribut network.

\begin{lstlisting}[language=Ruby, title="app/model/address.rb"]
  # Override setter method for the 'network' field.
  # It must update the 'start_ip' and 'end_ip' aswell.
  #
  # Params:
  # * value: the new value of the network
  def network=(value)
    super(value)
    set_ip
  end

  ---

  # Define 'start_ip' and 'end_ip' fields from 'network'
  def set_ip
    return if network.nil?
    return unless network.match?(network_regex)
    ip = IPAddr.new network
    self.start_ip = ip.to_range.first.to_i
    self.end_ip = ip.to_range.last.to_i
  end
\end{lstlisting}