Make sure putty.exe is in your PATH (or put it in C:Windows)
Install dependencies:
C:\ gem install sinatra haml win32-open3
To run:
C:\ ruby putty-session-manager.rb
The site will be available at localhost:4567
Make sure putty.exe is in your PATH (or put it in C:Windows)
Install dependencies:
C:\ gem install sinatra haml win32-open3
To run:
C:\ ruby putty-session-manager.rb
The site will be available at localhost:4567
#! /usr/bin/env ruby | |
%w( rubygems sinatra haml sass ).each {|lib| require lib } | |
begin | |
require 'win32/open3' | |
rescue LoadError | |
puts "Win32 Open3 could not be loaded. This is needed to execute PuTTy on Windows." | |
require 'open3' | |
end | |
begin | |
require 'win32/registry' | |
rescue LoadError | |
puts "Win32 Registry reader could not be loaded. This requires Ruby on Windows." | |
end | |
helpers do | |
def sessions_file() File.dirname(__FILE__) + '/sessions.yml' end | |
def saved_sessions() File.file?(sessions_file) ? YAML.load_file(sessions_file) : [] end | |
def add_session(name) persist_sessions(saved_sessions + [name]) end | |
def remove_session(name) persist_sessions(saved_sessions - [name]) end | |
def persist_sessions(names) File.open(sessions_file, 'w'){|f| f << names.to_yaml } end | |
def putty_saved_sessions | |
if defined?(Win32::Registry) | |
Win32::Registry::HKEY_CURRENT_USER.open('Software\SimonTatham\PuTTY').open("Sessions").keys | |
else | |
[] | |
end | |
end | |
end | |
get '/' do | |
haml :index | |
end | |
get '/stylesheets/application.css' do | |
content_type 'text/css' | |
sass :stylesheet | |
end | |
post '/sessions' do | |
add_session params[:session] | |
redirect '/' | |
end | |
post '/sessions/:name' do | |
Open3.popen3 %{cmd.exe /C putty.exe -load "#{ params[:name] }"} | |
redirect '/' | |
end | |
delete '/sessions/:name' do | |
remove_session params[:name] | |
redirect '/' | |
end | |
__END__ | |
@@ index | |
%h1 PuTTY Sessions | |
%ul.sessions | |
- for name in putty_saved_sessions | |
%li | |
= name | |
%form{ :action => "/sessions/#{ name }", :method => 'post' } | |
%input{ :type => 'submit', :value => 'launch' } | |
- for name in saved_sessions | |
%li | |
= name | |
%form{ :action => "/sessions/#{ name }", :method => 'post' } | |
%input{ :type => 'submit', :value => 'launch' } | |
%form{ :action => "/sessions/#{ name }", :method => 'post' } | |
%input{ :type => 'hidden', :name => '_method', :value => 'delete' } | |
%input{ :type => 'submit', :value => 'remove' } | |
%form{ :action => '/sessions', :method => 'post' } | |
%input#name{ :type => 'text', :name => 'session' } | |
%input{ :type => 'submit', :value => 'Add Session'} | |
@@ layout | |
!!! XML | |
!!! | |
%html | |
%head | |
%title PuTTY Session Manager | |
%link{ :rel => 'stylesheet', :type => 'text/css', :href => '/stylesheets/application.css' } | |
%body | |
#content= yield | |
:javascript | |
document.getElementById('name').focus(); | |
@@ stylesheet | |
body | |
:font 13px/1.5em Helvetica, Arial, Verdana, sans-serif | |
:background-color #666 | |
:padding 0.5em | |
#content | |
:background-color white | |
:padding 1em | |
:-moz-border-radius 1em | |
:-webkit-border-radius 1em | |
:-moz-box-shadow 0.3em 0.3em 0.5em black | |
:-webkit-box-shadow 0.3em 0.3em 0.5em black | |
ul.sessions | |
:margin 2em 0 | |
li | |
:font-size 1.3em | |
:font-weight bold | |
:margin-bottom 0.5em | |
form | |
:display inline | |
:margin-left 0.5em |
require 'rubygems' | |
require 'spec' | |
require 'webrat' | |
require File.dirname(__FILE__) + '/putty-session-manager' | |
Webrat.configure { |config| config.mode = :mechanize } | |
Spec::Runner.configure do |config| | |
config.include Webrat::Methods | |
config.include Webrat::Matchers | |
end | |
describe 'PuTTY Session Manager' do | |
before do | |
FileUtils.rm_f(File.dirname(__FILE__) + '/sessions.yml') | |
end | |
it 'should be able to add session names' do | |
visit 'http://localhost:9393/' | |
response_body.should_not include('Foo') | |
fill_in :session, :with => 'Foo' | |
click_button 'Add Session' | |
visit 'http://localhost:9393/' | |
response_body.should include('Foo') | |
end | |
it 'should be able to remove session names' do | |
visit 'http://localhost:9393/' | |
fill_in :session, :with => 'Foo' | |
click_button 'Add Session' | |
visit 'http://localhost:9393/' | |
response_body.should include('Foo') | |
click_button 'remove' | |
visit 'http://localhost:9393/' | |
response_body.should_not include('Foo') | |
end | |
end |
#! /usr/bin/env ruby | |
%w( rubygems sinatra haml sass win32/open3 win32/registry ).each {|lib| require lib } | |
helpers do | |
def putty_saved_sessions | |
Win32::Registry::HKEY_CURRENT_USER.open('Software\SimonTatham\PuTTY').open("Sessions").keys | |
end | |
end | |
get '/' do | |
haml :index | |
end | |
post '/sessions/:name' do | |
Open3.popen3 %{cmd.exe /C putty.exe -load "#{ params[:name] }"} | |
redirect '/' | |
end | |
__END__ | |
@@ index | |
%h1 PuTTY Sessions | |
%ul.sessions | |
- for name in putty_saved_sessions | |
%li | |
= name | |
%form{ :action => "/sessions/#{ name }", :method => 'post' } | |
%input{ :type => 'submit', :value => 'launch' } |