\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}