pssh 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ module Pssh
2
+ VERSION = "0.2.2"
3
+ end
4
+
@@ -0,0 +1,17 @@
1
+ module Pssh
2
+ class WebConsole
3
+ def render(view, opts = {})
4
+ [200, { 'Content-Type' => 'text/html' }, Tilt::HamlTemplate.new("#{Pssh.base_path}/views/#{view}.haml").render(self, opts)]
5
+ end
6
+
7
+ def call(env)
8
+ if env['HTTP_AUTHORIZATION']
9
+ auth = env['HTTP_AUTHORIZATION'].split(' ')[1]
10
+ username = Base64.decode64(auth).split(':')[0]
11
+ else
12
+ username = nil
13
+ end
14
+ render 'index', unique_id: Pssh.create_session(username)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/pssh/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ['Kelly Martin']
6
+ gem.email = ['kelly@getportly.com']
7
+ gem.summary = 'Pair Programming made user-friendly with your web browser (and Portly helps).'
8
+ gem.homepage = 'http://pssh.me'
9
+
10
+ gem.files = `git ls-files`.split($\)
11
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.name = 'pssh'
14
+ gem.require_paths = ['lib']
15
+ gem.version = Pssh::VERSION
16
+
17
+ gem.add_dependency 'json', '~> 1.8.0'
18
+ gem.add_dependency 'rack', '~> 1.5.2'
19
+ gem.add_dependency 'thin', '~> 1.5.0'
20
+ gem.add_dependency 'websocket-rack', '~> 0.4.0'
21
+ gem.add_dependency 'haml', '~> 4.0.0'
22
+ gem.add_dependency 'tilt', '~> 1.4.1'
23
+
24
+ end
25
+
@@ -0,0 +1,69 @@
1
+ %html
2
+ %head
3
+ %script{:src => "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js", :type => "application/javascript"}
4
+ %script{:src => "assets/wssh.js", :type => "application/javascript"}
5
+ %script{:src => "assets/term.js", :type => "application/javascript"}
6
+ :javascript
7
+ function init() {
8
+ var k = document.createElement('span.monospace');
9
+ k.innerHTML = '_';
10
+ k.style.position = 'absolute';
11
+ document.body.appendChild(k);
12
+
13
+ var size =
14
+ [
15
+ k.offsetWidth,
16
+ 13 // k.offsetHeight
17
+ ];
18
+
19
+
20
+ document.body.removeChild(k);
21
+ console.log(size[0]+' '+size[1]);
22
+ width = parseInt($(window).width() / size[0]);
23
+ height = parseInt($(window).height() / size[1]);
24
+ first_time = true;
25
+ var client = new WSSHClient('#{unique_id}');
26
+ var term = new Terminal(width, height, function(key) {
27
+ client.send(key);
28
+ });
29
+ term.open();
30
+ $('.terminal').detach().appendTo('#term');
31
+ //term.resize(200, 40);
32
+ term.write('Connecting...');
33
+ client.connect($.extend({}, {
34
+ onError: function(error) {
35
+ term.write('Error: ' + error + "\\r\\n");
36
+ },
37
+ onConnect: function() {
38
+ if(first_time == true) {
39
+ term.write('\r');
40
+ client.start(width, height);
41
+ first_time = false;
42
+ }
43
+ },
44
+ onClose: function() {
45
+ term.destroy();
46
+ $('.terminal').remove();
47
+ //term.write('Connection Reset By Peer');
48
+ },
49
+ onTerminate: function() {
50
+ },
51
+ onData: function(data) {
52
+ console.log(data);
53
+ term.write(data);
54
+ }
55
+ }));
56
+
57
+ window.onresize = function() {
58
+ width = parseInt($(window).width() / size[0]);
59
+ height = parseInt($(window).height() / size[1]);
60
+ client.resize(width, height);
61
+ term.resize(width, height);
62
+ };
63
+
64
+ function log(msg) { document.getElementById('log').innerHTML += msg + '<br>'; }
65
+ }
66
+ %link{:href => "assets/bootstrap.css", :rel => "stylesheet"}/
67
+ %link{:href => "assets/style.css", :rel => "stylesheet"}/
68
+ %body{:onload => "init();"}
69
+ #term
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pssh
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Kelly Martin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-08-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: json
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 1.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.8.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rack
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.5.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.5.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: thin
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: 1.5.0
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.5.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: websocket-rack
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.4.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.4.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: haml
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 4.0.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 4.0.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: tilt
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 1.4.1
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 1.4.1
110
+ description:
111
+ email:
112
+ - kelly@getportly.com
113
+ executables:
114
+ - pssh
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - Gemfile
119
+ - Gemfile.lock
120
+ - README.md
121
+ - assets/bootstrap.css
122
+ - assets/style.css
123
+ - assets/term.js
124
+ - assets/wssh.js
125
+ - bin/pssh
126
+ - lib/pssh.rb
127
+ - lib/pssh/cli.rb
128
+ - lib/pssh/client.rb
129
+ - lib/pssh/console.rb
130
+ - lib/pssh/socket.rb
131
+ - lib/pssh/version.rb
132
+ - lib/pssh/web_console.rb
133
+ - pssh.gemspec
134
+ - views/index.haml
135
+ homepage: http://pssh.me
136
+ licenses: []
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 1.8.25
156
+ signing_key:
157
+ specification_version: 3
158
+ summary: Pair Programming made user-friendly with your web browser (and Portly helps).
159
+ test_files: []
160
+ has_rdoc: