ios_devices_manager 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZjAzMWFkMzhmN2E5YTQ4ZmYzYjRkZTgwMTlhOTQ2YmU1NGJmOTZmNw==
5
+ data.tar.gz: !binary |-
6
+ NDkzYThhOGRhYmQ0YjY4NDdmYTgyOGQyMDY5YjA1NGUyMGRlNmQ0Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MTRjNzBkNjdhOGVlZWY4Yzg5NTQzNzFlNDY5MDY5ZjUyNmJmZDlkMzA4MWUz
10
+ ODc1MTE2MDBjNjAyNThhZjU2ODE4YTEyZjJhNDRhYTZjNzhmZDUwNWE3NWEw
11
+ MzIyMzcxZWExY2MwOWNlMWRkZGY1NDY4YTA4ZDhlMTZjYzhhNzQ=
12
+ data.tar.gz: !binary |-
13
+ YWRjMzAyOWQ2NDBkM2FmY2IwYmM3NzI0NTZmNGZmNmU5Y2RmNjg0NzBjZjU2
14
+ NmExYTc4MjAzZmQxYzZjYzgwNmUwNTE4ODc2MmY5ZDQ0MDQ3NTM4ZWY4ZGMz
15
+ ZTk4MTViYzIyNzk0MjYzYTYyNGU0MzBjNWY4NTNlNjdjYTY5ZTY=
@@ -0,0 +1,104 @@
1
+ require 'base64'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'typhoeus'
6
+ require 'uri'
7
+ require 'ios_devices_manager/device'
8
+
9
+ class IOSDevicesManager < OpenStruct
10
+
11
+ INIT_CLIENT = 'initClient'
12
+ REFRESH_CLIENT = 'refreshClient'
13
+ SEND_MESSAGE = 'sendMessage'
14
+ PLAY_SOUND = 'playSound'
15
+
16
+ def initialize username, password
17
+ super({username: username, devices: []})
18
+ @username = username
19
+ @password = password
20
+ @partition = nil
21
+ @baseURI = "/fmipservice/device/#{@username}/"
22
+
23
+ get_partition
24
+ get_devices
25
+ end
26
+
27
+ def send(device, title = '', msg = '', sound = false)
28
+ options = {
29
+ 'device' => device.id,
30
+ 'subject' => title,
31
+ 'text' => msg,
32
+ 'sound' => sound,
33
+ 'userText' => true
34
+ }
35
+ post(SEND_MESSAGE, options)
36
+ end
37
+
38
+ def play_sound(device, subject = '')
39
+ options = {
40
+ 'device' => device.id,
41
+ 'subject' => subject
42
+ }
43
+ post(PLAY_SOUND, options)
44
+ end
45
+
46
+ def get_devices
47
+ response = post(INIT_CLIENT)
48
+ self.devices = parse_devices(response)
49
+ end
50
+
51
+ def update_devices
52
+ response = post(REFRESH_CLIENT)
53
+ self.devices = parse_devices(response)
54
+ end
55
+
56
+ def parse_devices(data)
57
+ JSON.parse(data.body)['content'].collect { |device| Device.new(device) }
58
+ end
59
+
60
+ private
61
+
62
+ def get_partition
63
+ response = post(@initClient)
64
+ @partition = response.headers['X-Apple-MMe-Host']
65
+ end
66
+
67
+ def post_headers
68
+ {
69
+ 'Content-Type' => 'application/json; charset=utf-8',
70
+ 'X-Apple-Find-Api-Ver' => '2.0',
71
+ 'X-Apple-Authscheme' => 'UserIdGuest',
72
+ 'X-Apple-Realm-Support' => '1.0',
73
+ 'Accept-Language' => 'en-us',
74
+ 'userAgent' => 'iOS Devices Manager',
75
+ 'Connection' => 'keep-alive'
76
+ }
77
+ end
78
+
79
+ def post url, options = nil
80
+ uri = @partition ? "https://#{@partition}#{@baseURI}#{url}" : "https://fmipmobile.icloud.com#{@baseURI}#{url}"
81
+
82
+ unless options.nil?
83
+ clientContext = {
84
+ 'clientContext' => {
85
+ 'appName' => 'FindMyiPhone',
86
+ 'appVersion' => '2.0.2',
87
+ 'shouldLocate' => false
88
+ }
89
+ }
90
+ body = JSON.generate(clientContext.merge(options))
91
+ post_with(uri, body)
92
+ else
93
+ post_with(uri)
94
+ end
95
+ end
96
+
97
+ def post_with(uri, body = nil)
98
+ if body
99
+ Typhoeus::Request.post(uri, userpwd: "#{@username}:#{@password}", headers: post_headers, followlocation: true, verbose: true, maxredirs: 10, body: body)
100
+ else
101
+ Typhoeus::Request.post(uri, userpwd: "#{@username}:#{@password}", headers: post_headers, followlocation: true, verbose: true, maxredirs: 10)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,18 @@
1
+ require 'ostruct'
2
+
3
+ class Device < OpenStruct
4
+
5
+ def initialize(params)
6
+ location = params['location']
7
+ super({
8
+ id: params['id'],
9
+ name: params['name'],
10
+ class: params['deviceClass'],
11
+ display_name: params['deviceDisplayName'],
12
+ model: params['deviceModel'],
13
+ latitude: location ? location['latitude'] : nil,
14
+ longitude: location ? location['longitude'] : nil,
15
+ time: location ? location['timeStamp'] : nil
16
+ })
17
+ end
18
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ios_devices_manager
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Stephane Thomas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2010-07-19 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A simple gem to get location data of a given device, send notifications
14
+ to it
15
+ email: thomas.stephn@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/ios_devices_manager.rb
21
+ - lib/ios_devices_manager/device.rb
22
+ homepage: http://rubygems.org/gems/ios_devices_manager
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.2.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Localize your iDevice from your ruby app
46
+ test_files: []