diff --git a/Gemfile b/Gemfile index f4b30a45f..2252563b3 100644 --- a/Gemfile +++ b/Gemfile @@ -113,6 +113,8 @@ gem 'webpacker', '>= 4.0.x' gem 'after_party' +gem 'zxcvbn-ruby', require: 'zxcvbn' + # Cron jobs gem 'delayed_job_active_record' gem "daemons" diff --git a/Gemfile.lock b/Gemfile.lock index 971e18182..9704d807d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -799,6 +799,7 @@ GEM nokogiri (~> 1.8) xray-rails (0.3.1) rails (>= 3.1.0) + zxcvbn-ruby (0.1.2) PLATFORMS ruby @@ -901,6 +902,7 @@ DEPENDENCIES webmock webpacker (>= 4.0.x) xray-rails + zxcvbn-ruby BUNDLED WITH 1.16.4 diff --git a/app/assets/stylesheets/new_design/administrateurs_activate.scss b/app/assets/stylesheets/new_design/administrateurs_activate.scss new file mode 100644 index 000000000..04393bdd0 --- /dev/null +++ b/app/assets/stylesheets/new_design/administrateurs_activate.scss @@ -0,0 +1,4 @@ +.administrateurs-activate.container { + margin-top: 60px; + margin-bottom: 60px; +} diff --git a/app/assets/stylesheets/new_design/common.scss b/app/assets/stylesheets/new_design/common.scss index c4a2230d2..e3b9975af 100644 --- a/app/assets/stylesheets/new_design/common.scss +++ b/app/assets/stylesheets/new_design/common.scss @@ -45,6 +45,14 @@ a { color: $blue; } +em { + font-style: italic; +} + +strong { + font-weight: bold; +} + .container { @include horizontal-padding($default-padding); max-width: $page-width + 2 * $default-padding; diff --git a/app/assets/stylesheets/new_design/layouts.scss b/app/assets/stylesheets/new_design/layouts.scss index d155581a3..ec83ec436 100644 --- a/app/assets/stylesheets/new_design/layouts.scss +++ b/app/assets/stylesheets/new_design/layouts.scss @@ -40,3 +40,8 @@ } } } + +.one-column-centered { + margin: auto; + max-width: $page-width / 2; +} diff --git a/app/assets/stylesheets/new_design/password_strength.scss b/app/assets/stylesheets/new_design/password_strength.scss new file mode 100644 index 000000000..341b13c10 --- /dev/null +++ b/app/assets/stylesheets/new_design/password_strength.scss @@ -0,0 +1,34 @@ +@import "colors"; +@import "constants"; + +$strength-bg: #EEEEEE; +$weak-strength-color: $lighter-red; +$medium-strength-color: $orange; +$strong-strength-color: $green; + +.password-strength { + margin-top: -24px; + width: 100%; + min-height: 22px; + background: $strength-bg; + display: block; + margin-bottom: $default-spacer; + text-align: center; + + &.strength-1 { + background: linear-gradient(to right, $weak-strength-color 0%, $weak-strength-color 25%, $strength-bg 25%, $strength-bg 100%); + } + + &.strength-2 { + background: linear-gradient(to right, $medium-strength-color 0%, $medium-strength-color 50%, $strength-bg 50%, $strength-bg 100%); + } + + &.strength-3 { + background: linear-gradient(to right, $medium-strength-color 0%, $medium-strength-color 75%, $strength-bg 75%, $strength-bg 100%); + } + + &.strength-4 { + background: $strong-strength-color; + color: #FFFFFF; + } +} diff --git a/app/controllers/admin/types_de_champ_controller.rb b/app/controllers/admin/types_de_champ_controller.rb index 4a13b80e9..b50d4c2c0 100644 --- a/app/controllers/admin/types_de_champ_controller.rb +++ b/app/controllers/admin/types_de_champ_controller.rb @@ -16,9 +16,12 @@ class Admin::TypesDeChampController < AdminController end def update - @procedure.update(TypesDeChampService.create_update_procedure_params params) + if @procedure.update(TypesDeChampService.create_update_procedure_params params) + flash.now.notice = 'Modifications sauvegardées' + else + flash.now.alert = @procedure.errors.full_messages.join(', ') + end create_facade - flash.now.notice = 'Modifications sauvegardées' render 'show', format: :js end diff --git a/app/controllers/administrateurs/activate_controller.rb b/app/controllers/administrateurs/activate_controller.rb index d5d902444..60b329851 100644 --- a/app/controllers/administrateurs/activate_controller.rb +++ b/app/controllers/administrateurs/activate_controller.rb @@ -1,3 +1,5 @@ +require 'zxcvbn' + class Administrateurs::ActivateController < ApplicationController layout "new_application" @@ -29,6 +31,11 @@ class Administrateurs::ActivateController < ApplicationController end end + def test_password_strength + score = Zxcvbn.test(params[:password], [], ZXCVBN_DICTIONNARIES).score + render json: { score: score } + end + private def update_administrateur_params diff --git a/app/javascript/new_design/password-strength.js b/app/javascript/new_design/password-strength.js new file mode 100644 index 000000000..47a01f865 --- /dev/null +++ b/app/javascript/new_design/password-strength.js @@ -0,0 +1,34 @@ +import $ from 'jquery'; + +export function displayPasswordStrength(strengthBarId, score) { + var $bar = $('#' + strengthBarId), + passwordMessage; + + $bar.removeClass('strength-1 strength-2 strength-3 strength-4'); + + if (score < 4) { + passwordMessage = 'Mot de passe pas assez complexe'; + } else { + passwordMessage = 'Mot de passe suffisamment complexe'; + } + + $bar.text(passwordMessage); + $bar.addClass('strength-' + score); +} + +export function checkPasswordStrength(event, strengthBarId) { + var $target = $(event.target), + password = $target.val(); + + if (password.length > 2) { + $.post( + '/admin/activate/test_password_strength', + { password: password }, + function(data) { + displayPasswordStrength(strengthBarId, data.score); + } + ); + } else { + displayPasswordStrength(strengthBarId, 0); + } +} diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index f953f6100..b3255227f 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -24,6 +24,10 @@ import { toggleCondidentielExplanation } from '../new_design/avis'; import { togglePrintMenu } from '../new_design/dossier'; import { toggleHeaderMenu } from '../new_design/header'; import { scrollMessagerie } from '../new_design/messagerie'; +import { + checkPasswordStrength, + displayPasswordStrength +} from '../new_design/password-strength'; import { showMotivation, motivationCancel } from '../new_design/state-button'; import { toggleChart } from '../new_design/toggle-chart'; @@ -33,6 +37,8 @@ const DS = { togglePrintMenu, toggleHeaderMenu, scrollMessagerie, + checkPasswordStrength, + displayPasswordStrength, showMotivation, motivationCancel, toggleChart diff --git a/app/models/administrateur.rb b/app/models/administrateur.rb index f45bb1447..b4662e58d 100644 --- a/app/models/administrateur.rb +++ b/app/models/administrateur.rb @@ -17,6 +17,17 @@ class Administrateur < ApplicationRecord scope :inactive, -> { where(active: false) } + validate :password_complexity, if: Proc.new { |a| Devise.password_length.include?(a.password.try(:size)) } + + def password_complexity + if password.present? + score = Zxcvbn.test(password, [], ZXCVBN_DICTIONNARIES).score + if score < 4 + errors.add(:password, :not_strength) + end + end + end + def self.find_inactive_by_token(reset_password_token) self.inactive.with_reset_password_token(reset_password_token) end diff --git a/app/models/type_de_champ.rb b/app/models/type_de_champ.rb index 79aee06b4..33cfd914a 100644 --- a/app/models/type_de_champ.rb +++ b/app/models/type_de_champ.rb @@ -59,6 +59,17 @@ class TypeDeChamp < ApplicationRecord before_validation :check_mandatory before_save :remove_piece_justificative_template, if: -> { type_champ_changed? } + def valid?(context = nil) + super + if dynamic_type.present? + dynamic_type.valid? + errors.merge!(dynamic_type.errors) + end + errors.empty? + end + + alias_method :validate, :valid? + def set_dynamic_type @dynamic_type = type_champ.present? ? self.class.type_champ_to_class_name(type_champ).constantize.new(self) : nil end diff --git a/app/models/types_de_champ/linked_drop_down_list_type_de_champ.rb b/app/models/types_de_champ/linked_drop_down_list_type_de_champ.rb index c1aa269aa..a90b7a0f0 100644 --- a/app/models/types_de_champ/linked_drop_down_list_type_de_champ.rb +++ b/app/models/types_de_champ/linked_drop_down_list_type_de_champ.rb @@ -3,6 +3,8 @@ class TypesDeChamp::LinkedDropDownListTypeDeChamp < TypesDeChamp::TypeDeChampBas delegate :drop_down_list, to: :@type_de_champ + validate :check_presence_of_primary_options + def primary_options primary_options = unpack_options.map(&:first) if primary_options.present? @@ -21,13 +23,19 @@ class TypesDeChamp::LinkedDropDownListTypeDeChamp < TypesDeChamp::TypeDeChampBas private + def check_presence_of_primary_options + if !PRIMARY_PATTERN.match?(drop_down_list.options.second) + errors.add(libelle, "doit commencer par une entrée de menu primaire de la forme --texte--") + end + end + def unpack_options _, *options = drop_down_list.options chunked = options.slice_before(PRIMARY_PATTERN) chunked.map do |chunk| primary, *secondary = chunk secondary.unshift('') - [PRIMARY_PATTERN.match(primary)[1], secondary] + [PRIMARY_PATTERN.match(primary)&.[](1), secondary] end end end diff --git a/app/models/types_de_champ/type_de_champ_base.rb b/app/models/types_de_champ/type_de_champ_base.rb index a04f9d862..4f77596c3 100644 --- a/app/models/types_de_champ/type_de_champ_base.rb +++ b/app/models/types_de_champ/type_de_champ_base.rb @@ -1,4 +1,8 @@ class TypesDeChamp::TypeDeChampBase + include ActiveModel::Validations + + delegate :libelle, to: :@type_de_champ + def initialize(type_de_champ) @type_de_champ = type_de_champ end diff --git a/app/views/administrateurs/activate/new.html.haml b/app/views/administrateurs/activate/new.html.haml index 256159867..241163c03 100644 --- a/app/views/administrateurs/activate/new.html.haml +++ b/app/views/administrateurs/activate/new.html.haml @@ -1,8 +1,29 @@ -.container - = form_for @administrateur, url: { controller: 'administrateurs/activate', action: :create }, html: { class: "form" } do |f| - %br - %h1 - = @administrateur.email - = f.password_field :password, placeholder: 'Mot de passe' - = f.hidden_field :reset_password_token, value: params[:token] - = f.submit 'Définir le mot de passe', class: 'button large primary expand' +- content_for(:title, "Choix du mot de passe") + +- content_for :footer do + = render partial: "root/footer" + +.administrateurs-activate.container + .one-column-centered + = form_for @administrateur, url: { controller: 'administrateurs/activate', action: :create }, html: { class: "form" } do |f| + %br + %h1 + Choix du mot de passe + + = f.label :email, "Email" + = f.text_field :email, disabled: true + + = f.label :password do + Mot de passe + + = f.password_field :password, placeholder: 'Mot de passe', onKeyUp: "javascript:DS.checkPasswordStrength(event, 'strength-bar', 'submit-password');" + + #strength-bar.password-strength +   + + .explication + %strong Aide : + Une courte phrase peut être un mot de passe très sécurisé. + + = f.hidden_field :reset_password_token, value: params[:token] + = f.submit 'Continuer', class: 'button large primary expand', id: "submit-password", data: { disable_with: "Envoi..." } diff --git a/config/initializers/zxcvbn.rb b/config/initializers/zxcvbn.rb new file mode 100644 index 000000000..416e80192 --- /dev/null +++ b/config/initializers/zxcvbn.rb @@ -0,0 +1 @@ +ZXCVBN_DICTIONNARIES = YAML.safe_load(File.read(Rails.root.join("config", "initializers", "zxcvbn_dictionnaries.yaml"))) diff --git a/config/initializers/zxcvbn_dictionnaries.yaml b/config/initializers/zxcvbn_dictionnaries.yaml new file mode 100644 index 000000000..bb8b8b6b0 --- /dev/null +++ b/config/initializers/zxcvbn_dictionnaries.yaml @@ -0,0 +1,5002 @@ +# https://en.wiktionary.org/wiki/Wiktionary:Frequency_lists/French_wordlist_opensubtitles_5000 +french: + - "je" + - "de" + - "est" + - "pas" + - "le" + - "vous" + - "la" + - "tu" + - "que" + - "un" + - "il" + - "et" + - "à" + - "a" + - "ne" + - "les" + - "ce" + - "en" + - "on" + - "ça" + - "une" + - "ai" + - "pour" + - "des" + - "moi" + - "qui" + - "nous" + - "y" + - "mais" + - "me" + - "dans" + - "du" + - "bien" + - "elle" + - "si" + - "tout" + - "plus" + - "non" + - "mon" + - "suis" + - "te" + - "au" + - "avec" + - "va" + - "oui" + - "toi" + - "fait" + - "ils" + - "as" + - "être" + - "faire" + - "se" + - "comme" + - "était" + - "sur" + - "quoi" + - "ici" + - "sais" + - "lui" + - "veux" + - "ma" + - "là" + - "rien" + - "dit" + - "es" + - "où" + - "votre" + - "pourquoi" + - "sont" + - "cette" + - "quand" + - "par" + - "son" + - "ton" + - "peux" + - "vais" + - "dire" + - "alors" + - "comment" + - "avez" + - "bon" + - "ou" + - "très" + - "merci" + - "ont" + - "même" + - "jamais" + - "aussi" + - "voir" + - "chose" + - "allez" + - "tous" + - "deux" + - "ces" + - "faut" + - "sa" + - "êtes" + - "été" + - "ta" + - "fais" + - "avoir" + - "peut" + - "autre" + - "m" + - "encore" + - "maintenant" + - "peu" + - "mes" + - "vraiment" + - "temps" + - "notre" + - "toujours" + - "vie" + - "sans" + - "juste" + - "oh" + - "avait" + - "accord" + - "vu" + - "monde" + - "quelque" + - "fois" + - "aller" + - "trop" + - "viens" + - "crois" + - "dieu" + - "dois" + - "homme" + - "père" + - "sûr" + - "aux" + - "leur" + - "avant" + - "étais" + - "besoin" + - "femme" + - "aime" + - "personne" + - "avais" + - "chez" + - "vrai" + - "ans" + - "mal" + - "ses" + - "parler" + - "vos" + - "après" + - "mort" + - "veut" + - "eu" + - "sera" + - "bonne" + - "parce" + - "mieux" + - "petit" + - "voilà" + - "tes" + - "ca" + - "dis" + - "beaucoup" + - "depuis" + - "doit" + - "vois" + - "mère" + - "vas" + - "monsieur" + - "quel" + - "déjà" + - "fille" + - "gens" + - "donc" + - "jour" + - "soir" + - "autres" + - "ii" + - "toute" + - "bonjour" + - "ll" + - "maison" + - "nom" + - "argent" + - "nos" + - "ouais" + - "pense" + - "merde" + - "nuit" + - "papa" + - "cela" + - "salut" + - "cet" + - "avons" + - "reste" + - "désolé" + - "maman" + - "peur" + - "arrive" + - "seul" + - "vite" + - "prendre" + - "regarde" + - "air" + - "soit" + - "trois" + - "quelle" + - "passé" + - "savoir" + - "plaît" + - "choses" + - "moins" + - "fils" + - "entre" + - "bas" + - "appelle" + - "passe" + - "ah" + - "tête" + - "demain" + - "grand" + - "arrête" + - "faites" + - "voulez" + - "hé" + - "attends" + - "hein" + - "enfants" + - "assez" + - "raison" + - "aurais" + - "voulais" + - "elles" + - "parle" + - "ok" + - "jours" + - "dû" + - "moment" + - "heure" + - "puis" + - "gars" + - "hommes" + - "amour" + - "tard" + - "toutes" + - "sommes" + - "tuer" + - "eh" + - "ami" + - "connais" + - "petite" + - "aider" + - "chance" + - "savez" + - "partir" + - "sait" + - "combien" + - "voiture" + - "tant" + - "pris" + - "part" + - "problème" + - "prends" + - "porte" + - "coup" + - "serait" + - "venir" + - "hui" + - "famille" + - "travail" + - "pu" + - "seule" + - "sens" + - "ni" + - "allons" + - "revoir" + - "idée" + - "putain" + - "passer" + - "contre" + - "comprends" + - "entendu" + - "trouvé" + - "trouver" + - "vieux" + - "vient" + - "pendant" + - "aurait" + - "quelques" + - "attention" + - "demande" + - "chercher" + - "sous" + - "voici" + - "pourrait" + - "sang" + - "pouvez" + - "sortir" + - "question" + - "histoire" + - "amis" + - "venez" + - "frère" + - "rester" + - "fini" + - "ville" + - "nouveau" + - "truc" + - "tiens" + - "mois" + - "eux" + - "mec" + - "yeux" + - "laisse" + - "super" + - "belle" + - "longtemps" + - "police" + - "eau" + - "heures" + - "car" + - "importe" + - "cas" + - "vont" + - "chaque" + - "terre" + - "place" + - "tué" + - "type" + - "main" + - "pardon" + - "ensemble" + - "seulement" + - "guerre" + - "beau" + - "vers" + - "mme" + - "prie" + - "devant" + - "trouve" + - "partie" + - "suite" + - "compris" + - "matin" + - "leurs" + - "aucun" + - "arrivé" + - "dessus" + - "chérie" + - "mettre" + - "aide" + - "étaient" + - "ie" + - "perdu" + - "fin" + - "sois" + - "premier" + - "genre" + - "aimerais" + - "droit" + - "donne" + - "attendez" + - "jeune" + - "feu" + - "devrais" + - "enfant" + - "chambre" + - "gros" + - "côté" + - "venu" + - "loin" + - "laisser" + - "donner" + - "jouer" + - "savais" + - "compte" + - "s" + - "parlé" + - "minutes" + - "regardez" + - "train" + - "première" + - "pouvoir" + - "aura" + - "mourir" + - "dernière" + - "donné" + - "ia" + - "mari" + - "écoute" + - "enfin" + - "devrait" + - "mis" + - "film" + - "aucune" + - "fort" + - "façon" + - "pays" + - "prêt" + - "madame" + - "femmes" + - "affaire" + - "pourrais" + - "espère" + - "parti" + - "h" + - "boulot" + - "endroit" + - "fou" + - "corps" + - "hier" + - "dont" + - "désolée" + - "grande" + - "point" + - "cinq" + - "dehors" + - "filles" + - "cause" + - "vivre" + - "près" + - "pensais" + - "garçon" + - "chef" + - "haut" + - "capitaine" + - "dirait" + - "bébé" + - "celui" + - "demandé" + - "possible" + - "mains" + - "ainsi" + - "quatre" + - "nouvelle" + - "années" + - "plein" + - "semaine" + - "dites" + - "croire" + - "marche" + - "tour" + - "école" + - "manger" + - "plutôt" + - "docteur" + - "ceux" + - "vérité" + - "vue" + - "arrêter" + - "essaie" + - "envie" + - "bientôt" + - "instant" + - "dernier" + - "affaires" + - "arriver" + - "demander" + - "meilleur" + - "font" + - "derrière" + - "c" + - "dollars" + - "presque" + - "dr" + - "tellement" + - "tomber" + - "journée" + - "voulait" + - "appeler" + - "bureau" + - "confiance" + - "garde" + - "attendre" + - "numéro" + - "serai" + - "dur" + - "á" + - "souviens" + - "o" + - "voyez" + - "cours" + - "bonsoir" + - "route" + - "fera" + - "prend" + - "cul" + - "abord" + - "important" + - "peine" + - "croyais" + - "mot" + - "devez" + - "suffit" + - "minute" + - "ferme" + - "ben" + - "plaisir" + - "chien" + - "jeu" + - "seigneur" + - "messieurs" + - "calme" + - "voudrais" + - "heureux" + - "prenez" + - "mariage" + - "voit" + - "parents" + - "lls" + - "dedans" + - "entrer" + - "lit" + - "parfait" + - "fous" + - "mlle" + - "rentrer" + - "ait" + - "musique" + - "arrêtez" + - "autant" + - "service" + - "reviens" + - "ceci" + - "drôle" + - "attend" + - "parfois" + - "téléphone" + - "retour" + - "ira" + - "e" + - "pauvre" + - "verre" + - "général" + - "new" + - "six" + - "pensé" + - "l" + - "impossible" + - "fête" + - "adore" + - "coeur" + - "aimes" + - "ci" + - "ferai" + - "président" + - "doute" + - "facile" + - "entends" + - "payer" + - "appelé" + - "prison" + - "john" + - "sors" + - "café" + - "vaut" + - "mauvais" + - "chéri" + - "oublié" + - "bras" + - "i" + - "gentil" + - "faute" + - "équipe" + - "exactement" + - "cœur" + - "penser" + - "changer" + - "commence" + - "lieu" + - "entendre" + - "ies" + - "roi" + - "plan" + - "partout" + - "joue" + - "cher" + - "morts" + - "rendre" + - "écrit" + - "travailler" + - "malade" + - "sinon" + - "génial" + - "regarder" + - "veulent" + - "montrer" + - "rentre" + - "travaille" + - "armée" + - "voulu" + - "cherche" + - "état" + - "boire" + - "sécurité" + - "dès" + - "esprit" + - "année" + - "dix" + - "york" + - "laissé" + - "bois" + - "mets" + - "propre" + - "soyez" + - "jack" + - "essayer" + - "faisait" + - "tôt" + - "surtout" + - "arme" + - "t" + - "rêve" + - "perdre" + - "avis" + - "semble" + - "pire" + - "simple" + - "penses" + - "parles" + - "paix" + - "livre" + - "dormir" + - "voyons" + - "difficile" + - "retard" + - "allait" + - "d" + - "sujet" + - "appris" + - "ensuite" + - "sauf" + - "maître" + - "morte" + - "noir" + - "or" + - "dîner" + - "choix" + - "serais" + - "écoute" + - "sale" + - "étiez" + - "sûrement" + - "an" + - "ordre" + - "souvent" + - "essayé" + - "peuvent" + - "visage" + - "bout" + - "changé" + - "sérieux" + - "inquiète" + - "âge" + - "photo" + - "rue" + - "tirer" + - "comprendre" + - "face" + - "semaines" + - "marché" + - "questions" + - "honneur" + - "ciel" + - "allé" + - "garder" + - "chemin" + - "grave" + - "gauche" + - "petits" + - "courant" + - "amie" + - "nouvelles" + - "avion" + - "con" + - "content" + - "force" + - "millions" + - "oublie" + - "devoir" + - "prochaine" + - "prix" + - "propos" + - "bateau" + - "bouge" + - "voix" + - "rouge" + - "restez" + - "celle" + - "pouvais" + - "personnes" + - "ferais" + - "début" + - "espèce" + - "gueule" + - "acheter" + - "continue" + - "sort" + - "faim" + - "long" + - "j" + - "voyage" + - "message" + - "sorte" + - "reçu" + - "bienvenue" + - "idiot" + - "certains" + - "hôpital" + - "promis" + - "devenir" + - "ouvre" + - "grâce" + - "sûre" + - "problèmes" + - "armes" + - "trucs" + - "camp" + - "allais" + - "occupe" + - "devait" + - "manque" + - "connaissez" + - "thé" + - "avaient" + - "cheveux" + - "soleil" + - "salle" + - "gagner" + - "laissez" + - "erreur" + - "cru" + - "pars" + - "bizarre" + - "croyez" + - "sac" + - "hôtel" + - "oncle" + - "pièce" + - "pouvait" + - "fond" + - "soirée" + - "secret" + - "patron" + - "rapport" + - "apprendre" + - "commencé" + - "sauver" + - "seconde" + - "pensez" + - "allô" + - "ailleurs" + - "agent" + - "froid" + - "seras" + - "pied" + - "jolie" + - "revenir" + - "scène" + - "pieds" + - "n" + - "devons" + - "groupe" + - "carte" + - "aurai" + - "effet" + - "neuf" + - "fallait" + - "monte" + - "battre" + - "noël" + - "venue" + - "mots" + - "tire" + - "droite" + - "libre" + - "soeur" + - "situation" + - "seront" + - "faux" + - "bordel" + - "foutre" + - "lumière" + - "euh" + - "incroyable" + - "tue" + - "joli" + - "connaît" + - "debout" + - "colonel" + - "cheval" + - "écoutez" + - "george" + - "joe" + - "vieille" + - "entrez" + - "intérieur" + - "coin" + - "auras" + - "gagné" + - "fric" + - "loi" + - "absolument" + - "dame" + - "cool" + - "magnifique" + - "dos" + - "occuper" + - "présent" + - "retrouver" + - "réussi" + - "frank" + - "rencontrer" + - "aviez" + - "meilleure" + - "âme" + - "prêts" + - "doucement" + - "table" + - "lettre" + - "rappelle" + - "sam" + - "fut" + - "risque" + - "ordres" + - "appel" + - "commencer" + - "terminé" + - "agit" + - "blanc" + - "sœur" + - "pareil" + - "charlie" + - "chaud" + - "finir" + - "touche" + - "avance" + - "ignore" + - "meurtre" + - "tranquille" + - "anniversaire" + - "déjeuner" + - "disais" + - "bord" + - "tom" + - "jeunes" + - "accident" + - "parlez" + - "fasse" + - "complètement" + - "déteste" + - "clair" + - "marcher" + - "disait" + - "mauvaise" + - "envoyé" + - "â" + - "professeur" + - "heureuse" + - "doivent" + - "midi" + - "lire" + - "moyen" + - "ferait" + - "commandant" + - "vraie" + - "sept" + - "forme" + - "tombe" + - "silence" + - "sortez" + - "connaître" + - "puisse" + - "cadeau" + - "flics" + - "mer" + - "médecin" + - "exact" + - "décidé" + - "moitié" + - "surprise" + - "avocat" + - "montre" + - "b" + - "su" + - "porter" + - "télé" + - "vivant" + - "jure" + - "disent" + - "mr" + - "serez" + - "devriez" + - "devenu" + - "aimé" + - "diable" + - "ligne" + - "mission" + - "suppose" + - "chacun" + - "autour" + - "pote" + - "grosse" + - "expliquer" + - "arrivée" + - "monter" + - "balle" + - "selon" + - "photos" + - "contrôle" + - "prête" + - "anglais" + - "sorti" + - "k" + - "bons" + - "disparu" + - "tenir" + - "simplement" + - "quitter" + - "envoie" + - "paul" + - "aimer" + - "voie" + - "paris" + - "classe" + - "huit" + - "offre" + - "poste" + - "dangereux" + - "attaque" + - "impression" + - "folle" + - "michael" + - "mange" + - "bravo" + - "arrière" + - "amérique" + - "suivre" + - "aille" + - "oublier" + - "peuple" + - "baiser" + - "rencontré" + - "honte" + - "connard" + - "trou" + - "retourner" + - "chanson" + - "change" + - "arrêté" + - "enfer" + - "écrire" + - "livres" + - "habitude" + - "réponse" + - "david" + - "lieutenant" + - "savait" + - "radio" + - "tenez" + - "bande" + - "bob" + - "rend" + - "compagnie" + - "connu" + - "secours" + - "danse" + - "met" + - "vol" + - "vit" + - "conneries" + - "aurez" + - "imagine" + - "boîte" + - "joué" + - "triste" + - "sud" + - "lu" + - "tel" + - "merveilleux" + - "pute" + - "aie" + - "ressemble" + - "coucher" + - "ennuis" + - "volé" + - "sortie" + - "devais" + - "combat" + - "bouche" + - "certain" + - "visite" + - "existe" + - "bête" + - "retourne" + - "approche" + - "pourtant" + - "plusieurs" + - "rire" + - "but" + - "sergent" + - "public" + - "système" + - "présente" + - "dirai" + - "faudra" + - "écouter" + - "hors" + - "exemple" + - "vendre" + - "continuer" + - "coups" + - "pourra" + - "sympa" + - "nord" + - "cuisine" + - "époque" + - "grands" + - "héros" + - "étrange" + - "avenir" + - "danger" + - "envoyer" + - "gouvernement" + - "danser" + - "lune" + - "etre" + - "poser" + - "partez" + - "normal" + - "peau" + - "santé" + - "ecoutez" + - "ouvrir" + - "nez" + - "secondes" + - "amoureux" + - "dommage" + - "pleine" + - "mille" + - "banque" + - "voler" + - "clé" + - "bonnes" + - "paraît" + - "servir" + - "journal" + - "village" + - "tient" + - "flic" + - "salaud" + - "juge" + - "tiré" + - "cour" + - "assis" + - "bruit" + - "terrible" + - "prochain" + - "inspecteur" + - "liberté" + - "blague" + - "robe" + - "crime" + - "bière" + - "tas" + - "viennent" + - "don" + - "reine" + - "protéger" + - "seuls" + - "préfère" + - "bar" + - "dingue" + - "vent" + - "pitié" + - "croit" + - "payé" + - "travers" + - "club" + - "garçons" + - "conseil" + - "mesdames" + - "sol" + - "bonheur" + - "rêves" + - "centre" + - "thé" + - "mêmes" + - "avions" + - "mike" + - "nulle" + - "stupide" + - "pouvons" + - "vin" + - "tante" + - "sent" + - "fiche" + - "milieu" + - "signe" + - "unis" + - "appelez" + - "départ" + - "inutile" + - "emmener" + - "comprenez" + - "liste" + - "gamin" + - "johnny" + - "hey" + - "prise" + - "savent" + - "différent" + - "verra" + - "probablement" + - "intérêt" + - "choisi" + - "parole" + - "ennemi" + - "vêtements" + - "aimez" + - "recherche" + - "société" + - "faisais" + - "peter" + - "œil" + - "soin" + - "chère" + - "tourne" + - "ià" + - "descendre" + - "félicitations" + - "pose" + - "position" + - "oeil" + - "vouloir" + - "mecs" + - "irai" + - "spectacle" + - "acheté" + - "laquelle" + - "rôle" + - "intéresse" + - "utiliser" + - "match" + - "devient" + - "quitté" + - "asseoir" + - "environ" + - "plait" + - "mur" + - "blessé" + - "mise" + - "harry" + - "you" + - "beauté" + - "salope" + - "parie" + - "sert" + - "soldats" + - "films" + - "américain" + - "marier" + - "entrée" + - "soldat" + - "ouvert" + - "sauter" + - "londres" + - "eiie" + - "lequel" + - "lâche" + - "église" + - "pierre" + - "art" + - "fenêtre" + - "humain" + - "tort" + - "cerveau" + - "coupable" + - "petites" + - "promets" + - "adresse" + - "prince" + - "quartier" + - "espoir" + - "conduire" + - "auriez" + - "ridicule" + - "justice" + - "rose" + - "venus" + - "max" + - "jimmy" + - "presse" + - "adieu" + - "revient" + - "expérience" + - "présenter" + - "tombé" + - "faisons" + - "épouser" + - "frères" + - "veuillez" + - "revenu" + - "colère" + - "bill" + - "vis" + - "james" + - "pourriez" + - "jim" + - "intéressant" + - "ouvrez" + - "nature" + - "gosse" + - "taxi" + - "fier" + - "preuve" + - "riche" + - "faudrait" + - "base" + - "fleurs" + - "vide" + - "portes" + - "mademoiselle" + - "formidable" + - "nul" + - "directeur" + - "chanter" + - "contact" + - "histoires" + - "marié" + - "défense" + - "répondre" + - "excuse" + - "responsable" + - "deuxième" + - "mary" + - "san" + - "appartement" + - "décision" + - "cinéma" + - "jeter" + - "aimais" + - "cacher" + - "glace" + - "occasion" + - "dents" + - "vacances" + - "course" + - "ravi" + - "tueur" + - "sentir" + - "courage" + - "jésus" + - "allée" + - "capable" + - "essayez" + - "sauvé" + - "longue" + - "parmi" + - "continuez" + - "paie" + - "superbe" + - "français" + - "souvenir" + - "ouest" + - "dégage" + - "jambes" + - "coupe" + - "immédiatement" + - "machine" + - "épouse" + - "telle" + - "marie" + - "mien" + - "pius" + - "certainement" + - "bombe" + - "types" + - "p" + - "né" + - "manière" + - "gagne" + - "prévu" + - "chier" + - "trouves" + - "u" + - "idées" + - "touché" + - "rendu" + - "monstre" + - "km" + - "retrouve" + - "ha" + - "f" + - "importance" + - "joie" + - "dérange" + - "arrivent" + - "court" + - "pont" + - "foutu" + - "bain" + - "oubliez" + - "tourner" + - "contente" + - "attendais" + - "cent" + - "enchanté" + - "signifie" + - "américains" + - "iis" + - "quitte" + - "poisson" + - "henry" + - "ayez" + - "terrain" + - "enquête" + - "horrible" + - "chat" + - "certaines" + - "r" + - "camion" + - "copine" + - "joyeux" + - "shérif" + - "ramener" + - "descends" + - "éviter" + - "projet" + - "and" + - "dossier" + - "respect" + - "excellent" + - "envers" + - "mariée" + - "occupé" + - "lorsque" + - "blanche" + - "majesté" + - "rencontre" + - "toucher" + - "ange" + - "refuse" + - "charge" + - "billy" + - "chevaux" + - "v" + - "chiens" + - "empêcher" + - "dure" + - "zone" + - "faits" + - "animaux" + - "meilleurs" + - "plupart" + - "emmène" + - "étions" + - "politique" + - "chaussures" + - "langue" + - "mangé" + - "douleur" + - "planète" + - "offrir" + - "règles" + - "drogue" + - "réalité" + - "bus" + - "enfoiré" + - "dirais" + - "permis" + - "vécu" + - "chapeau" + - "île" + - "réunion" + - "soient" + - "contraire" + - "tony" + - "mettez" + - "nick" + - "arrivera" + - "excuser" + - "code" + - "couleur" + - "rapide" + - "raconte" + - "papier" + - "discuter" + - "opération" + - "cartes" + - "nourriture" + - "entier" + - "nécessaire" + - "frais" + - "toilettes" + - "spécial" + - "vaisseau" + - "action" + - "princesse" + - "magasin" + - "copain" + - "sache" + - "bu" + - "steve" + - "découvert" + - "pain" + - "mignon" + - "taille" + - "sacré" + - "rends" + - "eddie" + - "double" + - "viendra" + - "imbécile" + - "essaye" + - "champ" + - "personnel" + - "client" + - "lait" + - "contrat" + - "partis" + - "sexe" + - "mienne" + - "repas" + - "mémoire" + - "destin" + - "direction" + - "dors" + - "faite" + - "pleurer" + - "couteau" + - "malin" + - "remettre" + - "ray" + - "témoin" + - "restes" + - "mètres" + - "trésor" + - "gosses" + - "aiment" + - "washington" + - "habite" + - "foi" + - "puisque" + - "apporté" + - "solution" + - "trouvez" + - "nouveaux" + - "réfléchir" + - "choisir" + - "goût" + - "remercie" + - "détruire" + - "université" + - "doux" + - "beaux" + - "raconter" + - "vitesse" + - "menti" + - "três" + - "procès" + - "enceinte" + - "amuser" + - "niveau" + - "vus" + - "miss" + - "fermer" + - "arranger" + - "end" + - "clients" + - "rappeler" + - "alex" + - "failli" + - "arbre" + - "papiers" + - "sarah" + - "mérite" + - "différence" + - "travaillé" + - "disons" + - "bleu" + - "dise" + - "aimait" + - "appelles" + - "espace" + - "caméra" + - "censé" + - "qu" + - "piste" + - "sourire" + - "courir" + - "accepter" + - "retrouvé" + - "charles" + - "jambe" + - "angleterre" + - "quels" + - "préparer" + - "marre" + - "forces" + - "tirez" + - "énorme" + - "danny" + - "trés" + - "invité" + - "rentré" + - "officier" + - "pièces" + - "lettres" + - "file" + - "programme" + - "tommy" + - "arrêt" + - "fout" + - "balles" + - "flingue" + - "chasse" + - "regrette" + - "to" + - "propres" + - "victime" + - "appartient" + - "france" + - "unique" + - "régler" + - "moindre" + - "compter" + - "voitures" + - "énergie" + - "fil" + - "lycée" + - "crise" + - "stop" + - "image" + - "vérifier" + - "dimanche" + - "appareil" + - "justement" + - "richard" + - "noms" + - "million" + - "cassé" + - "enlever" + - "clés" + - "noire" + - "man" + - "dépend" + - "derniers" + - "doigts" + - "réponds" + - "honnête" + - "prouver" + - "preuves" + - "durant" + - "souris" + - "entendez" + - "lever" + - "oiseau" + - "belles" + - "oû" + - "apporte" + - "grandes" + - "morceau" + - "bobby" + - "bougez" + - "amène" + - "interdit" + - "présence" + - "récupérer" + - "quelles" + - "manqué" + - "cou" + - "venait" + - "étage" + - "regard" + - "bouger" + - "finalement" + - "couper" + - "urgence" + - "perds" + - "points" + - "meurt" + - "partons" + - "troisième" + - "savons" + - "folie" + - "ancien" + - "chante" + - "obtenir" + - "répète" + - "toit" + - "humains" + - "robert" + - "jardin" + - "métier" + - "poche" + - "méchant" + - "paradis" + - "proche" + - "rejoindre" + - "lors" + - "nombre" + - "crains" + - "règle" + - "frapper" + - "intention" + - "succès" + - "forte" + - "gentille" + - "campagne" + - "raisons" + - "malgré" + - "alcool" + - "regardé" + - "jerry" + - "billets" + - "fantastique" + - "lee" + - "théâtre" + - "vôtre" + - "samedi" + - "pluie" + - "fermé" + - "relation" + - "frappé" + - "restaurant" + - "douce" + - "maladie" + - "parlait" + - "raté" + - "casse" + - "dessous" + - "pourrai" + - "victoire" + - "voudrait" + - "remarqué" + - "assurer" + - "pleure" + - "bouteille" + - "gare" + - "carrière" + - "sentiments" + - "suivi" + - "vies" + - "fiston" + - "vendu" + - "attendant" + - "pourras" + - "amoureuse" + - "mens" + - "falloir" + - "chinois" + - "étranger" + - "appelait" + - "assure" + - "étant" + - "queue" + - "odeur" + - "enlève" + - "produit" + - "meurs" + - "secrets" + - "pression" + - "fatigué" + - "aies" + - "plage" + - "okay" + - "animal" + - "frappe" + - "montagne" + - "coffre" + - "passage" + - "suivant" + - "signal" + - "discours" + - "cents" + - "claire" + - "g" + - "rivière" + - "costume" + - "prendra" + - "souhaite" + - "hasard" + - "journaux" + - "aveugle" + - "lis" + - "demandez" + - "retraite" + - "afin" + - "vendredi" + - "van" + - "auraient" + - "obligé" + - "major" + - "neige" + - "remercier" + - "fusil" + - "gardes" + - "faible" + - "pauvres" + - "noirs" + - "gâteau" + - "cesse" + - "parfaitement" + - "excuses" + - "viande" + - "ministre" + - "univers" + - "vienne" + - "utile" + - "demandais" + - "crétin" + - "gaffe" + - "cache" + - "disant" + - "décider" + - "dort" + - "gaz" + - "blancs" + - "connaissance" + - "vouliez" + - "jake" + - "vidéo" + - "bataille" + - "vive" + - "anna" + - "martin" + - "iui" + - "os" + - "entend" + - "jeux" + - "will" + - "verras" + - "date" + - "échapper" + - "naissance" + - "droits" + - "assassin" + - "attendu" + - "montez" + - "nouvel" + - "pensent" + - "génie" + - "sérieusement" + - "cible" + - "prépare" + - "agir" + - "militaire" + - "futur" + - "attraper" + - "bal" + - "europe" + - "californie" + - "donnez" + - "cousin" + - "vert" + - "poids" + - "volonté" + - "ventre" + - "accepte" + - "amené" + - "recevoir" + - "inquiétez" + - "perd" + - "autrement" + - "informations" + - "titre" + - "célèbre" + - "couple" + - "sexy" + - "serons" + - "certaine" + - "parlons" + - "star" + - "étoiles" + - "rome" + - "los" + - "répondu" + - "resté" + - "charmant" + - "puissant" + - "zéro" + - "genoux" + - "mine" + - "couilles" + - "pilote" + - "maria" + - "style" + - "ramène" + - "voulons" + - "embrasser" + - "amener" + - "valeur" + - "fortune" + - "reprendre" + - "revenez" + - "vieil" + - "walter" + - "servi" + - "arrivés" + - "lève" + - "voleur" + - "côtés" + - "chris" + - "note" + - "préféré" + - "couché" + - "milliers" + - "aéroport" + - "prévenir" + - "château" + - "apparemment" + - "gardez" + - "privé" + - "détails" + - "larry" + - "direct" + - "reposer" + - "commande" + - "cherchez" + - "fer" + - "conduit" + - "conscience" + - "oreilles" + - "conversation" + - "regardes" + - "joues" + - "ennemis" + - "attendent" + - "article" + - "dieux" + - "talent" + - "aise" + - "poulet" + - "passée" + - "comprend" + - "gorge" + - "feras" + - "tribunal" + - "découvrir" + - "agréable" + - "jette" + - "test" + - "emmerde" + - "détruit" + - "nerveux" + - "saint" + - "marrant" + - "joindre" + - "sentiment" + - "lance" + - "humaine" + - "acte" + - "jane" + - "pis" + - "enculé" + - "tuée" + - "saura" + - "doigt" + - "pourrez" + - "passera" + - "horreur" + - "comptes" + - "dernières" + - "violence" + - "fumer" + - "invités" + - "parlais" + - "job" + - "salon" + - "défendre" + - "mariés" + - "rock" + - "apporter" + - "coupé" + - "repos" + - "paquet" + - "page" + - "utilise" + - "victimes" + - "sage" + - "aidé" + - "intelligent" + - "ombre" + - "vache" + - "désert" + - "forêt" + - "parfaite" + - "tombée" + - "extérieur" + - "entré" + - "série" + - "concerne" + - "paroles" + - "dira" + - "it" + - "champion" + - "fbi" + - "lundi" + - "moteur" + - "ouverte" + - "mince" + - "al" + - "russe" + - "grandi" + - "rappelles" + - "dormi" + - "ordinateur" + - "in" + - "angeles" + - "accepté" + - "désormais" + - "acteur" + - "membres" + - "trouvée" + - "pete" + - "surpris" + - "miracle" + - "vole" + - "manquer" + - "franchement" + - "apprécie" + - "cigarette" + - "chemise" + - "mark" + - "tente" + - "faisant" + - "billet" + - "reculez" + - "moyens" + - "importante" + - "unité" + - "champagne" + - "pensait" + - "www" + - "partager" + - "smith" + - "minuit" + - "américaine" + - "courses" + - "puissance" + - "william" + - "nombreux" + - "réparer" + - "caché" + - "haute" + - "sommeil" + - "essence" + - "riches" + - "lac" + - "maire" + - "mode" + - "vingt" + - "reviendra" + - "pousse" + - "amusant" + - "passez" + - "services" + - "doc" + - "rues" + - "of" + - "risques" + - "émission" + - "leçon" + - "annonce" + - "plans" + - "usine" + - "louis" + - "imaginer" + - "chauffeur" + - "marque" + - "parc" + - "épée" + - "fesses" + - "échange" + - "souvenirs" + - "créer" + - "senti" + - "signer" + - "artiste" + - "jeté" + - "réveiller" + - "hiver" + - "également" + - "hum" + - "souffle" + - "vrais" + - "arbres" + - "saute" + - "fuir" + - "meme" + - "battu" + - "permission" + - "casser" + - "chicago" + - "allemands" + - "utilisé" + - "mentir" + - "souci" + - "é" + - "coûte" + - "paye" + - "tres" + - "offert" + - "sir" + - "no" + - "chair" + - "caisse" + - "supplie" + - "dégagez" + - "raconté" + - "andy" + - "lunettes" + - "chouette" + - "menteur" + - "trouvera" + - "semblant" + - "ignorais" + - "perdue" + - "whisky" + - "rentrez" + - "premiers" + - "pantalon" + - "menace" + - "racontes" + - "douche" + - "oiseaux" + - "finie" + - "auront" + - "débarrasser" + - "membre" + - "perte" + - "verrez" + - "front" + - "lèvres" + - "mai" + - "fac" + - "allo" + - "connaissais" + - "gouverneur" + - "monnaie" + - "chou" + - "achète" + - "thomas" + - "secrétaire" + - "montré" + - "jones" + - "écris" + - "parlent" + - "chaise" + - "herbe" + - "créé" + - "manteau" + - "chocolat" + - "pause" + - "côte" + - "abandonner" + - "policier" + - "patient" + - "dave" + - "études" + - "ballon" + - "mène" + - "respire" + - "mouvement" + - "suicide" + - "japonais" + - "accès" + - "tienne" + - "laisserai" + - "poupée" + - "innocent" + - "allés" + - "identité" + - "véritable" + - "simon" + - "devenue" + - "totalement" + - "piège" + - "gloire" + - "pourraient" + - "abri" + - "explique" + - "rapidement" + - "fonctionne" + - "boy" + - "foule" + - "pensées" + - "maisons" + - "fantôme" + - "source" + - "lancer" + - "suit" + - "changement" + - "choc" + - "veste" + - "attaquer" + - "faveur" + - "oreille" + - "touchez" + - "malheureusement" + - "soudain" + - "tués" + - "bref" + - "malheur" + - "portable" + - "chaleur" + - "mensonge" + - "répondez" + - "heureusement" + - "emploi" + - "lois" + - "nettoyer" + - "attrape" + - "geste" + - "verrai" + - "notes" + - "plat" + - "etait" + - "corde" + - "sacrée" + - "cherches" + - "siècle" + - "etat" + - "distance" + - "refusé" + - "mars" + - "saison" + - "bel" + - "monté" + - "idiote" + - "recherches" + - "alerte" + - "ennuie" + - "christ" + - "remonte" + - "plaisante" + - "city" + - "bat" + - "images" + - "voulaient" + - "titres" + - "alice" + - "couverture" + - "moments" + - "big" + - "mesure" + - "atteindre" + - "singe" + - "pistolet" + - "frontière" + - "réel" + - "réfléchi" + - "somme" + - "agents" + - "ours" + - "prisonniers" + - "évidemment" + - "afrique" + - "allemand" + - "dan" + - "couche" + - "relations" + - "texas" + - "delà" + - "celles" + - "navire" + - "deviens" + - "bite" + - "laisses" + - "dirige" + - "partenaire" + - "aube" + - "demi" + - "affreux" + - "camarade" + - "street" + - "inquiéter" + - "tableau" + - "fatiguée" + - "entreprise" + - "demandes" + - "nana" + - "re" + - "coincé" + - "tenu" + - "viré" + - "suspect" + - "reconnais" + - "ressens" + - "juif" + - "directement" + - "mexique" + - "cherché" + - "marine" + - "prisonnier" + - "finit" + - "howard" + - "étoile" + - "jean" + - "convaincre" + - "filer" + - "kevin" + - "bosse" + - "pousser" + - "protection" + - "signé" + - "crier" + - "rêvé" + - "respirer" + - "propriétaire" + - "prêtre" + - "donnes" + - "taire" + - "permettre" + - "prudent" + - "carl" + - "commis" + - "chaîne" + - "copains" + - "sec" + - "cauchemar" + - "laver" + - "hollywood" + - "jeff" + - "réfléchis" + - "trompe" + - "hais" + - "immeuble" + - "supporter" + - "soi" + - "bagages" + - "tir" + - "traverser" + - "commissaire" + - "mac" + - "donnerai" + - "reviendrai" + - "larmes" + - "déranger" + - "arthur" + - "pigé" + - "réserve" + - "adam" + - "volant" + - "uniforme" + - "st" + - "croient" + - "différents" + - "souffrir" + - "maudit" + - "valise" + - "prendrai" + - "assurance" + - "abandonné" + - "dames" + - "lendemain" + - "navré" + - "prennent" + - "sénateur" + - "roule" + - "montagnes" + - "lapin" + - "juifs" + - "amuse" + - "espérais" + - "fleur" + - "merveilleuse" + - "tournée" + - "scott" + - "information" + - "foyer" + - "tourné" + - "personnage" + - "permettez" + - "amitié" + - "hâte" + - "opinion" + - "curieux" + - "concert" + - "enfance" + - "extraordinaire" + - "davantage" + - "saviez" + - "chargé" + - "porc" + - "recommence" + - "chèque" + - "piano" + - "jouez" + - "océan" + - "ayant" + - "go" + - "pattes" + - "ravie" + - "trace" + - "réveillé" + - "miles" + - "soupe" + - "sucre" + - "écoutes" + - "vierge" + - "mauvaises" + - "objet" + - "adorable" + - "chine" + - "sonne" + - "envoyez" + - "réputation" + - "kate" + - "sport" + - "brave" + - "lieux" + - "brûle" + - "russes" + - "murs" + - "second" + - "etes" + - "facilement" + - "troupes" + - "titrage" + - "canon" + - "bague" + - "bâtiment" + - "seraient" + - "cellule" + - "susan" + - "survivre" + - "trouverai" + - "printemps" + - "voisins" + - "nuits" + - "chances" + - "contrôler" + - "compliqué" + - "voyais" + - "retirer" + - "ancienne" + - "théorie" + - "avancez" + - "studio" + - "exploser" + - "explosion" + - "fiancée" + - "évident" + - "gardé" + - "accusé" + - "annie" + - "témoins" + - "désir" + - "humanité" + - "amen" + - "magie" + - "restera" + - "palais" + - "cirque" + - "cinglé" + - "conduis" + - "sales" + - "traces" + - "station" + - "construire" + - "joey" + - "siège" + - "kelly" + - "semblait" + - "vivants" + - "voient" + - "représente" + - "sombre" + - "lourd" + - "lá" + - "familles" + - "égal" + - "surveille" + - "terme" + - "gêne" + - "poule" + - "pére" + - "devraient" + - "soif" + - "haine" + - "rachel" + - "jason" + - "surveiller" + - "ted" + - "marin" + - "procureur" + - "traité" + - "vivent" + - "chansons" + - "souvenez" + - "entière" + - "résultat" + - "préparé" + - "top" + - "enchantée" + - "gardien" + - "traite" + - "avancer" + - "commun" + - "pêche" + - "tien" + - "posé" + - "libérer" + - "gamins" + - "taule" + - "retournez" + - "médicaments" + - "matériel" + - "crâne" + - "région" + - "débile" + - "science" + - "délicieux" + - "privée" + - "créature" + - "ho" + - "ed" + - "king" + - "liquide" + - "réglé" + - "gay" + - "apprend" + - "quant" + - "péché" + - "répéter" + - "auprès" + - "tâche" + - "devine" + - "mener" + - "vente" + - "plu" + - "joueur" + - "modèle" + - "aurons" + - "up" + - "mensonges" + - "fermez" + - "traiter" + - "secteur" + - "soyons" + - "barre" + - "appelée" + - "projets" + - "roman" + - "veille" + - "étudier" + - "tenue" + - "physique" + - "passait" + - "concours" + - "jaune" + - "inconnu" + - "victor" + - "vision" + - "black" + - "lentement" + - "surface" + - "dick" + - "com" + - "matt" + - "kilomètres" + - "baise" + - "x" + - "sers" + - "abandonne" + - "vivante" + - "spéciale" + - "prof" + - "poissons" + - "bosser" + - "cherchais" + - "my" + - "empire" + - "cigarettes" + - "amies" + - "aventure" + - "responsabilité" + - "sauve" + - "devrions" + - "lucy" + - "atteint" + - "infirmière" + - "humeur" + - "descendez" + - "résultats" + - "tenté" + - "baisse" + - "mn" + - "rare" + - "empreintes" + - "proches" + - "sauvage" + - "virer" + - "fumée" + - "lisa" + - "engagé" + - "romantique" + - "cloche" + - "brian" + - "magique" + - "chers" + - "comité" + - "choisis" + - "voila" + - "jaloux" + - "divorce" + - "lord" + - "données" + - "détective" + - "rouges" + - "fred" + - "ambulance" + - "rentrée" + - "port" + - "anne" + - "roy" + - "cochon" + - "enfuir" + - "devra" + - "francisco" + - "ménage" + - "roger" + - "particulier" + - "journaliste" + - "croix" + - "pareille" + - "royaume" + - "disparaître" + - "jus" + - "comte" + - "sainte" + - "soucis" + - "allemagne" + - "patience" + - "fallu" + - "net" + - "suivez" + - "panique" + - "q" + - "morceaux" + - "construit" + - "crédit" + - "rater" + - "normale" + - "attendait" + - "bye" + - "fromage" + - "embrasse" + - "complet" + - "bouffe" + - "boutique" + - "seriez" + - "recommencer" + - "scénario" + - "jeudi" + - "endroits" + - "brûler" + - "nommé" + - "mardi" + - "hall" + - "réalisé" + - "terry" + - "passion" + - "enlevé" + - "profond" + - "télévision" + - "abruti" + - "réussir" + - "répond" + - "red" + - "emmené" + - "cadeaux" + - "remonter" + - "accompagner" + - "johnson" + - "différente" + - "tromper" + - "pot" + - "lien" + - "serpent" + - "imaginez" + - "excusez" + - "trompé" + - "cadavre" + - "bouton" + - "cancer" + - "descend" + - "centaines" + - "poussière" + - "piscine" + - "entraînement" + - "terminée" + - "tapis" + - "esprits" + - "phil" + - "inviter" + - "œuvre" + - "imagination" + - "chut" + - "park" + - "existence" + - "empereur" + - "décide" + - "eric" + - "ascenseur" + - "criminel" + - "révolution" + - "principal" + - "terres" + - "charmante" + - "promesse" + - "période" + - "craint" + - "croyait" + - "courrier" + - "récemment" + - "écran" + - "anciens" + - "cris" + - "passes" + - "combattre" + - "réveille" + - "feront" + - "élevé" + - "têtes" + - "souffre" + - "quiconque" + - "malheureux" + - "césar" + - "arrives" + - "empêche" + - "brisé" + - "garage" + - "russie" + - "jackson" + - "bêtes" + - "tenter" + - "excellente" + - "passent" + - "ferez" + - "pub" + - "logique" + - "version" + - "permet" + - "parte" + - "temple" + - "section" + - "rythme" + - "propriété" + - "étrangers" + - "finis" + - "erreurs" + - "feriez" + - "propose" + - "examen" + - "nation" + - "approchez" + - "différentes" + - "traduction" + - "reconnu" + - "cap" + - "meurtres" + - "courageux" + - "profiter" + - "juré" + - "miel" + - "poil" + - "rapports" + - "chic" + - "fonds" + - "aimerait" + - "sable" + - "lutte" + - "fière" + - "is" + - "japon" + - "douze" + - "labo" + - "ya" + - "agence" + - "cependant" + - "indiens" + - "donnera" + - "restent" + - "ceinture" + - "seins" + - "étonnant" + - "uns" + - "nourrir" + - "inventé" + - "sérieuse" + - "ment" + - "pratique" + - "invite" + - "potes" + - "meurtrier" + - "vegas" + - "idéal" + - "maîtresse" + - "central" + - "fume" + - "équipage" + - "brillant" + - "trouvent" + - "crie" + - "laura" + - "commission" + - "nager" + - "boit" + - "bombes" + - "figure" + - "revolver" + - "crème" + - "rat" + - "tempête" + - "refaire" + - "née" + - "supporte" + - "crever" + - "conduite" + - "lci" + - "brown" + - "pure" + - "traitement" + - "porté" + - "voyait" + - "cabine" + - "fuite" + - "nationale" + - "estomac" + - "machines" + - "julie" + - "couloir" + - "emily" + - "ouah" + - "bijoux" + - "lâcher" + - "acteurs" + - "sentez" + - "couleurs" + - "naturel" + - "travaillait" + - "wilson" + - "incendie" + - "camarades" + - "chute" + - "accompagne" + - "passés" + - "médecins" + - "revenue" + - "peinture" + - "reconnaître" + - "dollar" + - "coupez" + - "prénom" + - "puce" + - "pur" + - "prier" + - "actions" + - "voisin" + - "officiers" + - "prévenu" + - "chaude" + - "bains" + - "démon" + - "pierres" + - "miroir" + - "forcément" + - "lumières" + - "actrice" + - "jouait" + - "vérifie" + - "comportement" + - "avoue" + - "aient" + - "buvez" + - "calmer" + - "amy" + - "technique" + - "nôtres" + - "obtenu" + - "autrefois" + - "parlera" + - "ryan" + - "boss" + - "parier" + - "correct" + - "septembre" + - "libres" + - "affronter" + - "doué" + - "appellent" + - "repose" + - "conditions" + - "parfum" + - "protège" + - "tasse" + - "pensée" + - "salaire" + - "bagnole" + - "infos" + - "jolies" + - "récompense" + - "kim" + - "essayons" + - "ordinaire" + - "jeunesse" + - "musée" + - "bébés" + - "chuck" + - "plaisantes" + - "absence" + - "aiors" + - "échappé" + - "fausse" + - "jury" + - "étudiants" + - "approcher" + - "espagne" + - "aprés" + - "blonde" + - "condition" + - "race" + - "vend" + - "absurde" + - "masque" + - "appellerai" + - "pardonner" + - "pouvoirs" + - "laissée" + - "annoncer" + - "origine" + - "el" + - "apprends" + - "poitrine" + - "tape" + - "remis" + - "couvert" + - "large" + - "prenons" + - "pressé" + - "nu" + - "loup" + - "urgent" + - "attente" + - "bêtises" + - "appels" + - "mystère" + - "travailles" + - "vélo" + - "vends" + - "armé" + - "réaction" + - "flotte" + - "bleue" + - "foot" + - "foutez" + - "virus" + - "oeufs" + - "élève" + - "daniel" + - "êtres" + - "vengeance" + - "stan" + - "essayais" + - "minable" + - "cérémonie" + - "gordon" + - "uniquement" + - "salauds" + - "alan" + - "froide" + - "helen" + - "portée" + - "disque" + - "attaqué" + - "résoudre" + - "moche" + - "scientifique" + - "colle" + - "lady" + - "maximum" + - "déclaration" + - "installer" + - "blessés" + - "effort" + - "iras" + - "commandement" + - "panne" + - "visiter" + - "disiez" + - "venais" + - "pointe" + - "moque" + - "chambres" + - "convaincu" + - "raisonnable" + - "aiiez" + - "rencontrés" + - "qualité" + - "aimée" + - "irait" + - "épousé" + - "attitude" + - "joseph" + - "esclave" + - "milliards" + - "guide" + - "oeuvre" + - "humour" + - "bible" + - "boule" + - "sacs" + - "avocats" + - "yo" + - "meurent" + - "connaissait" + - "union" + - "ex" + - "sally" + - "blesser" + - "taylor" + - "maggie" + - "perdus" + - "malades" + - "jungle" + - "jugement" + - "essai" + - "écrivain" + - "digne" + - "survécu" + - "julia" + - "vérifié" + - "linda" + - "brûlé" + - "noble" + - "sauté" + - "gâcher" + - "inquiet" + - "enterrement" + - "prenne" + - "site" + - "engager" + - "rayon" + - "traîner" + - "rang" + - "traître" + - "berlin" + - "parlant" + - "orange" + - "jenny" + - "voudras" + - "sentais" + - "bourse" + - "élèves" + - "manques" + - "faisaient" + - "partage" + - "légende" + - "cave" + - "voleurs" + - "fruits" + - "préviens" + - "connaissent" + - "venant" + - "policiers" + - "paire" + - "pommes" + - "meilleures" + - "cassette" + - "sommet" + - "remplacer" + - "objets" + - "idiots" + - "cage" + - "saurais" + - "limite" + - "ailes" + - "explication" + - "ô" + - "bond" + - "floride" + - "travaillez" + - "carter" + - "conseiller" + - "portait" + - "condamné" + - "voyant" + - "recule" + - "bénisse" + - "associé" + - "auteur" + - "écouté" + - "sorcière" + - "edward" + - "livrer" + - "plainte" + - "réellement" + - "albert" + - "adulte" + - "pile" + - "communauté" + - "mandat" + - "éducation" + - "ramené" + - "réponses" + - "bagarre" + - "escalier" + - "naturellement" + - "désire" + - "lignes" + - "incident" + - "kilos" + - "rats" + - "quinze" + - "parties" + - "véhicule" + - "wayne" + - "chasser" + - "bottes" + - "objectif" + - "patients" + - "suivante" + - "respecte" + - "attrapé" + - "junior" + - "colline" + - "professionnel" + - "devoirs" + - "conseils" + - "effets" + - "fichu" + - "blessure" + - "messages" + - "baby" + - "crimes" + - "moscou" + - "villes" + - "voudra" + - "moto" + - "domaine" + - "organisation" + - "aimable" + - "forts" + - "eue" + - "exercice" + - "voyager" + - "arrestation" + - "fasses" + - "pizza" + - "barbe" + - "french" + - "dossiers" + - "tunnel" + - "voudrez" + - "arrivait" + - "roses" + - "amiral" + - "cabinet" + - "mére" + - "poursuivre" + - "forcé" + - "huile" + - "grosses" + - "ranger" + - "furieux" + - "vivait" + - "aidera" + - "géant" + - "tim" + - "tours" + - "retire" + - "vote" + - "autorisation" + - "risqué" + - "hitler" + - "rond" + - "show" + - "territoire" + - "venger" + - "exprès" + - "tuerai" + - "anges" + - "classique" + - "soutien" + - "rentres" + - "tokyo" + - "proposition" + - "love" + - "tests" + - "pétrole" + - "réaliser" + - "sortira" + - "soirs" + - "ministère" + - "magazine" + - "verres" + - "échec" + - "vieilles" + - "pourrions" + - "bol" + - "plaire" + - "miller" + - "respecter" + - "cons" + - "golf" + - "bibliothèque" + - "attirer" + - "drapeau" + - "possède" + - "production" + - "conférence" + - "efforts" + - "pere" + - "putains" + - "précieux" + - "religion" + - "rêver" + - "épreuve" + - "retenir" + - "football" + - "frankie" + - "échoué" + - "pisser" + - "barry" + - "sortes" + - "circonstances" + - "kong" + - "mignonne" + - "excellence" + - "auto" + - "do" + - "vague" + - "arrêtes" + - "nôtre" + - "vallée" + - "morgan" + - "enterré" + - "tandis" + - "duc" + - "pêre" + - "assassiné" + - "ooo" + - "charme" + - "quart" + - "arrangé" + - "guitare" + - "remplir" + - "sophie" + - "crève" + - "jesse" + - "bruce" + - "sara" + - "refuser" + - "donnent" + - "luke" + - "taper" + - "critique" + - "secrète" + - "terminer" + - "hauteur" + - "comédie" + - "cimetière" + - "baisé" + - "cardiaque" + - "catherine" + - "chiffres" + - "fêter" + - "trouverez" + - "indien" + - "altesse" + - "occupée" + - "intelligente" + - "culture" + - "deviner" + - "géniale" + - "limites" + - "nancy" + - "précis" + - "éternité" + - "ball" + - "plateau" + - "prises" + - "viendrai" + - "rempli" + - "clairement" + - "intérêts" + - "langage" + - "aides" + - "feux" + - "betty" + - "copie" + - "profondément" + - "fâché" + - "incapable" + - "mercredi" + - "souffrance" + - "avouer" + - "mile" + - "posez" + - "lion" + - "ali" + - "soigner" + - "fenêtres" + - "pue" + - "électrique" + - "italien" + - "traversé" + - "réception" + - "énerve" + - "rentrons" + - "couvrir" + - "fonce" + - "harvey" + - "kyle" + - "produits" + - "loyer" + - "grace" + - "bleus" + - "assistant" + - "cervelle" + - "trente" + - "yeah" + - "saches" + - "national" + - "avenue" + - "evidemment" + - "reçois" + - "cité" + - "liaison" + - "prouve" + - "collier" + - "aprês" + - "séance" + - "placard" + - "criminels" + - "irais" + - "riz" + - "sandwich" + - "boston" + - "parlerai" + - "places" + - "stade" + - "gagnant" + - "moral" + - "tendre" + - "fleuve" + - "mêre" + - "stanley" + - "trouvait" + - "auparavant" + - "personnellement" + - "fièvre" + - "champs" + - "tuera" + - "chatte" + - "actes" + - "restait" + - "amant" + - "concernant" + - "las" + - "ferons" + - "cherchent" + - "tenait" + - "exécution" + - "ann" + - "lou" + - "pédé" + - "prière" + - "hélas" + - "sortent" + - "bateaux" + - "allaient" + - "durer" + - "assise" + - "alarme" + - "commencez" + - "furent" + - "prenait" + - "brad" + - "entièrement" + - "médecine" + - "juillet" + - "sortis" + - "sensible" + - "poudre" + - "finale" + - "plais" + - "durs" + - "discussion" + - "séparer" + - "esclaves" + - "instructions" + - "beurre" + - "documents" + - "taré" + - "rick" + - "détail" + - "baron" + - "mettent" + - "congrès" + - "épaule" + - "poison" + - "final" + - "métro" + - "attendrai" + - "serment" + - "chan" + - "pardonne" + - "espagnol" + - "supérieur" + - "w" + - "degrés" + - "rires" + - "west" + - "parker" + - "tuez" + - "œufs" + - "fiancé" + - "nerfs" + - "portefeuille" + - "robot" + - "internet" + - "expert" + - "hank" + - "surveillance" + - "foutue" + - "rita" + - "réalisateur" + - "entraîner" + - "martha" + - "descendu" + - "patrick" + - "comté" + - "congé" + - "finira" + - "caméras" + - "sauce" + - "balance" + - "destruction" + - "moderne" + - "carlos" + - "extrêmement" + - "âmes" + - "expression" + - "marchera" + - "commerce" + - "ivre" + - "salopard" + - "appétit" + - "dette" + - "all" + - "promener" + - "employés" + - "admettre" + - "producteur" + - "attendons" + - "quittez" + - "brise" + - "wow" + - "juin" + - "chats" + - "remets" + - "ajouter" + - "couler" + - "pasteur" + - "alliez" + - "portrait" + - "heu" + - "by" + - "lancé" + - "diamants" + - "donnée" + - "avantage" + - "fidèle" + - "juger" + - "renseignements" + - "gang" + - "loué" + - "réseau" + - "ouverture" + - "travaux" + - "poussé" + - "division" + - "invitation" + - "repartir" + - "trous" + - "rappelez" + - "totale" + - "solide" + - "réservé" + - "willie" + - "autorité" + - "fermée" + - "munitions" + - "neveu" + - "diras" + - "téléphoner" + - "briser" + - "siècles" + - "nerveuse" + - "bonbons" + - "blé" + - "pourri" + - "puits" + - "fantômes" + - "termine" + - "monstres" + - "écraser" + - "espérons" + - "bétail" + - "miens" + - "changera" + - "adultes" + - "restée" + - "total" + - "fierté" + - "pari" + - "sein" + - "cessez" + - "elizabeth" + - "exige" + - "étudiant" + - "jackie" + - "démarre" + - "lâchez" + - "marty" + - "passons" + - "vic" + - "semblez" + - "gérer" + - "électricité" + - "invitée" + - "injuste" + - "désirez" + - "lampe" + - "normalement" + - "causer" + - "dalle" + - "mondiale" + - "comptez" + - "rouler" + - "filmer" + - "rapporte" + - "sourd" + - "trouveras" + - "alliance" + - "convient" + - "rage" + - "habitants" + - "mamie" + - "nuages" + - "hmm" + - "trahi" + - "biens" + - "lewis" + - "tournage" + - "créatures" + - "militaires" + - "blessures" + - "barbara" + - "louise" + - "règlement" + - "grant" + - "étudié" + - "courez" + - "habiller" + - "soeurs" + - "soins" + - "célibataire" + - "veuve" + - "canada" + - "dépêche" + - "progrès" + - "dégoûtant" + - "fan" + - "matière" + - "avril" + - "molly" + - "cercle" + - "davis" + - "nucléaire" + - "pervers" + - "échelle" + - "adorer" + - "trouvais" + - "orchestre" + - "déposer" + - "cadavres" + - "échappe" + - "emprunter" + - "exprimer" + - "caractère" + - "libéré" + - "signes" + - "fêtes" + - "vedette" + - "lisez" + - "commençons" + - "robin" + - "généreux" + - "méchants" + - "formation" + - "bâton" + - "timide" + - "gentils" + - "premières" + - "passagers" + - "immense" + - "serviette" + - "mangez" + - "diriger" + - "passant" + - "ruth" + - "min" + - "préférée" + - "perdez" + - "plaque" + - "espion" + - "connue" + - "eaux" + - "deviennent" + - "emporter" + - "gary" + - "cruel" + - "citoyens" + - "von" + - "tension" + - "ranch" + - "karen" + - "business" + - "your" + - "organiser" + - "étonne" + - "terroristes" + - "that" + - "micro" + - "ordure" + - "léger" + - "température" + - "unités" + - "populaire" + - "joueurs" + - "beth" + - "vincent" + - "voies" + - "regardais" + - "saloperie" + - "traverse" + - "intelligence" + - "expériences" + - "miami" + - "opérations" + - "santa" + - "arrange" + - "dragon" + - "sûrs" + - "enterrer" + - "pouviez" + - "craindre" + - "mortel" + - "issue" + - "demeure" + - "mouche" + - "donna" + - "octobre" + - "commandé" + - "passeport" + - "dés" + - "couronne" + - "oublierai" + - "accusation" + - "procédure" + - "rendez" + - "objection" + - "retourné" + - "relax" + - "publique" + - "appart" + - "imagines" + - "jouent" + - "inde" + - "travaillent" + - "essaies" + - "lincoln" + - "psy" + - "vince" + - "manuel" + - "étranges" + - "apres" + - "nombreuses" + - "crainte" + - "fit" + - "asile" + - "cherchait" + - "branche" + - "groupes" + - "white" + - "hop" + - "tradition" + - "sel" + - "centrale" + - "déçu" + - "tentative" + - "négatif" + - "autorités" + - "buter" + - "connerie" + - "proposé" + - "manières" + - "plaindre" + - "employé" + - "blessée" + - "influence" + - "forcer" + - "bonté" + - "marcus" + - "cia" + - "sauvages" + - "personnelle" + - "couvre" + - "coucou" + - "audience" + - "out" + - "savaient" + - "entretien" + - "bouffer" + - "ouai" + - "impressionnant" + - "acier" + - "renvoyer" + - "salade" + - "collègues" + - "chefs" + - "guérir" + - "entendue" + - "sœurs" + - "êtait" + - "semblent" + - "participer" + - "coule" + - "dépasse" + - "réunis" + - "plairait" + - "enlevez" + - "trompes" + - "résister" + - "technologie" + - "patrie" + - "conséquences" + - "margaret" + - "cousine" + - "habits" + - "splendide" + - "ross" + - "pipe" + - "abattu" + - "cran" + - "nue" + - "tuyau" + - "accueillir" + - "découverte" + - "arracher" + - "régime" + - "reçoit" + - "album" + - "levez" + - "piqué" + - "original" + - "remise" + - "allume" + - "promotion" + - "juan" + - "examiner" + - "franc" + - "filé" + - "éteint" + - "canapé" + - "commander" + - "dessin" + - "guère" + - "interroger" + - "oscar" + - "paraître" + - "découvre" + - "département" + - "vise" + - "obéir" + - "renforts" + - "lily" + - "événements" + - "innocents" + - "ç" + - "organisé" + - "sain" + - "devras" + - "reprends" + - "goutte" + - "cole" + - "souffert" + - "excitant" + - "façons" + - "saurai" + - "charlotte" + - "sou" + - "réveil" + - "ken" + - "benny" + - "usa" + - "volée" + - "préférerais" + - "suprême" + - "tarte" + - "changent" + - "revienne" + - "solitaire" + - "cravate" + - "rocky" + - "vérifiez" + - "ose" + - "souper" + - "événement" + - "remarque" + - "chevalier" + - "suffisamment" + - "charger" + - "produire" + - "repris" + - "record" + - "carol" + - "williams" + - "jo" + - "préparez" + - "garce" + - "mêle" + - "étape" + - "motel" + - "pro" + - "autorisé" + - "principale" + - "clinique" + - "devenus" + - "italie" + - "intéressante" + - "jonathan" + - "abattre" + - "ère" + - "invisible" + - "dégâts" + - "clark" + - "élever" + - "suggère" + - "rigole" + - "dent" + - "éclater" + - "tabac" + - "disques" + - "manquait" + - "contacter" + - "valait" + - "fusils" + - "émotions" + - "queje" + - "publicité" + - "simples" + - "éléments" + - "exception" + - "sincère" + - "rattraper" + - "efficace" + - "éteindre" + - "linge" + - "goûter" + - "nathan" + - "possibilité" + - "canard" + - "marqué" + - "caporal" + - "déplacer" + - "devrez" + - "morale" + - "insiste" + - "katie" + - "parking" + - "identifier" + - "pouvaient" + - "personnages" + - "cabane" + - "intéressé" + - "stylo" + - "adoré" + - "attaché" + - "cri" + - "kg" + - "angle" + - "séparés" + - "traîne" + - "instinct" + - "déclaré" + - "sire" + - "pleut" + - "séjour" + - "ordures" + - "raymond" + - "délire" + - "pires" + - "rumeurs" + - "fauteuil" + - "coûté" + - "adjoint" + - "stephen" + - "collègue" + - "one" + - "poches" + - "novembre" + - "illégal" + - "restons" + - "bonhomme" + - "appuie" + - "difficiles" + - "laissera" + - "courte" + - "lâ" + - "tuent" + - "lot" + - "levé" + - "seules" + - "vivez" + - "personnalité" + - "leo" + - "scandale" + - "conclu" + - "frigo" + - "admire" + - "aïe" + - "tragédie" + - "oblige" + - "commandes" + - "pénis" + - "boue" + - "dettes" + - "enseigne" + - "obscurité" + - "pages" + - "chapitre" + - "violent" + - "signature" + - "conseille" + - "vendeur" + - "visages" + - "rarement" + - "essayait" + - "serré" + - "mères" + - "tels" + - "halte" + - "collection" + - "désastre" + - "noix" + - "mourra" + - "rejoins" + - "reconnaissance" + - "blagues" + - "duke" + - "méthode" + - "bienvenu" + - "donnait" + - "gratuit" + - "boîtes" + - "marches" + - "brooklyn" + - "valises" + - "enfermé" + - "gants" + - "rompu" + - "coïncidence" + - "vilain" + - "poing" + - "britannique" + - "dispute" + - "trahison" + - "téléphoné" + - "août" + - "feuilles" + - "quatrième" + - "révérend" + - "censée" + - "devaient" + - "placé" + - "ténèbres" + - "enfui" + - "impliqué" + - "vire" + - "pilules" + - "préfères" + - "for" + - "population" + - "manges" + - "pleuré" + - "chasseur" + - "livraison" + - "reprend" + - "emporte" + - "louer" + - "mette" + - "bizarres" + - "torture" + - "remarquable" + - "termes" + - "journalistes" + - "honnêtement" + - "câble" + - "longs" + - "estime" + - "démons" + - "impôts" + - "massacre" + - "pomme" + - "autoroute" + - "sociale" + - "moyenne" + - "ingénieur" + - "doug" + - "péchés" + - "laissent" + - "tarder" + - "divine" + - "éloigner" + - "clan" + - "obligée" + - "xena" + - "merveille" + - "concentrer" + - "venons" + - "opéra" + - "oxygène" + - "sexuel" + - "industrie" + - "aimerai" + - "z" + - "sortons" + - "accent" + - "lawrence" + - "gris" + - "sean" + - "mesures" + - "batterie" + - "toast" + - "postes" + - "communication" + - "manche" + - "grandir" + - "banques" + - "tonnes" + - "gentleman" + - "zut" + - "numéros" + - "officiel" + - "chariot" + - "otages" + - "prime" + - "poésie" + - "annuler" + - "jersey" + - "chagrin" + - "ellen" + - "déconne" + - "fabuleux" + - "dennis" + - "complexe" + - "trafic" + - "trouille" + - "us" + - "débrouiller" + - "commencent" + - "cinquante" + - "vraies" + - "discute" + - "communiste" + - "francs" + - "sacrifice" + - "française" + - "foie" + - "statue" + - "résistance" + - "mettra" + - "volontiers" + - "drogues" + - "cercueil" + - "pendu" + - "ignorer" + - "tireur" + - "eut" + - "piquer" + - "creuser" + - "médaille" + - "crée" + - "équipement" + - "phase" + - "chaos" + - "salue" + - "survie" + - "défi" + - "trouvés" + - "rencontrée" + - "boum" + - "longues" + - "telles" + - "arriverai" + - "gâché" + - "harris" + - "brigade" + - "fiers" + - "ennuyeux" + - "cieux" + - "contient" + - "aile" + - "oignons" + - "vaches" + - "sensation" + - "chanceux" + - "angela" + - "gamine" + - "cooper" + - "cessé" + - "tina" + - "ressemblait" + - "plante" + - "scènes" + - "solitude" + - "activité" + - "mobile" + - "principe" + - "rejoint" + - "économie" + - "armés" + - "plastique" + - "regardent" + - "chant" + - "verte" + - "couru" + - "regardait" + - "ford" + - "besoins" + - "terroriste" + - "assister" + - "bail" + - "roue" + - "putes" + - "sachez" + - "harold" + - "amenez" + - "génération" + - "causé" + - "entraîneur" + - "rigoles" + - "amanda" + - "présenté" + - "trompez" + - "mordu" + - "vampire" + - "jacques" + - "fans" + - "bourré" + - "éliminer" + - "enfoirés" + - "freddy" + - "bloc" + - "pourvu" + - "décisions" + - "eve" + - "jacob" + - "symbole" + - "croirait" + - "sagesse" + - "politiques" + - "taux" + - "nègre" + - "jetez" + - "malédiction" + - "masse" + - "phrase" + - "pompes" + - "reconnaissant" + - "pension" + - "renoncer" + - "sexuelle" + - "regardant" + - "ordonne" + - "four" + - "règne" + - "saut" + - "terreur" + - "avaler" + - "ongles" + - "pratiquement" + - "laissons" + - "jalouse" + - "outils" + - "espérer" + - "tueurs" + - "terriblement" + - "charité" + - "prêtes" + - "écriture" + - "oublies" + - "adorent" + - "etje" + - "luxe" + - "irez" + - "ambassadeur" + - "bush" + - "arrêtera" + - "informer" + - "orage" + - "revenus" + - "pisse" + - "renvoyé" + - "sachant" + - "tombes" + - "rois" + - "époux" + - "accueil" + - "relève" + - "judy" + - "aidez" + - "môme" + - "diego" + - "atmosphère" + - "routes" + - "ravissante" + - "coach" + - "ennui" + - "suffisant" + - "poème" + - "jouets" + - "jennifer" + - "usage" + - "prières" + - "revue" + - "adaptation" + - "suffira" + - "collège" + - "singes" + - "otage" + - "apprécier" + - "diplôme" + - "bâtard" + - "destination" + - "analyse" + - "caroline" + - "demandent" + - "décembre" + - "côtes" + - "casier" + - "fermes" + - "patrouille" + - "royal" + - "tit" + - "mérites" + - "texte" + - "jusque" + - "tigre" + - "çà" + - "be" + - "médical" + - "ieur" + - "svp" + - "ron" + - "pouce" + - "plaisantez" + - "requin" + - "essentiel" + - "espèces" + - "fruit" + - "came" + - "cesser" + - "allen" + - "teddy" + - "annulé" + - "dangereuse" + - "poète" + - "nanas" + - "tiendra" + - "emmenez" + - "passerai" + - "automne" + - "habillé" + - "guerrier" + - "pique" + - "savon" + - "satisfait" + - "sépare" + - "agi" + - "ordonné" + - "serre" + - "neil" + - "cassée" + - "deviez" + - "arts" + - "ramasser" + - "anthony" + - "baisser" + - "pirates" + - "avertir" + - "menacé" + - "so" + - "détendre" + - "rembourser" + - "fabrique" + - "métal" + - "expliqué" + - "lecture" + - "josh" + - "attire" + - "carrément" + - "irons" + - "mere" + - "combats" + - "pensons" + - "mélange" + - "travaillais" + - "syndicat" + - "queique" + - "indice" + - "marines" + - "enverrai" + - "hill" + - "processus" + - "joint" + - "ouvriers" + - "marques" + - "dépassé" + - "pa" + - "ailles" + - "bats" + - "pourront" + - "clown" + - "poubelle" + - "marins" + - "boisson" + - "vaincre" + - "combinaison" + - "demandait" + - "testament" + - "sonné" + - "flammes" + - "dégueulasse" + - "ø" + - "administration" + - "commissariat" + - "envoyée" + - "green" + - "dépose" + - "lâché" + - "réveillée" + - "épaules" + - "jay" + - "artistes" + - "culotte" + - "vides" + - "er" + - "énormément" + - "team" + - "quittes" + - "accuse" + - "magicien" + - "importants" + - "direz" + - "fouiller" + - "paierai" + - "écoles" + - "cm" + - "reverra" + - "articles" + - "trône" + - "laboratoire" + - "andrew" + - "panier" + - "endormi" + - "lave" + - "buddy" + - "cuir" + - "huh" + - "foutus" + - "resterai" + - "cendres" + - "stone" + - "environnement" + - "rumeur" + - "interrompre" + - "vaudrait" + - "matinée" + - "risquer" + - "tranquilles" + - "earl" + - "transformer" + - "planté" + - "costumes" + - "mickey" + - "machin" + - "transport" + - "señor" + - "indique" + - "citoyen" + - "aurions" + - "times" + - "viol" + - "particulièrement" + - "pourrons" + - "shirt" + - "connards" + - "casino" + - "douter" + - "pendre" + - "essaierai" + - "accomplir" + - "pipi" + - "allumer" + - "reviennent" + - "certes" + - "dessert" + - "curiosité" + - "fraîche" + - "lié" + - "maurice" + - "little" + - "disaient" + - "vodka" + - "pétrin" + - "témoignage" + - "déclare" + - "scientifiques" + - "coco" + - "baissez" + - "anderson" + - "censés" + - "kansas" + - "boules" + - "sauras" + - "éclair" + - "vain" + - "nuage" + - "création" + - "anneau" + - "fumier" + - "rio" + - "dose" + - "profonde" + - "étude" + - "atelier" + - "cuisiner" + - "vaux" + - "malheureuse" + - "catholique" + - "zoo" + - "précisément" + - "talents" + - "activités" + - "importantes" + - "bouteilles" + - "vomir" + - "tonnerre" + - "ned" + - "assuré" + - "plantes" + - "hong" + - "destinée" + - "plaisanterie" + - "circuit" + - "piges" + - "moore" + - "observer" + - "mines" + - "peindre" + - "porno" + - "comtesse" + - "casque" + - "rate" + - "coûter" + - "chacune" + - "jamie" + - "parent" + - "dépression" + - "télégramme" + - "élu" + - "stupides" + - "pensiez" + - "partant" + - "cash" + - "profite" + - "caution" + - "serrer" + - "maudite" + - "intéresser" + - "écart" + - "inquiètes" + - "oú" + - "évidence" + - "leçons" + - "connus" + - "etc" + - "retiré" + - "greg" + - "rendent" + - "volontaire" + - "nid" + - "oliver" + - "he" + - "prêter" + - "nichons" + - "capitale" + - "témoigner" + - "équipes" + - "égoïste" + - "partent" + - "troupe" + - "sincèrement" + - "regretter" + - "responsabilités" + - "associés" + - "cigare" + - "dean" + - "partirai" + - "adversaire" + - "générale" + - "misère" + - "vampires" + - "grève" + - "nina" + - "suisse" + - "gâteaux" + - "diamant" + - "catastrophe" + - "meubles" + - "gus" + - "voyages" + - "subir" + - "balade" + - "allah" + - "mêler" + - "signez" + - "enveloppe" + - "ressenti" + - "führer" + - "gras" + - "arrêtée" + - "explose" + - "range" + - "interview" + - "tombent" + - "confier" + - "voile" + - "fiches" + - "embête" + - "caravane" + - "affection" + - "manhattan" + - "éléphant" + - "blue" + - "vagues" + - "pleins" + - "fascinant" + - "doutais" + - "effrayant" + - "commercial" + - "rapporter" + - "fonction" + - "fixe" + - "arrete" + - "pères" + - "circulation" + - "tennis" + - "marc" + - "navrée" + - "civilisation" + - "fameux" + - "retenu" + - "moutons" + - "draps" + - "servent" + - "jouais" + - "éternelle" + - "couches" + - "satellite" + - "ramasse" + - "endormir" + - "fillette" + - "rendra" + - "sujets" + - "remède" + - "portez" + - "enseigner" + - "observe" + - "ouverts" + - "vues" + - "sortait" + - "passais" + - "ris" + - "transfert" + - "bidon" + - "météo" + - "explosé" + - "loyauté" + - "dignité" + - "planche" + - "améliorer" + - "hélicoptère" + - "civil" + - "liens" + - "vif" + - "maintenir" + - "craig" + - "vietnam" + - "claude" + - "pacifique" + - "fringues" + - "demie" + - "onze" + - "we" + - "mangent" + - "connaissiez" + - "rares" + - "naturelle" + - "sue" + - "ricky" + - "assaut" + - "fâchée" + - "portent" + - "kay" + - "karl" + - "pareils" + - "légal" + - "tracy" + - "eus" + - "pr" + - "civils" + - "inconnue" + - "eva" + - "disparition" + - "nicky" + - "steven" + - "pompe" + - "méchante" + - "lancement" + - "quartiers" + - "douceur" + - "tendu" + - "feuille" + - "stuart" + - "leader" + - "pilotes" + - "ètait" + - "mâle" + - "tenais" + - "royale" + - "cordes" + - "arrivez" + - "bandes" + - "promenade" + - "magnifiques" + - "emma" + - "wallace" + - "veronica" + - "tv" + - "adn" + - "monseigneur" + - "meure" + - "airs" + - "emmenée" + - "actuellement" + - "peste" + - "antonio" + - "tragique" + - "médias" + - "antenne" + - "avertissement" + - "brille" + - "pedro" + - "conflit" + - "pompiers" + - "engin" + - "douée" + - "oublions" + - "plains" + - "systèmes" + - "foire" + - "sonny" + - "patiente" + - "coincée" + - "canons" + - "partira" + - "soutenir" + - "beach" + - "poussez" + - "saigne" + - "toc" + - "construction" + - "boucher" + - "missiles" + - "compétition" + - "buvons" + - "motif" + - "ambassade" + - "warren" + - "régiment" + - "remarquer" + - "enregistré" + - "collins" + - "enregistrement" + - "doutes" + - "sien" + - "profit" + - "sammy" + - "audition" + - "lame" + - "opportunité" + - "scotch" + - "imaginé" + - "coke" + - "existent" + - "budget" + - "pearl" + - "basse" + - "selle" + - "déja" + - "historique" + - "officiellement" + - "effacer" + - "loge" + - "francis" + - "décrire" + - "osé" + - "éternel" + - "serpents" + - "demanderai" + - "médicament" + - "deviné" + - "armées" + - "promesses" + - "chaînes" + - "sentait" + - "association" + - "viennes" + - "quai" + - "poker" + - "saleté" + - "sandy" + - "ã" + - "irak" + - "commences" + - "crevé" + - "cuba" + - "wendy" + - "profil" + - "travis" + - "tache" + - "viendront" + - "étudie" + - "apportez" + - "tribu" + - "crié" + - "entraîne" + - "héroïne" + - "changements" + - "joan" + - "correctement" + - "essaient" + - "mouvements" + - "atterrir" + - "formes" + - "coca" + - "fragile" + - "poignée" + - "cadre" + - "genou" + - "conçu" + - "revu" + - "légitime" + - "sauvée" + - "déménager" + - "conne" + - "dentiste" + - "aiier" + - "ondes" + - "ralph" + - "mené" + - "discipline" + - "évacuer" + - "parié" + - "bières" + - "arabe" + - "russell" + - "identifié" + - "recevez" + - "cachée" + - "évite" + - "dormais" + - "utilisez" + - "décès" + - "guy" + - "get" + - "demoiselle" + - "fui" + - "ressemblent" + - "misérable" + - "fatigue" + - "ancêtres" + - "camions" + - "dormez" + - "pan" + - "duré" + - "disponible" + - "vôtres" + - "cuit" + - "marchait" + - "nage" + - "come" + - "suspects" + - "menottes" + - "nique" + - "panneau" + - "rit" + - "pognon" + - "illusion" + - "menu" + - "ronnie" + - "établir" + - "mettons" + - "retrouvée" + - "sabre" + - "andré" + - "épuisé" + - "restés" + - "continues" + - "chanteur" + - "kid" + - "lola" + - "prés" + - "tendance" + - "souvient" + - "enfermer" + - "thérapie" + - "vaisselle" + - "tournez" + - "accorde" + - "chemins" + - "troupeau" + - "saluer" + - "uh" + - "kennedy" + - "nettoie" + - "assiette" + - "discuté" + - "touches" + - "impact" + - "dessins" + - "rompre" + - "suivent" + - "sienne" + - "verrons" + - "angoisse" + - "états" + - "vivons" + - "mitchell" + - "écrasé" + - "tiennent" + - "pape" + - "connaissons" + - "murphy" + - "ivan" + - "supposé" + - "colonne" + - "assistante" + - "mettrai" + - "maquillage" + - "ticket" + - "réussite" + - "quête" + - "boxe" + - "proposer" + - "boutons" + - "arriverait" + - "assassins" + - "répétition" + - "agissait" + - "culpabilité" + - "pirate" + - "blanches" + - "brésil" + - "penny" + - "maîtres" + - "psychiatre" + - "miracles" + - "hello" + - "honorable" + - "collines" + - "vachement" + - "taureau" + - "considère" + - "âne" + - "whoa" + - "comprennent" + - "christian" + - "justin" + - "méthodes" + - "canal" + - "navette" + - "tyler" + - "légère" + - "sortant" + - "chaussettes" + - "revanche" + - "remet" + - "mentez" + - "bud" + - "abby" + - "poils" + - "placer" + - "absent" + - "arrivais" + - "escaliers" + - "funérailles" + - "routine" + - "noté" + - "prenais" + - "conducteur" + - "subi" + - "photographe" + - "noires" + - "marchandise" + - "prendrais" + - "émotion" + - "défaut" + - "satan" + - "occuperai" + - "dog" + - "mystérieux" + - "carmen" + - "possession" + - "responsables" + - "raccroche" + - "intentions" + - "minimum" + - "négocier" + - "janvier" + - "baraque" + - "batte" + - "irlandais" + - "filet" + - "confortable" + - "fermés" + - "ressources" + - "rayons" + - "innocente" + - "harvard" + - "expédition" + - "may" + - "profession" + - "plaira" + - "bêtise" + - "restant" + - "jugé" + - "mitch" + - "organise" + - "rappelé" + - "puissante" + - "pertes" + - "saurait" + - "planque" + - "ressentir" + - "grotte" + - "gentiment" + - "péter" + - "chienne" + - "tristesse" + - "héritage" + - "occupera" + - "benjamin" + - "antoine" + - "bloqué" + - "punition" + - "constamment" + - "contents" + - "visites" + - "infiniment" + - "effectivement" + - "chiffre" + - "conscient" + - "manager" + - "représentant" + - "anglaise" + - "cauchemars" + - "jan" + - "continué" + - "réduit" + - "gré" + - "filmé" + - "stars" + - "owen" + - "embrassé" + - "peint" + - "reparti" + - "soie" + - "lloyd" + - "voisine" + - "douzaine" + - "frankenstein" + - "attaques" + - "gênant" + - "superman" + - "arrivant" + - "brillante" + - "atterrissage" + - "attendra" + - "allure" + - "pénible" + - "faibles" + - "clef" + - "bruno" + - "christine" + - "rebecca" + - "bang" + - "pété" + - "gardiens" + - "formule" + - "soda" + - "frites" + - "fées" + - "angel" + - "mm" + - "aperçu" + - "imaginais" + - "aussitôt" + - "énormes" + - "wade" + - "choisit" + - "montée" + - "baignoire" + - "principes" + - "homo" + - "marchand" + - "cochons" + - "spécialiste" + - "repéré" + - "récupéré" + - "extra" + - "éclate" + - "survivants" + - "auquel" + - "apparence" + - "sucer" + - "habiter" + - "excité" + - "houston" + - "jules" + - "foudre" + - "chasseurs" + - "walker" + - "with" + - "nièce" + - "urgences" + - "mérité" + - "dépensé" + - "boys" + - "saisir" + - "équilibre" + - "allumé" + - "lâches" + - "bruits" + - "protégé" + - "résolu" + - "probable" + - "poursuite" + - "baker" + - "résidence" + - "cognac" + - "clyde" + - "muscles" + - "passées" + - "intime" + - "république" + - "serviteur" + - "noyer" + - "mortes" + - "trompée" + - "morgue" + - "cherchons" + - "coma" + - "capables" + - "berger" + - "apprendra" + - "amateur" + - "dises" + - "vertu" + - "permets" + - "mafia" + - "engagement" + - "lesquelles" + - "cachette" diff --git a/config/locales/models/administrateur/fr.yml b/config/locales/models/administrateur/fr.yml new file mode 100644 index 000000000..9fd10173b --- /dev/null +++ b/config/locales/models/administrateur/fr.yml @@ -0,0 +1,15 @@ +fr: + activerecord: + attributes: + administrateur: + password: Le mot de passe + errors: + models: + administrateur: + attributes: + email: + blank: 'doit être rempli' + password: + too_short: 'est trop court' + blank: 'doit être rempli' + not_strength: "n'est pas assez complexe" diff --git a/config/routes.rb b/config/routes.rb index 1a5f2423e..61c268e7f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -175,6 +175,7 @@ Rails.application.routes.draw do namespace :admin do get 'activate' => '/administrateurs/activate#new' patch 'activate' => '/administrateurs/activate#create' + post 'activate/test_password_strength' => '/administrateurs/activate#test_password_strength' get 'sign_in' => '/administrateurs/sessions#new' get 'procedures/archived' => 'procedures#archived' get 'procedures/draft' => 'procedures#draft' diff --git a/spec/controllers/gestionnaires/passwords_controller_spec.rb b/spec/controllers/gestionnaires/passwords_controller_spec.rb index d23fe6623..ad7f289e4 100644 --- a/spec/controllers/gestionnaires/passwords_controller_spec.rb +++ b/spec/controllers/gestionnaires/passwords_controller_spec.rb @@ -7,9 +7,9 @@ describe Gestionnaires::PasswordsController, type: :controller do describe "update" do context "unified login" do - let(:gestionnaire) { create(:gestionnaire, email: 'unique@plop.com', password: 'password') } - let(:user) { create(:user, email: 'unique@plop.com', password: 'password') } - let(:administrateur) { create(:administrateur, email: 'unique@plop.com', password: 'password') } + let(:gestionnaire) { create(:gestionnaire, email: 'unique@plop.com', password: 'un super mot de passe') } + let(:user) { create(:user, email: 'unique@plop.com', password: 'un super mot de passe') } + let(:administrateur) { create(:administrateur, email: 'unique@plop.com', password: 'un super mot de passe') } before do @token = gestionnaire.send(:set_reset_password_token) diff --git a/spec/controllers/users/passwords_controller_spec.rb b/spec/controllers/users/passwords_controller_spec.rb index cd9a76ff0..8ee43dc24 100644 --- a/spec/controllers/users/passwords_controller_spec.rb +++ b/spec/controllers/users/passwords_controller_spec.rb @@ -7,9 +7,9 @@ describe Users::PasswordsController, type: :controller do describe "update" do context "unified login" do - let(:user) { create(:user, email: 'unique@plop.com', password: 'password') } - let(:gestionnaire) { create(:gestionnaire, email: 'unique@plop.com', password: 'password') } - let(:administrateur) { create(:administrateur, email: 'unique@plop.com', password: 'password') } + let(:user) { create(:user, email: 'unique@plop.com', password: 'mot de passe complexe') } + let(:gestionnaire) { create(:gestionnaire, email: 'unique@plop.com', password: 'mot de passe complexe') } + let(:administrateur) { create(:administrateur, email: 'unique@plop.com', password: 'mot de passe complexe') } before do @token = user.send(:set_reset_password_token) @@ -21,8 +21,8 @@ describe Users::PasswordsController, type: :controller do put :update, params: { user: { reset_password_token: @token, - password: "supersecret", - password_confirmation: "supersecret", + password: "mot de passe super secret", + password_confirmation: "mot de passe super secret", } } expect(subject.current_user).to eq(user) @@ -33,8 +33,8 @@ describe Users::PasswordsController, type: :controller do put :update, params: { user: { reset_password_token: @token, - password: "supersecret", - password_confirmation: "supersecret", + password: "mot de passe super secret", + password_confirmation: "mot de passe super secret", } } expect(subject.current_user).to eq(user) diff --git a/spec/controllers/users/sessions_controller_spec.rb b/spec/controllers/users/sessions_controller_spec.rb index 84719da7d..af12c7ce2 100644 --- a/spec/controllers/users/sessions_controller_spec.rb +++ b/spec/controllers/users/sessions_controller_spec.rb @@ -24,7 +24,7 @@ describe Users::SessionsController, type: :controller do context "unified login" do let(:email) { 'unique@plop.com' } - let(:password) { 'password' } + let(:password) { 'un super mot de passe' } let(:user) { create(:user, email: email, password: password) } let(:gestionnaire) { create(:gestionnaire, email: email, password: password) } @@ -80,8 +80,8 @@ describe Users::SessionsController, type: :controller do end context 'with different passwords' do - let!(:gestionnaire) { create(:gestionnaire, email: email, password: 'another_password') } - let!(:administrateur) { create(:administrateur, email: email, password: 'another_password') } + let!(:gestionnaire) { create(:gestionnaire, email: email, password: 'mot de passe complexe') } + let!(:administrateur) { create(:administrateur, email: email, password: 'mot de passe complexe') } before do user @@ -165,7 +165,7 @@ describe Users::SessionsController, type: :controller do end context "when associated administrateur" do - let(:administrateur) { create(:administrateur, email: 'unique@plop.com', password: 'password') } + let(:administrateur) { create(:administrateur, email: 'unique@plop.com') } it 'signs user + gestionnaire + administrateur out' do sign_in user diff --git a/spec/factories/administrateur.rb b/spec/factories/administrateur.rb index b936e069b..973802d40 100644 --- a/spec/factories/administrateur.rb +++ b/spec/factories/administrateur.rb @@ -2,6 +2,6 @@ FactoryBot.define do sequence(:administrateur_email) { |n| "admin#{n}@admin.com" } factory :administrateur do email { generate(:administrateur_email) } - password { 'password' } + password { 'mon chien aime les bananes' } end end diff --git a/spec/factories/type_de_champ.rb b/spec/factories/type_de_champ.rb index c208f5aac..363b79476 100644 --- a/spec/factories/type_de_champ.rb +++ b/spec/factories/type_de_champ.rb @@ -54,7 +54,7 @@ FactoryBot.define do end factory :type_de_champ_linked_drop_down_list do type_champ { TypeDeChamp.type_champs.fetch(:linked_drop_down_list) } - drop_down_list { create(:drop_down_list) } + drop_down_list { create(:drop_down_list, value: "--primary--\nsecondary\n") } end factory :type_de_champ_pays do type_champ { TypeDeChamp.type_champs.fetch(:pays) } diff --git a/spec/models/administrateur_spec.rb b/spec/models/administrateur_spec.rb index 46eb0d920..9a3388c0a 100644 --- a/spec/models/administrateur_spec.rb +++ b/spec/models/administrateur_spec.rb @@ -9,7 +9,7 @@ describe Administrateur, type: :model do end describe 'after_save' do - subject { described_class.new(email: 'toto@tps.com', password: 'password') } + subject { create(:administrateur) } before do subject.save end @@ -19,7 +19,7 @@ describe Administrateur, type: :model do describe 'generate_api_token' do let(:token) { 'bullshit' } let(:new_token) { 'pocket_master' } - let!(:admin_1) { create(:administrateur, email: 'toto@tps.com', password: 'password', api_token: token) } + let!(:admin_1) { create(:administrateur, api_token: token) } before do allow(SecureRandom).to receive(:hex).and_return(token, new_token) admin_1.renew_api_token @@ -34,22 +34,22 @@ describe Administrateur, type: :model do administrateur = create(:administrateur) user = create(:user, email: administrateur.email) - administrateur.update(email: 'whoami@plop.com', password: 'super secret') + administrateur.update(email: 'whoami@plop.com', password: 'voilà un super mdp') user.reload expect(user.email).to eq('whoami@plop.com') - expect(user.valid_password?('super secret')).to be(true) + expect(user.valid_password?('voilà un super mdp')).to be(true) end it 'syncs credentials to associated administrateur' do administrateur = create(:administrateur) gestionnaire = create(:gestionnaire, email: administrateur.email) - administrateur.update(email: 'whoami@plop.com', password: 'super secret') + administrateur.update(email: 'whoami@plop.com', password: 'et encore un autre mdp') gestionnaire.reload expect(gestionnaire.email).to eq('whoami@plop.com') - expect(gestionnaire.valid_password?('super secret')).to be(true) + expect(gestionnaire.valid_password?('et encore un autre mdp')).to be(true) end end @@ -64,8 +64,8 @@ describe Administrateur, type: :model do let(:administrateur) { create(:administration).invite_admin('paul@tps.fr') } let(:reset_password_token) { administrateur.invite!(administration.id) } - it { expect(Administrateur.reset_password(reset_password_token, '12345678').errors).to be_empty } - it { expect(Administrateur.reset_password('123', '12345678').errors).not_to be_empty } + it { expect(Administrateur.reset_password(reset_password_token, "j'aime manger des radis").errors).to be_empty } + it { expect(Administrateur.reset_password('123', "j'aime manger des radis").errors).not_to be_empty } it { expect(Administrateur.reset_password(reset_password_token, '').errors).not_to be_empty } end @@ -79,4 +79,30 @@ describe Administrateur, type: :model do it { expect(administrateur.feature_enabled?(:champ_siret)).to be_falsey } it { expect(administrateur.feature_enabled?(:champ_pj)).to be_truthy } end + + describe "#password_complexity" do + let(:administrateur) { build(:administrateur, password: password) } + + subject do + administrateur.save + administrateur.errors[:password] + end + + context "with a strong password" do + let(:password) { "la démat c'est simple" } + it { expect(subject).to eq([]) } + end + + context "with a weak password" do + let(:password) { "12345678" } + it { expect(subject).to include "n'est pas assez complexe" } + it { expect(subject).not_to include "est trop court" } + end + + context "with a short password" do + let(:password) { "1" } + it { expect(subject).to include "est trop court" } + it { expect(subject).not_to include "n'est pas assez complexe" } + end + end end diff --git a/spec/models/type_de_champ_shared_example.rb b/spec/models/type_de_champ_shared_example.rb index f23cf2156..092527bbc 100644 --- a/spec/models/type_de_champ_shared_example.rb +++ b/spec/models/type_de_champ_shared_example.rb @@ -79,5 +79,26 @@ shared_examples 'type_de_champ_spec' do end end end + + context 'delegate validation to dynamic type' do + subject { build(:type_de_champ_text) } + let(:dynamic_type) do + Class.new(TypesDeChamp::TypeDeChampBase) do + validate :never_valid + + def never_valid + errors.add(:troll, 'always invalid') + end + end.new(subject) + end + + before { subject.instance_variable_set(:@dynamic_type, dynamic_type) } + + it { is_expected.to be_invalid } + it do + subject.validate + expect(subject.errors.full_messages.to_sentence).to eq('Troll always invalid') + end + end end end diff --git a/spec/models/types_de_champ/linked_drop_down_list_type_de_champ_spec.rb b/spec/models/types_de_champ/linked_drop_down_list_type_de_champ_spec.rb index f9bc0af6a..b7ee29bdf 100644 --- a/spec/models/types_de_champ/linked_drop_down_list_type_de_champ_spec.rb +++ b/spec/models/types_de_champ/linked_drop_down_list_type_de_champ_spec.rb @@ -1,12 +1,78 @@ require 'spec_helper' describe TypesDeChamp::LinkedDropDownListTypeDeChamp do + let(:drop_down_list) { build(:drop_down_list, value: menu_options) } + let(:type_de_champ) { build(:type_de_champ_linked_drop_down_list, drop_down_list: drop_down_list) } + + subject { type_de_champ.dynamic_type } + + describe 'validation' do + context 'It must start with one primary option' do + context 'valid menu' do + let(:menu_options) do + <<~END_OPTIONS + --Primary 1-- + secondary 1.1 + secondary 1.2 + --Primary 2-- + secondary 2.1 + secondary 2.2 + secondary 2.3 + END_OPTIONS + end + + it { is_expected.to be_valid } + end + + context 'degenerate but valid menu' do + let(:menu_options) do + <<~END_OPTIONS + --Primary 1-- + END_OPTIONS + end + + it { is_expected.to be_valid } + end + + context 'invalid menus' do + shared_examples 'missing primary option' do + it { is_expected.to be_invalid } + it do + subject.validate + expect(subject.errors.full_messages).to eq ["#{subject.libelle} doit commencer par une entrée de menu primaire de la forme --texte--"] + end + end + + context 'no primary option' do + let(:menu_options) do + <<~END_OPTIONS + secondary 1.1 + secondary 1.2 + END_OPTIONS + end + + it_should_behave_like 'missing primary option' + end + + context 'starting with secondary options' do + let(:menu_options) do + <<~END_OPTIONS + secondary 1.1 + secondary 1.2 + --Primary 2-- + secondary 2.1 + secondary 2.2 + secondary 2.3 + END_OPTIONS + end + + it_should_behave_like 'missing primary option' + end + end + end + end + describe '#unpack_options' do - let(:drop_down_list) { build(:drop_down_list, value: menu_options) } - let(:type_de_champ) { build(:type_de_champ_linked_drop_down_list, drop_down_list: drop_down_list) } - - subject { type_de_champ.dynamic_type } - context 'with no options' do let(:menu_options) { '' } it { expect(subject.secondary_options).to eq({}) }