simplepush 0.6.0

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: c13cefedbd1151589a852fa4f91c1f43a2ad117d01b56752fad35959cc1c3a21
4
+ data.tar.gz: fde8e2a819e41a5de6c9d82142e045567f22fcf6b9a31b25b119a2ffdba8ddf8
5
+ SHA512:
6
+ metadata.gz: 044447bdfd5f5c08b441e537dc2a5984c64a005a15d49b714714f21ce62f45d21ee4a23ab10dd96ad959139c03c3ae30d153d4629de7b92e8eb059036d351307
7
+ data.tar.gz: fd381bafb1e625c9a64308f7becf9c29623ddbb896c9a906fd4aa9f50e68d9f8a0937f6d66f81b0ad84f19ecb5ad1b4e9755aff7148318f11debeb5a17191ec4
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /example/push.sh
10
+ /config.yml
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in simplepush.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
9
+ gem "async"
data/Gemfile.lock ADDED
@@ -0,0 +1,37 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simplepush (0.6.0)
5
+ httparty
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ async (1.30.1)
11
+ console (~> 1.10)
12
+ nio4r (~> 2.3)
13
+ timers (~> 4.1)
14
+ console (1.13.1)
15
+ fiber-local
16
+ fiber-local (1.0.0)
17
+ httparty (0.20.0)
18
+ mime-types (~> 3.0)
19
+ multi_xml (>= 0.5.2)
20
+ mime-types (3.3.1)
21
+ mime-types-data (~> 3.2015)
22
+ mime-types-data (3.2021.0901)
23
+ multi_xml (0.6.0)
24
+ nio4r (2.5.8)
25
+ rake (13.0.6)
26
+ timers (4.3.3)
27
+
28
+ PLATFORMS
29
+ x86_64-linux
30
+
31
+ DEPENDENCIES
32
+ async
33
+ rake (~> 13.0)
34
+ simplepush!
35
+
36
+ BUNDLED WITH
37
+ 2.2.5
data/README.md ADDED
@@ -0,0 +1,109 @@
1
+ # Simplepush Gem for Ruby
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/simplepush`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'simplepush'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ ```
16
+ $ bundle install
17
+ ```
18
+
19
+ Or install it yourself as:
20
+
21
+ ```
22
+ $ gem install simplepush
23
+ ```
24
+
25
+ Add as a dependency:
26
+
27
+ ```ruby
28
+ require 'simplepush'
29
+ ```
30
+
31
+ ## Usage
32
+
33
+ ```ruby
34
+ # From example/example.rb
35
+ require 'simplepush'
36
+
37
+ Simplepush.new('<your key>').send("Title", "Message") # Unenrypted
38
+
39
+ Simplepush.new('<your key>', "<pass>", "<salt>").send("Title", "Message") # Enrypted
40
+
41
+ ```
42
+
43
+ ## Asynchronous send
44
+
45
+ The following does not work... `#TODO`
46
+
47
+ ```ruby
48
+ require 'async' # gem 'async'
49
+
50
+ s = Simplepush.new('<your key>')
51
+
52
+ Sync do
53
+ 100.times do |i|
54
+ Async do
55
+ s.send("Title", i.to_s) # Unenrypted
56
+ end
57
+ end
58
+ end
59
+ ```
60
+
61
+ ## Example of query
62
+
63
+ The following is a sample of the query as it is produced:
64
+
65
+ ```json
66
+ {
67
+ "args": {},
68
+ "data": "",
69
+ "files": {},
70
+ "form": {
71
+ "encrypted": "true",
72
+ "iv": "CEEFFBE72CC70DF45480DDAC775743B6",
73
+ "key": "<the key, the key>",
74
+ "msg": "szR70wqD9g8T2nX0FRZwoQ=="
75
+ },
76
+ "headers": {
77
+ "Accept": "*/*",
78
+ "Accept-Encoding": "gzip;q=1.0,deflate;q=0.6,identity;q=0.3",
79
+ "Content-Length": "94",
80
+ "Content-Type": "application/x-www-form-urlencoded",
81
+ "Host": "httpbin.org",
82
+ "User-Agent": "Ruby",
83
+ "X-Amzn-Trace-Id": "Root=1-617714e4-08fc2a3f349df4203121ce0e"
84
+ },
85
+ "json": null,
86
+ "origin": "91.32.103.70",
87
+ "url": "https://httpbin.org/post"
88
+ }
89
+ ```
90
+
91
+ ## Todos
92
+
93
+ - [x] Encrypted Messages
94
+ - [x] Processing responses
95
+ - [x] Async calls
96
+ - [ ] Example how to integrate into rails to notify of failures
97
+
98
+ ## Changelog
99
+
100
+ - 0.5.0 Initial Commits
101
+ - 0.6.0 Changing API to cache keys, better examples
102
+
103
+ ## Contributing
104
+
105
+ Bug reports and pull requests are welcome on GitHub at https://github.com/coezbek/simplepush
106
+
107
+ ## License
108
+
109
+ MIT
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "simplepush"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/example/async.rb ADDED
@@ -0,0 +1,28 @@
1
+
2
+ require_relative 'config.rb'
3
+
4
+ config = load_config
5
+ simplepush = Simplepush.new(config[:key])
6
+
7
+ n = 10
8
+ if 3 >= RUBY_VERSION.split(".").first.to_i
9
+
10
+ require 'async'
11
+ Sync do
12
+ n.times do |i|
13
+ Async do
14
+ simplepush.send("Asynchronous sending with Async", i.to_s)
15
+ end
16
+ end
17
+ end # join here
18
+
19
+ else
20
+
21
+ threads = Array.new(n) { |i|
22
+ Thread.new {
23
+ simplepush.send("Asynchronous sending with Threads", i.to_s)
24
+ }
25
+ }
26
+ threads.each(&:join)
27
+
28
+ end
data/example/config.rb ADDED
@@ -0,0 +1,24 @@
1
+ require_relative '../lib/simplepush'
2
+
3
+ def load_config
4
+ if !File.exists?('config.yml')
5
+
6
+ config = {}
7
+
8
+ puts "Enter your key"
9
+ config[:key] = gets[/.+/] # Strip newline and return nil if ""
10
+
11
+ puts "Enter your password or leave empty to send unencrypted"
12
+ config[:pass] = gets[/.+/]
13
+
14
+ if config[:pass]
15
+ puts "Enter the salt"
16
+ config[:salt] = gets[/.+/]
17
+ end
18
+
19
+ puts "Configuration stored (as plaintext) in config.yml"
20
+ File.write('config.yml', config.to_yaml)
21
+ end
22
+
23
+ YAML.load_file('config.yml')
24
+ end
@@ -0,0 +1,18 @@
1
+
2
+ require_relative 'config.rb'
3
+
4
+ config = load_config
5
+
6
+ puts "Please enter your message"
7
+ message = gets.strip
8
+
9
+ puts "Should this message be encrypted? (y or n)"
10
+
11
+ simplepush = if gets =~ /n/i
12
+ Simplepush.new(config[:key])
13
+ else
14
+ Simplepush.new(config[:key], config[:pass], config[:salt])
15
+ end
16
+
17
+ simplepush.send('Message from Example.rb', message)
18
+
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Simplepush
4
+ VERSION = "0.6.0"
5
+ end
data/lib/simplepush.rb ADDED
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "simplepush/version"
4
+ require 'httparty'
5
+
6
+ class Simplepush
7
+
8
+ include HTTParty
9
+
10
+ base_uri 'https://api.simplepush.io'.freeze
11
+ # For testing:
12
+ # base_uri 'https://httpbin.org'.freeze
13
+ format :json
14
+ default_timeout 5 # 5 seconds
15
+ # debug_output $stdout # Uncomment to get detailled httparty log output to stdout
16
+
17
+ # If password and salt are provided, then message and title will be encrypted.
18
+ def initialize(key, password = nil, salt = '1789F0B8C4A051E5')
19
+ raise "Key must be set" unless key
20
+ @key = key
21
+ @cipher_key = [Digest::SHA1.hexdigest(password + salt)[0,32]].pack "H*" if password
22
+ end
23
+
24
+ #
25
+ # Send the given title/message.
26
+ #
27
+ # This method is blocking.
28
+ #
29
+ def send(title, message, event = nil)
30
+ raise "Key and message argument must be set" unless message
31
+
32
+ payload = {}
33
+ payload[:key] = @key
34
+ payload[:msg] = message.to_s
35
+ payload[:event] = event.to_s if event
36
+ payload[:title] = title.to_s if title
37
+
38
+ if @cipher_key
39
+ require 'openssl'
40
+ payload[:encrypted] = true
41
+
42
+ cipher = OpenSSL::Cipher::AES.new(128, :CBC)
43
+ cipher.encrypt
44
+ cipher.key = @cipher_key
45
+
46
+ # Set random_iv and store as payload
47
+ payload[:iv] = cipher.random_iv.unpack("H*").first.upcase
48
+
49
+ # Automatically uses PKCS7
50
+ payload[:msg] = Base64.urlsafe_encode64(cipher.update(payload[:msg]) + cipher.final)
51
+
52
+ if title
53
+ cipher.encrypt # Restart cipher
54
+ payload[:title] = Base64.urlsafe_encode64(cipher.update(payload[:title]) + cipher.final)
55
+ end
56
+ end
57
+
58
+ return self.class.post('/send', body: payload)
59
+ end
60
+
61
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/simplepush/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "simplepush"
7
+ spec.version = Simplepush::VERSION
8
+ spec.authors = ["Christopher Oezbek"]
9
+ spec.email = ["c.oezbek@gmail.com"]
10
+
11
+ spec.summary = "Ruby SimplePush.io API client (unofficial)"
12
+ spec.description = "Httpary wrapper for SimplePush.io"
13
+ spec.homepage = "https://github.com/coezbek/simplepush"
14
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
15
+
16
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
17
+
18
+ spec.metadata["homepage_uri"] = spec.homepage
19
+ spec.metadata["source_code_uri"] = spec.homepage
20
+ spec.metadata["changelog_uri"] = "https://github.com/coezbek/simplepush/README.md#Changelog"
21
+
22
+ # Specify which files should be added to the gem when it is released.
23
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
24
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
25
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
26
+ end
27
+ spec.bindir = "exe"
28
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
29
+ spec.require_paths = ["lib"]
30
+
31
+ # Runtime dependencies
32
+ spec.add_dependency "httparty"
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simplepush
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.0
5
+ platform: ruby
6
+ authors:
7
+ - Christopher Oezbek
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-10-31 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: Httpary wrapper for SimplePush.io
28
+ email:
29
+ - c.oezbek@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".gitignore"
35
+ - Gemfile
36
+ - Gemfile.lock
37
+ - README.md
38
+ - Rakefile
39
+ - bin/console
40
+ - bin/setup
41
+ - example/async.rb
42
+ - example/config.rb
43
+ - example/example.rb
44
+ - lib/simplepush.rb
45
+ - lib/simplepush/version.rb
46
+ - simplepush.gemspec
47
+ homepage: https://github.com/coezbek/simplepush
48
+ licenses: []
49
+ metadata:
50
+ allowed_push_host: https://rubygems.org
51
+ homepage_uri: https://github.com/coezbek/simplepush
52
+ source_code_uri: https://github.com/coezbek/simplepush
53
+ changelog_uri: https://github.com/coezbek/simplepush/README.md#Changelog
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 2.4.0
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.2.3
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Ruby SimplePush.io API client (unofficial)
73
+ test_files: []