ass 0.0.20 → 0.0.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/ass.yml +2 -1
  3. data/lib/ass.rb +46 -24
  4. metadata +19 -3
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.20
1
+ 0.0.21
data/ass.yml CHANGED
@@ -3,7 +3,8 @@ mode: development
3
3
  log: off
4
4
  cron: cron
5
5
  timer: 0
6
- user: admin
6
+ user: admim
7
7
  pass: pass
8
+ flood: 1
8
9
  apps:
9
10
  - app1
data/lib/ass.rb CHANGED
@@ -20,6 +20,7 @@ require 'will_paginate'
20
20
  require 'will_paginate/sequel' # or data_mapper/sequel
21
21
  require 'uri'
22
22
  require 'sinatra/reloader' if development?
23
+ require 'sinatra/synchrony'
23
24
 
24
25
  ############################################################
25
26
  ## Initilization Setup
@@ -47,13 +48,17 @@ env = ENV['SINATRA_ENV'] || "development"
47
48
  config = YAML.load_file("#{Dir.pwd}/ass.yml")
48
49
  $timer = "#{config['timer']}".to_i
49
50
  $cron = config['cron'] || 'cron'
50
- $port = config['port'] || 4567
51
+ $port = "#{config['port']}".to_i || 4567
51
52
  $mode = config['mode'] || env
52
53
  $VERSION = File.open("#{ROOTDIR}/VERSION", "rb").read
53
54
  $apps = config['apps'] || []
54
55
  $log = config['log'] || 'off'
55
56
  $user = config['user'] || 'admin'
56
57
  $pass = config['pass'] || 'pass'
58
+ $flood = "#{config['flood']}".to_i || 1 # default 1 minute
59
+
60
+ $client_ip = '127.0.0.1'
61
+ $last_access = 0
57
62
 
58
63
  ############################################################
59
64
  ## Certificate Key Setup
@@ -112,9 +117,8 @@ end
112
117
  ## Sequel Database Setup
113
118
  ############################################################
114
119
 
115
- unless File.exist?("#{Dir.pwd}/ass-#{$model}.db") then
116
- $DB = Sequel.connect("sqlite://#{Dir.pwd}/ass-#{$model}.db")
117
-
120
+ unless File.exist?("#{Dir.pwd}/ass-#{$mode}.db") then
121
+ $DB = Sequel.connect("sqlite://#{Dir.pwd}/ass-#{$mode}.db")
118
122
  $DB.create_table :tokens do
119
123
  primary_key :id
120
124
  String :app, :unique => false, :null => false
@@ -122,34 +126,26 @@ unless File.exist?("#{Dir.pwd}/ass-#{$model}.db") then
122
126
  Time :created_at
123
127
  index [:app, :token]
124
128
  end
125
-
126
129
  $DB.create_table :pushes do
127
130
  primary_key :id
128
- String :pid, :unique => true, :null => false, :size => 100
131
+ String :pid, :unique => false, :null => false, :size => 100
129
132
  String :app, :unique => false, :null => false, :size => 30
130
133
  String :message, :unique => false, :null => false, :size => 107
131
134
  Time :created_at
132
135
  index [:pid, :app, :message]
133
136
  end
134
137
  else
135
- $DB = Sequel.connect("sqlite://#{Dir.pwd}/ass-#{$model}.db")
138
+ $DB = Sequel.connect("sqlite://#{Dir.pwd}/ass-#{$mode}.db")
136
139
  end
137
140
 
138
141
  WillPaginate.per_page = 10
139
142
 
140
- # Token = $DB[:tokens]
141
- # Push = $DB[:pushes]
142
-
143
143
  class Token < Sequel::Model
144
144
  Sequel.extension :pagination
145
-
146
- # here is your code
147
145
  end
148
146
 
149
147
  class Push < Sequel::Model
150
148
  Sequel.extension :pagination
151
-
152
- # here is your code
153
149
  end
154
150
 
155
151
  ############################################################
@@ -169,6 +165,9 @@ end
169
165
  ############################################################
170
166
 
171
167
  class App < Sinatra::Base
168
+
169
+ register Sinatra::Synchrony
170
+
172
171
  use Rack::MobileDetect
173
172
 
174
173
  set :root, File.expand_path('../../', __FILE__)
@@ -177,14 +176,33 @@ class App < Sinatra::Base
177
176
  set :views, File.dirname(__FILE__) + '/../views'
178
177
 
179
178
  helpers do
