Class: Tkellem::TkellemBot::NetworkCommand
- Inherits:
-
Command
- Object
- Command
- Tkellem::TkellemBot::NetworkCommand
show all
- Defined in:
- lib/tkellem/tkellem_bot.rb
Instance Attribute Summary
Attributes inherited from Command
#args, #bouncer, #conn, #options, #opts
Class Method Summary
collapse
Instance Method Summary
collapse
Methods inherited from Command
admin_option, admin_user?, build_options, #initialize, option, register, resources, #respond, run, #show_help, #user
Class Method Details
.admin_only? ⇒ Boolean
338
339
340
|
# File 'lib/tkellem/tkellem_bot.rb', line 338
def self.admin_only?
false
end
|
Instance Method Details
#execute ⇒ Object
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
|
# File 'lib/tkellem/tkellem_bot.rb', line 362
def execute
if args.empty? && !opts['remove']
list
return
end
if opts['network'].present?
target = Network.where(["name = ? AND user_id = ?", opts['network'].downcase, user.try(:id)]).first
target ||= Network.where(["name = ? AND user_id IS NULL", opts['network'].downcase]).first if self.class.admin_user?(user)
else
target = bouncer.try(:network)
if target && target.public? && !self.class.admin_user?(user)
raise(Command::ArgumentError, "Only admins can modify public networks")
end
raise(Command::ArgumentError, "No network found") unless target
end
uri = ListenCommand.get_uri(args.shift) unless args.empty?
addr_args = { :address => uri.host, :port => uri.port, :ssl => (uri.scheme == 'ircs') } if uri
if opts['remove']
raise(Command::ArgumentError, "No network found") unless target
raise(Command::ArgumentError, "You must explicitly specify the network to remove") unless opts['network']
if uri
target.hosts.where(addr_args).first.try(:destroy)
respond " #{show(target)}"
else
target.destroy
r "Network #{target.name} removed"
end
else
unless target
create_public = (self.class.admin_user?(user) && opts['public'])
raise(Command::ArgumentError, "Only public networks can be created without a user") unless create_public || user
admin_or_user_networks = self.class.admin_user?(user) || Setting.get('allow_user_networks') == 'true'
raise(Command::ArgumentError, "Creating user networks has been disabled by the admins") unless admin_or_user_networks
target = Network.create(:name => opts['network'], :user => (create_public ? nil : user))
unless create_public
NetworkUser.create(:user => user, :network => target)
end
end
target.attributes = { :hosts_attributes => [addr_args] }
target.save
if target.errors.any?
respond "Error:"
target.errors.full_messages.each { |m| respond " #{m}" }
respond " #{show(target)}"
else
respond("updated:")
respond " #{show(target)}"
end
end
end
|
#list ⇒ Object
346
347
348
349
350
351
352
353
354
355
356
|
# File 'lib/tkellem/tkellem_bot.rb', line 346
def list
public_networks = Network.where('user_id IS NULL').to_a
user_networks = user.try(:reload).try(:networks) || []
if user_networks.present? && public_networks.present?
r "Public networks are prefixed with [P], user-specific networks with [U]."
end
(public_networks + user_networks).each do |net|
prefix = net.public? ? 'P' : 'U'
r " [#{prefix}] #{show(net)}"
end
end
|
#show(network) ⇒ Object
358
359
360
|
# File 'lib/tkellem/tkellem_bot.rb', line 358
def show(network)
"#{network.name} " + network.hosts.map { |h| "[#{h}]" }.join(' ')
end
|