xify-rocket_chat 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 557292d4b7cf3ed6a1f8e3fa50e75daedec4dbebab058f79fdf793af355f87eb
4
+ data.tar.gz: 8f1a92e1a135f8c8ca2e02eedb367975b21ed875927dd177f2ad7b98b88f5f29
5
+ SHA512:
6
+ metadata.gz: 55539da4d0f7397f09b79139861ab23358787c6c984de3898eef207026265897e16982306b77303127d8f18f1a783e1576319a7855b9608f2a89db712c5d8ce4
7
+ data.tar.gz: fd3a6436768f25edf1d35accfda2449a2cb85196c7d5b7aeb227b62d2330443a98f19075b599ccfe8f4742fd45acd434722a9158acadd1ef89c6c3171321fe01
@@ -0,0 +1,77 @@
1
+ require 'json'
2
+ require 'net/https'
3
+ require 'time'
4
+
5
+ module Xify
6
+ module Base
7
+ class RocketChat
8
+ def initialize(config)
9
+ @config = config
10
+
11
+ uri = URI.parse config['uri']
12
+ @http = Net::HTTP.new uri.host, uri.port
13
+ @http.use_ssl = true
14
+
15
+ working_dir = "#{ENV['HOME']}/.xify/RocketChat"
16
+ Dir.mkdir working_dir rescue Errno::EEXIST
17
+ @auth_file = "#{working_dir}/#{@config['user']}.json"
18
+ end
19
+
20
+ def request(method, path, &block)
21
+ login unless @auth_data
22
+
23
+ req = Object.const_get("Net::HTTP::#{method.capitalize}").new path,
24
+ 'X-User-Id' => @auth_data['userId'],
25
+ 'X-Auth-Token' => @auth_data['authToken']
26
+
27
+ yield req if block_given?
28
+
29
+ res = @http.request req
30
+
31
+ case res
32
+ when Net::HTTPUnauthorized
33
+ relogin
34
+ request method, path, &block
35
+ when Net::HTTPSuccess
36
+ # nothing
37
+ else
38
+ $stderr.puts res.body
39
+ raise "Error on #{method.upcase} #{@config['uri']}#{path}: #{res.code} #{res.message}"
40
+ end
41
+
42
+ res
43
+ end
44
+
45
+ private
46
+
47
+ def login
48
+ if File.exists? @auth_file
49
+ @auth_data = JSON.parse File.read @auth_file
50
+ return
51
+ end
52
+
53
+ req = Net::HTTP::Post.new '/api/v1/login',
54
+ 'Content-Type' => 'application/json'
55
+ req.body = {
56
+ username: @config['user'],
57
+ password: @config['pass']
58
+ }.to_json
59
+
60
+ res = @http.request req
61
+
62
+ unless res.is_a? Net::HTTPSuccess
63
+ $stderr.puts res.body
64
+ raise "Error while authenticating to #{@config['uri']}: #{res.code} #{res.message}"
65
+ end
66
+
67
+ @auth_data = JSON.parse(res.body)['data']
68
+ File.write @auth_file, @auth_data.to_json
69
+ end
70
+
71
+ def relogin
72
+ File.delete @auth_file
73
+ login
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,42 @@
1
+ require 'eventmachine'
2
+ require 'json'
3
+ require 'metybur'
4
+ require 'net/https'
5
+ require 'time'
6
+
7
+ require 'xify/base/rocket_chat'
8
+ require 'xify/event'
9
+
10
+ module Xify
11
+ module Input
12
+ class RocketChat < Base::RocketChat
13
+ def updates
14
+ login
15
+
16
+ EM.run do
17
+ config = @config
18
+ uri = URI.parse config['uri']
19
+ meteor = Metybur.connect "wss://#{uri.host}:#{uri.port}/websocket"
20
+ meteor.login resume: @auth_data['authToken'] do
21
+ meteor.subscribe 'stream-notify-user', "#{result[:id]}/rooms-changed", false
22
+ messages = meteor.collection 'stream-notify-user'
23
+ messages.on(:changed) do |id, attributes|
24
+ event = attributes[:args].last
25
+ room = event[:name]
26
+ message = event[:lastMessage]
27
+
28
+ next if message[:editedAt] || room != config['channel'][1..-1]
29
+
30
+ author = message[:u][:name]
31
+ text = message[:msg]
32
+ time = message[:ts][:'$date']
33
+ type = event[:t] == 'p' ? 'group' : 'channel'
34
+
35
+ yield Xify::Event.new author, text, parent: "##{room}", parent_link: "#{config['uri']}/#{type}/#{room}", time: Time.at(time / 1000)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,28 @@
1
+ require 'json'
2
+ require 'net/https'
3
+ require 'time'
4
+
5
+ require 'xify/base/rocket_chat'
6
+
7
+ module Xify
8
+ module Output
9
+ class RocketChat < Base::RocketChat
10
+ def process(event)
11
+ request :post, '/api/v1/chat.postMessage' do |req|
12
+ req['Content-Type'] = 'application/json'
13
+ req.body = {
14
+ channel: @config['channel'],
15
+ alias: event.author,
16
+ attachments: [
17
+ {
18
+ title: event.args[:parent],
19
+ title_link: event.args[:parent_link],
20
+ text: event.args[:link] ? "#{event.message.chomp} ([more](#{event.args[:link]}))" : event.message.chomp
21
+ }
22
+ ]
23
+ }.to_json
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xify-rocket_chat
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Finn Glöe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: metybur
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.3
27
+ - !ruby/object:Gem::Dependency
28
+ name: xify
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0.4'
41
+ description: |2
42
+ Used as input and/or output handler for Xify. Listen to messages in a specified channel or send them into one. Uses
43
+ the realtime API of Rocket.Chat (websocket) to receive messages.
44
+ email: fgloee@united-internet.de
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - lib/xify/base/rocket_chat.rb
50
+ - lib/xify/input/rocket_chat.rb
51
+ - lib/xify/output/rocket_chat.rb
52
+ homepage:
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ requirements: []
71
+ rubyforge_project:
72
+ rubygems_version: 2.7.6
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Rocket.Chat extension for Xify gem.
76
+ test_files: []