180
-
179
+
180
+ def checkFlood?(req)
181
+ if $client_ip != "#{req.ip}" then
182
+ $client_ip = "#{req.ip}"
183
+ return false
184
+ else
185
+ if $last_access == 0 then
186
+ return false
187
+ else
188
+ return isFlood?
189
+ end
190
+ end
191
+ end
192
+
193
+ def isFlood?
194
+ result = (Time.now - $last_access) < $flood * 60
195
+ $last_access = Time.now
196
+ return result
197
+ end
198
+
181
199
  def iOS?
182
- ret = case request.env['X_MOBILE_DEVICE']
200
+ result = case request.env['X_MOBILE_DEVICE']
183
201
  when /iPhone|iPod|iPad/ then
184
202
  true
185
203
  else false
186
204
  end
187
- return ret
205
+ return result
188
206
  end
189
207
 
190
208
  def authorized?
@@ -198,7 +216,6 @@ class App < Sinatra::Base
198
216
  throw(:halt, [401, "Oops... we need your login name & password\n"])
199
217
  end
200
218
  end
201
-
202
219
  end
203
220
 
204
221
  configure :production, :development do
@@ -273,13 +290,14 @@ class App < Sinatra::Base
273
290
 
274
291
  ## register token api
275
292
  get "/v1/apps/#{app}/:token" do
276
- if (("#{params[:token]}".length == 64) and iOS? ) then
293
+ if (("#{params[:token]}".length == 64) and iOS? and checkFlood?(request) ) then
277
294
  puts "[#{params[:token]}] was added to '#{app}'" if "#{$mode}".strip == 'development'
278
295
  o = Token.first(:app => app, :token => params[:token])
279
296
  unless o
280
297
  Token.insert(
281
298
  :app => app,
282
- :token => params[:token]
299
+ :token => params[:token],
300
+ :created_at => Time.now
283
301
  )
284
302
  end
285
303
  end
@@ -304,6 +322,9 @@ class App < Sinatra::Base
304
322
  @exist = Push.first(:pid => "#{pid}", :app => "#{app}")
305
323
 
306
324
  unless @exist
325
+
326
+ Push.insert(:pid => pid, :message => message, :created_at => Time.now, :app => "#{app}" )
327
+
307
328
  openSSLContext = $certkey["#{app}"]
308
329
  # Connect to port 2195 on the server.
309
330
  sock = nil
@@ -315,8 +336,7 @@ class App < Sinatra::Base
315
336
  # do our SSL handshaking
316
337
  sslSocket = OpenSSL::SSL::SSLSocket.new(sock, openSSLContext)
317
338
  sslSocket.connect
318
- #Push.create( :pid => pid )
319
- Push.insert(:pid => pid, :message => message, :created_at => Time.now, :app => "#{app}" )
339
+
320
340
  # write our packet to the stream
321
341
  @tokens.each do |o|
322
342
  tokenText = o[:token]
@@ -349,6 +369,9 @@ class App < Sinatra::Base
349
369
  @exist = Push.first(:pid => "#{pid}", :app => "#{app}")
350
370
 
351
371
  unless @exist
372
+
373
+ Push.insert(:pid => pid, :message => message, :created_at => Time.now, :app => "#{app}" )
374
+
352
375
  openSSLContext = $certkey["#{app}"]
353
376
  # Connect to port 2195 on the server.
354
377
  sock = nil
@@ -360,8 +383,7 @@ class App < Sinatra::Base
360
383
  # do our SSL handshaking
361
384
  sslSocket = OpenSSL::SSL::SSLSocket.new(sock, openSSLContext)
362
385
  sslSocket.connect
363
- #Push.create( :pid => pid )
364
- Push.insert(:pid => pid, :message => message, :created_at => Time.now, :app => "#{app}" )
386
+
365
387
  # write our packet to the stream
366
388
  @tokens.each do |o|
367
389
  tokenText = o[:token]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.20
4
+ version: 0.0.21
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-28 00:00:00.000000000 Z
12
+ date: 2013-05-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sqlite3
@@ -203,6 +203,22 @@ dependencies:
203
203
  - - ! '>='
204
204
  - !ruby/object:Gem::Version
205
205
  version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: sinatra-synchrony
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: 0.4.1
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ~>
220
+ - !ruby/object:Gem::Version
221
+ version: 0.4.1
206
222
  - !ruby/object:Gem::Dependency
207
223
  name: shoulda
208
224
  requirement: !ruby/object:Gem::Requirement
@@ -474,7 +490,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
474
490
  version: '0'
475
491
  segments:
476
492
  - 0
477
- hash: -403176201839861688
493
+ hash: -3291505526784258788
478
494
  required_rubygems_version: !ruby/object:Gem::Requirement
479
495
  none: false
480
496
  requirements: