Showing
10 changed files
with
95 additions
and
33 deletions
| ... | ... | @@ -2,13 +2,12 @@ class DashboardController < ApplicationController |
| 2 | 2 | def index |
| 3 | 3 | @hosts = Host.all |
| 4 | 4 | |
| 5 | - @hosts.map { |host| | |
| 6 | - if host.lxd_config.auth == 'untrusted' | |
| 7 | - session[:return_to] = request.env["REQUEST_URI"] | |
| 8 | - redirect_to controller: 'hosts', action: 'auth', id: host.id | |
| 9 | - return | |
| 10 | - end | |
| 11 | - } | |
| 5 | +# @hosts.map { |host| | |
| 6 | +# if host.connected and not host.authenticated | |
| 7 | +# session[:return_to] = request.env["REQUEST_URI"] | |
| 8 | +# redirect_to controller: 'hosts', action: 'auth', id: host.id | |
| 9 | +# end | |
| 10 | +# } | |
| 12 | 11 | end |
| 13 | 12 | end |
| 14 | 13 | # vim: set et ts=2 sw=2: | ... | ... |
| ... | ... | @@ -10,7 +10,7 @@ class Host < ActiveRecord::Base |
| 10 | 10 | super(true) |
| 11 | 11 | when super.expires_soon? |
| 12 | 12 | old = super |
| 13 | - new = Certificate.get.update | |
| 13 | + new = Certificate.get | |
| 14 | 14 | Lxd::Certificate.new(api: api(old), certificate: new.to_s).add |
| 15 | 15 | self.certificate_id = new.id |
| 16 | 16 | self.save |
| ... | ... | @@ -35,8 +35,16 @@ class Host < ActiveRecord::Base |
| 35 | 35 | Lxd::Certificate.new(api: api).add password |
| 36 | 36 | end |
| 37 | 37 | |
| 38 | + def connected | |
| 39 | + lxd_config != nil | |
| 40 | + end | |
| 41 | + | |
| 42 | + def authenticated | |
| 43 | + lxd_config != nil and lxd_config.auth == 'trusted' | |
| 44 | + end | |
| 45 | + | |
| 38 | 46 | private |
| 39 | - def api certificate = nil | |
| 47 | + def api certificate=nil | |
| 40 | 48 | @api ||= Lxd::API.get self, certificate |
| 41 | 49 | end |
| 42 | 50 | end | ... | ... |
| 1 | 1 | module Lxd::API |
| 2 | 2 | def self.get host, certificate = nil |
| 3 | 3 | certificate ||= host.certificate |
| 4 | + | |
| 4 | 5 | uri = URI.parse host.uri |
| 5 | 6 | con = Net::HTTP.new uri.host, uri.port ? uri.port : 8443 |
| 6 | 7 | con.use_ssl = true |
| ... | ... | @@ -8,14 +9,33 @@ module Lxd::API |
| 8 | 9 | con.key = OpenSSL::PKey::RSA.new certificate.key |
| 9 | 10 | con.verify_mode = OpenSSL::SSL::VERIFY_NONE |
| 10 | 11 | |
| 11 | - resp = self.call con, Net::HTTP::Get.new('/') | |
| 12 | - return Lxd::API::V1_0.new con if resp['metadata'].include? '/1.0' | |
| 13 | - raise "unsupported api version" | |
| 12 | + resp = call con, Net::HTTP::Get.new('/') | |
| 13 | + api = Lxd::API::V1_0.new con if resp['metadata'].include? '/1.0' | |
| 14 | + raise Lxd::API::Exception 'unsupported api version' unless api | |
| 15 | + return api unless block_given? | |
| 16 | + yield api | |
| 17 | + rescue Lxd::API::Exception => e | |
| 18 | + Rails.logger.error { "#{e.message} #{e.backtrace.join("\n")}" } | |
| 19 | + nil | |
| 20 | + rescue => e | |
| 21 | + Rails.logger.error { | |
| 22 | + format( | |
| 23 | + 'Error connecting: %s, %s %s', | |
| 24 | + host.uri, e.message, e.backtrace.join("\n") | |
| 25 | + ) | |
| 26 | + } | |
| 27 | + nil | |
| 28 | + ensure | |
| 29 | + con.close if block_given? | |
| 14 | 30 | end |
| 15 | 31 | |
| 16 | 32 | def self.call con, req |
| 17 | 33 | resp = con.request req |
| 18 | - raise "request failure: " + resp.code unless resp.code != 200 | |
| 34 | + unless resp.code != 200 | |
| 35 | + raise Lxd::API::Exception( | |
| 36 | + "request failure: (#{resp.code}) #{resp.message}" | |
| 37 | + ) | |
| 38 | + end | |
| 19 | 39 | JSON.parse resp.body |
| 20 | 40 | end |
| 21 | 41 | |
| ... | ... | @@ -25,6 +45,17 @@ module Lxd::API |
| 25 | 45 | |
| 26 | 46 | def call req |
| 27 | 47 | handle_response(Lxd::API.call @con, req) |
| 48 | + rescue Lxd::API::Exception => e | |
| 49 | + Rails.logger.error { "#{e.message} #{e.backtrace.join("\n")}" } | |
| 50 | + nil | |
| 51 | + rescue => e | |
| 52 | + Rails.logger.error { | |
| 53 | + format( | |
| 54 | + 'Error connecting: %s, %s %s', | |
| 55 | + host.uri, e.message, e.backtrace.join("\n") | |
| 56 | + ) | |
| 57 | + } | |
| 58 | + nil | |
| 28 | 59 | end |
| 29 | 60 | |
| 30 | 61 | def get uri | ... | ... |
app/models/lxd/api/exception.rb
0 → 100644
| ... | ... | @@ -48,7 +48,11 @@ class Lxd::API::V1_0 |
| 48 | 48 | 400 to 599: negative action result |
| 49 | 49 | 600 to 999: future use |
| 50 | 50 | """ |
| 51 | - raise "api error: (" + resp['error_code'].to_s + ") " + resp['error'] if resp['error_code'] and resp['error_code'] != 403 | |
| 51 | + if resp['error_code'] and resp['error_code'] != 403 | |
| 52 | + raise Lxd::API::Exception( | |
| 53 | + "api error: (#{resp['error_code']}) #{resp['error']}" | |
| 54 | + ) | |
| 55 | + end | |
| 52 | 56 | resp['metadata'] |
| 53 | 57 | end |
| 54 | 58 | end | ... | ... |
| 1 | 1 | <h1>Dashboard#index</h1> |
| 2 | -<% Certificate.all.each do |cert| -%> | |
| 3 | -<p>Fingerprint: <%= cert.cert_fpr %> | |
| 4 | -Serial: <%= cert.cert.serial %></p> | |
| 5 | -<% end -%> | |
| 2 | +<p> | |
| 3 | +<h2>Lex-deeit certificate</h2> | |
| 4 | +<h3>Fingerprint</h3> | |
| 5 | +<%= Certificate.get.cert_fpr %> | |
| 6 | +<h3>Serial</h3> | |
| 7 | +<%= Certificate.get.cert.serial %> | |
| 8 | +</p> | |
| 6 | 9 | <hr/> |
| 7 | 10 | <% @hosts.each do |host| -%> |
| 8 | -<p><%= host.lxd_config.inspect %></p> | |
| 9 | -<% host.lxd_certificates.each do |certificate| -%> | |
| 10 | -<p><%= certificate.fingerprint %></p> | |
| 11 | -<% end -%> | |
| 11 | + <p> | |
| 12 | + <h2><%= host.name %></h2> | |
| 13 | + <h3>Url:</h3> | |
| 14 | + <%= host.uri %> | |
| 15 | + <h3>Connection status:</h3> | |
| 16 | + <% case -%> | |
| 17 | + <% when host.authenticated -%> | |
| 18 | + authenticated | |
| 19 | + <% when host.connected -%> | |
| 20 | + connected | |
| 21 | + <% else -%> | |
| 22 | + not connected | |
| 23 | + <% end -%> | |
| 24 | + <% if host.authenticated -%> | |
| 25 | + <h3>Config:</h3> | |
| 26 | + <%= host.lxd_config.config %> | |
| 27 | + <h3>Host known certificates</h3> | |
| 28 | + <ul> | |
| 29 | + <% host.authenticated and host.lxd_certificates.each do |certificate| -%> | |
| 30 | + <li><%= certificate.fingerprint %></li> | |
| 31 | + <% end -%> | |
| 32 | + </ul> | |
| 33 | + <% end -%> | |
| 34 | + </p> | |
| 35 | + <hr/> | |
| 12 | 36 | <% end -%> |
| 37 | +<!-- vim: set ts=2 sw=2: --> | ... | ... |
| ... | ... | @@ -19,14 +19,6 @@ |
| 19 | 19 | <%= f.label :uri %><br> |
| 20 | 20 | <%= f.text_field :uri %> |
| 21 | 21 | </div> |
| 22 | - <div class="field"> | |
| 23 | - <%= f.label :password %><br> | |
| 24 | - <%= f.password_field :password %> | |
| 25 | - </div> | |
| 26 | - <div class="field"> | |
| 27 | - <%= f.label :password_confirmation %><br> | |
| 28 | - <%= f.password_field :password_confirmation %> | |
| 29 | - </div> | |
| 30 | 22 | <div class="actions"> |
| 31 | 23 | <%= f.submit %> |
| 32 | 24 | </div> | ... | ... |
Please
register
or
login
to post a comment