@@ -7,6 +7,7 @@ gem 'sidekiq', '~> 3.4.2' | |||
gem 'stretcher', '~> 1.21.1' | |||
gem 'faraday', '~> 0.8.9' # For stretcher compatibility | |||
gem 'simpleidn', '~> 0.0.5' | |||
gem 'http_accept_language' | |||
group :assets do | |||
gem 'therubyracer', platforms: :ruby | |||
@@ -2,4 +2,6 @@ class ApplicationController < ActionController::Base | |||
# Prevent CSRF attacks by raising an exception. | |||
# For APIs, you may want to use :null_session instead. | |||
protect_from_forgery with: :exception | |||
include HttpAcceptLanguage::AutoLocale | |||
end |
@@ -2,7 +2,9 @@ | |||
<nav class="navbar navbar-inverse navbar-fixed-top"> | |||
<div class="container"> | |||
<div class="navbar-header"> | |||
<span class="navbar-brand">CryptCheck</span> | |||
<span> | |||
<%= link_to 'CryptCheck', root_path, class: %i(navbar-brand) %> | |||
</span> | |||
</div> | |||
<ul class="nav navbar-nav"> | |||
<li><%= link_to 'HTTPS / SMTP / XMPP', root_path %></li> | |||
@@ -10,8 +12,8 @@ | |||
<li><%= link_to 'SSH', ssh_path %></li> | |||
</ul> | |||
<ul class="nav navbar-nav navbar-right"> | |||
<li><%= link_to 'Cipher suite', suite_path %></li> | |||
<li><%= link_to 'Ciphers', ciphers_path %></li> | |||
<li><%= link_to t('User agent compatibility'), suite_path %></li> | |||
<li><%= link_to t('Supported ciphers'), ciphers_path %></li> | |||
<!-- | |||
<li class="dropdown"> | |||
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> | |||
@@ -6,14 +6,14 @@ | |||
<div class="col-sm-8 col-sm-offset-2"> | |||
<h1> | |||
<i class="fa fa-spinner fa-pulse"></i> | |||
[<%= self.type.to_s.upcase %>] Analyse en cours de <%= @host %> | |||
[<%= self.type.to_s.upcase %>] <%= t 'Currently analysing %{host}', host: @host %> | |||
</h1> | |||
<p class="small"> | |||
Début de l’analyse : <%= l @result.date %> | |||
<%= t 'Start of analysis: %{date}', date: l(@result.date) %> | |||
</p> | |||
<p class="pull-right"> | |||
Merci de patienter… | |||
<span class="small">(Cette page se rafraîchit automatiquement toutes les 10 secondes)</span> | |||
<%= t('Please waiting…') %> | |||
<span class="small">(<%= t 'Cette page se rafraîchit automatiquement toutes les 10 secondes' %>)</span> | |||
</p> | |||
</div> | |||
</div> | |||
@@ -7,7 +7,7 @@ | |||
</div> | |||
<% if Time.now - @result.date >= Rails.configuration.refresh_delay %> | |||
<div class="col-sm-1"> | |||
<%= link_to 'Rafraîchir', {action: :refresh}, class: %i(btn btn-default) %> | |||
<%= link_to t('Refresh'), {action: :refresh}, class: %i(btn btn-default) %> | |||
</div> | |||
<% end %> | |||
</div> | |||
@@ -19,7 +19,7 @@ | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h2><%= host.name %> - <%= host.ip %> : <%= host.port %></h2> | |||
Error during analysis : | |||
<%= t 'Error during analysis:' %> | |||
<span class="label label-error"><%= error %></span> | |||
</div> | |||
</div> | |||
@@ -45,12 +45,12 @@ | |||
</thead> | |||
<tbody> | |||
<% | |||
{ 'Protocole' => 'protocol', | |||
'Échange de clef' => 'key_exchange', | |||
'Chiffrement' => 'cipher_strengths', | |||
'Total' => 'score'}.each do |name, v| %> | |||
{ 'Protocol' => 'protocol', | |||
'Key exchange' => 'key_exchange', | |||
'Cipher' => 'cipher_strengths', | |||
'Overall' => 'score'}.each do |name, v| %> | |||
<tr> | |||
<th class="col-sm-4"><%= name %></th> | |||
<th class="col-sm-4"><%= t name %></th> | |||
<td class="col-sm-8"><%= score_progress grade.details[v] %></td> | |||
</tr> | |||
<% end %> | |||
@@ -61,25 +61,25 @@ | |||
<table class="table table-bordered table-condensed table-striped"> | |||
<tbody> | |||
<tr> | |||
<th class="col-sm-4">Protocoles</th> | |||
<th class="col-sm-4"><%= t 'Protocols' %></th> | |||
<td class="col-sm-8"><%= protocol_labels handshake.protocols %></td> | |||
</tr> | |||
<tr> | |||
<th>Clefs</th> | |||
<th><%= t 'Keys' %></th> | |||
<td> | |||
<p>Certificat : <%= key_label handshake[:key] %></p> | |||
<p><%= t 'Certificates:' %> <%= key_label handshake[:key] %></p> | |||
<p>Diffie Hellman : <%= key_labels handshake.dh %></p> | |||
</td> | |||
</tr> | |||
<% { 'Bonnes pratiques' => :success, | |||
'Alertes' => :warning, | |||
'Dangers' => :danger, | |||
'Erreurs' => :error }.each do |name, color| | |||
<% { 'Good practices' => :success, | |||
'Warning' => :warning, | |||
'Critical' => :danger, | |||
'Fatal' => :error }.each do |name, color| | |||
names = grade[color] | |||
next if names.nil? or names.empty? | |||
%> | |||
<tr> | |||
<th><%= name %></th> | |||
<th><%= t name %></th> | |||
<td> | |||
<% names.each do |name| %> | |||
<span class="label label-<%= color %>"><%= name.upcase %></span> | |||
@@ -96,24 +96,24 @@ | |||
<table class="table table-bordered table-condensed table-striped center"> | |||
<thead> | |||
<tr> | |||
<th rowspan="2">Name</th> | |||
<th colspan="2">Key exchange</th> | |||
<th colspan="2">Authentification</th> | |||
<th colspan="4">Encryption</th> | |||
<th colspan="2">MAC</th> | |||
<th rowspan="2">PFS</th> | |||
<th rowspan="2"><%= t 'Name' %></th> | |||
<th colspan="2"><%= t 'Key exchange' %></th> | |||
<th colspan="2"><%= t 'Authentication' %></th> | |||
<th colspan="4"><%= t 'Encryption' %></th> | |||
<th colspan="2"><%= t 'MAC' %></th> | |||
<th rowspan="2"><%= t 'PFS' %></th> | |||
</tr> | |||
<tr> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Block size</th> | |||
<th>Mode</th> | |||
<th>Type</th> | |||
<th>Size</th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Block size' %></th> | |||
<th><%= t 'Mode' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Size' %></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@@ -1,7 +1,7 @@ | |||
<!DOCTYPE html> | |||
<html> | |||
<head> | |||
<title>CryptcheckRails</title> | |||
<title>CryptCheck</title> | |||
<%= stylesheet_link_tag 'application', media: 'all' %> | |||
<%= javascript_include_tag 'application' %> | |||
<%= csrf_meta_tags %> | |||
@@ -3,20 +3,20 @@ | |||
<table class="table table-bordered table-condensed table-striped center col-sm-12"> | |||
<thead> | |||
<tr> | |||
<th rowspan="2">Name</th> | |||
<th rowspan="2">Key exchange</th> | |||
<th rowspan="2">Authentification</th> | |||
<th colspan="4">Encryption</th> | |||
<th colspan="2">MAC</th> | |||
<th rowspan="2">PFS</th> | |||
<th rowspan="2"><%= t 'Name' %></th> | |||
<th rowspan="2"><%= t 'Key exchange' %></th> | |||
<th rowspan="2"><%= t 'Authentication' %></th> | |||
<th colspan="4"><%= t 'Encryption' %></th> | |||
<th colspan="2"><%= t 'MAC' %></th> | |||
<th rowspan="2"><%= t 'PFS' %></th> | |||
</tr> | |||
<tr> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Block size</th> | |||
<th>Mode</th> | |||
<th>Type</th> | |||
<th>Size</th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Block size' %></th> | |||
<th><%= t 'Mode' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Size' %></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@@ -1,7 +1,7 @@ | |||
<div id="check" class="container"> | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h1>Vérifier votre domaine</h1> | |||
<h1><%= t 'Check your domain' %></h1> | |||
<%= form_tag root_path do %> | |||
<div class="form-group"> | |||
<div class="col-sm-8"> | |||
@@ -11,7 +11,7 @@ | |||
<%= select_tag :type, options_for_select({'HTTPS' => :https, 'SMTP' => :smtp, 'XMPP' => :xmpp}), class: %i(form-control input-lg) %> | |||
</div> | |||
<div class="col-sm-2"> | |||
<%= submit_tag 'Test-moi !', class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
<%= submit_tag t('Test me!'), class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
</div> | |||
</div> | |||
<% end %> | |||
@@ -1,28 +1,28 @@ | |||
<div class="container"> | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h1>Cipher suite : <%= @suite %></h1> | |||
<h1><%= t 'Cipher suite:' %> <%= @suite %></h1> | |||
</div> | |||
</div> | |||
<div class="row"> | |||
<table class="table table-bordered table-condensed table-striped col-sm-12"> | |||
<thead> | |||
<tr> | |||
<th rowspan="2">Navigateur</th> | |||
<th rowspan="2">Name</th> | |||
<th rowspan="2">Key exchange</th> | |||
<th rowspan="2">Authentification</th> | |||
<th colspan="4">Encryption</th> | |||
<th colspan="2">MAC</th> | |||
<th rowspan="2">PFS</th> | |||
<th rowspan="2"><%= t 'User agent' %></th> | |||
<th rowspan="2"><%= t 'Name' %></th> | |||
<th rowspan="2"><%= t 'Key exchange' %></th> | |||
<th rowspan="2"><%= t 'Authentication' %></th> | |||
<th colspan="4"><%= t 'Encryption' %></th> | |||
<th colspan="2"><%= t 'MAC' %></th> | |||
<th rowspan="2"><%= t 'PFS' %></th> | |||
</tr> | |||
<tr> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Block size</th> | |||
<th>Mode</th> | |||
<th>Type</th> | |||
<th>Size</th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Block size' %></th> | |||
<th><%= t 'Mode' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Size' %></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@@ -66,20 +66,20 @@ | |||
<table class="table table-bordered table-condensed table-striped center col-sm-12"> | |||
<thead> | |||
<tr> | |||
<th rowspan="2">Name</th> | |||
<th rowspan="2">Key exchange</th> | |||
<th rowspan="2">Authentification</th> | |||
<th colspan="4">Encryption</th> | |||
<th colspan="2">MAC</th> | |||
<th rowspan="2">PFS</th> | |||
<th rowspan="2"><%= t 'Name' %></th> | |||
<th rowspan="2"><%= t 'Key exchange' %></th> | |||
<th rowspan="2"><%= t 'Authentication' %></th> | |||
<th colspan="4"><%= t 'Encryption' %></th> | |||
<th colspan="2"><%= t 'MAC' %></th> | |||
<th rowspan="2"><%= t 'PFS' %></th> | |||
</tr> | |||
<tr> | |||
<th>Type</th> | |||
<th>Key size</th> | |||
<th>Block size</th> | |||
<th>Mode</th> | |||
<th>Type</th> | |||
<th>Size</th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Key size' %></th> | |||
<th><%= t 'Block size' %></th> | |||
<th><%= t 'Mode' %></th> | |||
<th><%= t 'Type' %></th> | |||
<th><%= t 'Size' %></th> | |||
</tr> | |||
</thead> | |||
<tbody> | |||
@@ -1,14 +1,15 @@ | |||
<div id="check" class="container"> | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h1>Compatibilités des user agents</h1> | |||
<h1><%= t 'User agent compatibility' %></h1> | |||
<h2><%= t 'Cipher suite' %></h2> | |||
<%= form_tag suite_path do %> | |||
<div class="form-group"> | |||
<div class="col-sm-10"> | |||
<%= text_field_tag :suite, nil, class: %i(form-control input-lg), placeholder: 'EECDH+AES' %> | |||
</div> | |||
<div class="col-sm-2"> | |||
<%= submit_tag 'Test-moi !', class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
<%= submit_tag t('Test me!'), class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
</div> | |||
</div> | |||
<% end %> | |||
@@ -1,7 +1,7 @@ | |||
<div id="ssh_check" class="container"> | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h1>Vérifier votre serveur SSH</h1> | |||
<h1><%= t 'Check your SSH server' %></h1> | |||
<%= form_tag root_path do %> | |||
<div class="form-group"> | |||
<div class="col-sm-8"> | |||
@@ -12,7 +12,7 @@ | |||
</div> | |||
<div class="col-sm-2"> | |||
<%= hidden_field_tag :type, :ssh %> | |||
<%= submit_tag 'Test-moi !', class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
<%= submit_tag t('Test me!'), class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
</div> | |||
</div> | |||
<% end %> | |||
@@ -7,7 +7,7 @@ | |||
</div> | |||
<% if Time.now - @result.date >= Rails.configuration.refresh_delay %> | |||
<div class="col-sm-1"> | |||
<%= link_to 'Rafraîchir', {action: :refresh}, class: %i(btn btn-default) %> | |||
<%= link_to t('Refresh'), {action: :refresh}, class: %i(btn btn-default) %> | |||
</div> | |||
<% end %> | |||
</div> | |||
@@ -19,7 +19,7 @@ | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h2><%= host.name %> - <%= host.ip %> : <%= host.port %></h2> | |||
Error during analysis : | |||
<%= t 'Error during analysis:' %> | |||
<span class="label label-error"><%= error %></span> | |||
</div> | |||
</div> | |||
@@ -37,7 +37,7 @@ | |||
<table class="table table-bordered table-condensed table-striped"> | |||
<tbody> | |||
<tr> | |||
<th>Échange de clef</th> | |||
<th><%= t 'Key exchange' %></th> | |||
</tr> | |||
<% server.kex.each do |kex| %> | |||
<tr> | |||
@@ -46,7 +46,7 @@ | |||
<% end %> | |||
<tr> | |||
<th>Chiffrement</th> | |||
<th><%= t 'Cipher' %></th> | |||
</tr> | |||
<% server.encryption.each do |cipher| %> | |||
<tr> | |||
@@ -55,7 +55,7 @@ | |||
<% end %> | |||
<tr> | |||
<th>HMAC</th> | |||
<th><%= t 'HMAC' %></th> | |||
</tr> | |||
<% server.hmac.each do |hmac| %> | |||
<tr> | |||
@@ -64,7 +64,7 @@ | |||
<% end %> | |||
<tr> | |||
<th>Compression</th> | |||
<th><%= t 'Compression' %></th> | |||
</tr> | |||
<% server.compression.each do |compression| %> | |||
<tr> | |||
@@ -73,7 +73,7 @@ | |||
<% end %> | |||
<tr> | |||
<th>Clefs</th> | |||
<th><%= t 'Keys' %></th> | |||
</tr> | |||
<% server.key_.each do |key| %> | |||
<tr> | |||
@@ -1,7 +1,7 @@ | |||
<div id="tls_check" class="container"> | |||
<div class="row"> | |||
<div class="col-sm-12"> | |||
<h1>Vérifier votre serveur TLS</h1> | |||
<h1><%= t 'Check your TLS server' %></h1> | |||
<%= form_tag root_path do %> | |||
<div class="form-group"> | |||
<div class="col-sm-8"> | |||
@@ -12,7 +12,7 @@ | |||
</div> | |||
<div class="col-sm-2"> | |||
<%= hidden_field_tag :type, :tls %> | |||
<%= submit_tag 'Test-moi !', class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
<%= submit_tag t('Test me!'), class: %i(form-control btn btn-primary input-lg pull-right) %> | |||
</div> | |||
</div> | |||
<% end %> | |||
@@ -35,6 +35,7 @@ module CryptcheckRails | |||
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. | |||
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] | |||
config.i18n.default_locale = :fr | |||
config.i18n.available_locales = %w(en fr) | |||
config.action_controller.include_all_helpers = false | |||
config.refresh_delay = 1.hour | |||
@@ -1 +1,44 @@ | |||
en: | |||
User agent compatibility: User agent compatibility | |||
Supported ciphers: Supported ciphers | |||
Cipher suite: Cipher suite | |||
"Cipher suite:": "Cipher suite:" | |||
Check your domain: Check your domain | |||
Check your SSH server: Check your SSH server | |||
Check your SMTP server: Check your SMTP server | |||
Test me!: Test me! | |||
Currently analysing %{host}: Currently analysing %{host} | |||
"Start of analysis: %{date}": "Start of analysis: %{date}" | |||
Please waiting…: Please waiting… | |||
This page refreshes automatically every 10 seconds: This page refreshes automatically every 10 seconds | |||
"Error during analysis:": "Error during analysis:" | |||
Refresh: Refresh | |||
Protocol: Protocol | |||
Protocols: Protocols | |||
Keys: Keys | |||
Key exchange: Key exchange | |||
Cipher: Cipher | |||
Overall: Overall | |||
"Certificates:": "Certificats:" | |||
Good practices: Good practices | |||
Warning: Warning | |||
Critical: Critical | |||
Fatal: Fatal | |||
User agent: User agent | |||
Name: Name | |||
Authentication: Authentication | |||
Encryption: Encryption | |||
Compression: Compression | |||
MAC: MAC | |||
HMAC: HMAC | |||
PFS: PFS | |||
Mode: Mode | |||
Type: Type | |||
Key size: Key size | |||
Block size: Block size | |||
Size: Size |
@@ -1,4 +1,48 @@ | |||
fr: | |||
User agent compatibility: Compatibilité navigateur | |||
Supported ciphers: Chiffrements supportés | |||
Cipher suite: Suite de chiffrement | |||
"Cipher suite:": "Suite de chiffrement :" | |||
Check your domain: Testez votre domaine | |||
Check your SSH server: Testez votre serveur SSH | |||
Check your TLS server: Testez votre serveur TLS | |||
Test me!: Testez-moi ! | |||
Currently analysing %{host}: Analyse en cours de %{host} | |||
"Start of analysis: %{date}": "Début de l’analyse : %{date}" | |||
Please waiting…: Merci de patienter… | |||
This page refreshes automatically every 10 seconds: Cette page se rafraîchit automatiquement toutes les 10 secondes | |||
"Error during analysis:": "Erreur durant l’analyse :" | |||
Refresh: Rafraîchir | |||
Protocol: Protocole | |||
Protocols: Protocoles | |||
Keys: Clefs | |||
Key exchange: Échange de clef | |||
Cipher: Chiffrement | |||
Overall: Global | |||
"Certificates:": "Certificats :" | |||
Good practices: Bonnes pratiques | |||
Warning: Attention | |||
Critical: Critique | |||
Fatal: Fatal | |||
User agent: Navigateur | |||
Name: Nom | |||
Authentication: Authentification | |||
Encryption: Chiffrement | |||
Compression: Compression | |||
MAC: MAC | |||
HMAC: HMAC | |||
PFS: PFS | |||
Mode: Mode | |||
Type: Type | |||
Key size: Taille de clef | |||
Block size: Taille de bloc | |||
Size: Taille | |||
date: | |||
abbr_day_names: | |||
- dim | |||