From b15604c148803fcc860f3bfd509ad172ff24b6db Mon Sep 17 00:00:00 2001 From: jam Date: Tue, 14 Jan 2014 21:22:05 +0000 Subject: [PATCH] Icecast modules and test --- db/up/icecast.sql | 81 +++++++++++++++---- .../models/icecast_admin_authentication.rb | 67 ++++++++++----- ruby/lib/jam_ruby/models/icecast_directory.rb | 11 ++- ruby/lib/jam_ruby/models/icecast_limit.rb | 22 ++--- .../jam_ruby/models/icecast_listen_socket.rb | 12 ++- ruby/lib/jam_ruby/models/icecast_logging.rb | 12 ++- .../models/icecast_mastersvr_relay.rb | 12 ++- ruby/lib/jam_ruby/models/icecast_mount.rb | 58 ++++++++++--- ruby/lib/jam_ruby/models/icecast_path.rb | 17 +++- ruby/lib/jam_ruby/models/icecast_relay.rb | 27 ++++++- ruby/lib/jam_ruby/models/icecast_sercurity.rb | 33 +++++++- ruby/lib/jam_ruby/models/icecast_server.rb | 80 +++++++++++++++--- .../lib/jam_ruby/models/icecast_servermisc.rb | 6 +- .../jam_ruby/models/icecast_servermount.rb | 14 ++++ .../jam_ruby/models/icecast_serverrelay.rb | 14 ++++ .../jam_ruby/models/icecast_serversocket.rb | 14 ++++ .../models/icecast_user_authentication.rb | 68 +++++++++++++++- .../icecast_admin_authentication_spec.rb | 2 +- .../jam_ruby/models/icecast_directory_spec.rb | 2 + .../jam_ruby/models/icecast_limit_spec.rb | 14 ++-- .../models/icecast_listen_socket_spec.rb | 1 + .../jam_ruby/models/icecast_logging_spec.rb | 1 + .../models/icecast_mastersvr_relay_spec.rb | 8 +- .../jam_ruby/models/icecast_mount_spec.rb | 29 ++++++- .../spec/jam_ruby/models/icecast_path_spec.rb | 1 + .../jam_ruby/models/icecast_relay_spec.rb | 7 +- .../jam_ruby/models/icecast_security_spec.rb | 20 +++++ .../jam_ruby/models/icecast_server_spec.rb | 68 ++++++++++++++++ .../icecast_user_authentication_spec.rb | 31 +++++++ 29 files changed, 625 insertions(+), 107 deletions(-) create mode 100644 ruby/lib/jam_ruby/models/icecast_servermount.rb create mode 100644 ruby/lib/jam_ruby/models/icecast_serverrelay.rb create mode 100644 ruby/lib/jam_ruby/models/icecast_serversocket.rb diff --git a/db/up/icecast.sql b/db/up/icecast.sql index 01385f055..a04a62df8 100644 --- a/db/up/icecast.sql +++ b/db/up/icecast.sql @@ -147,11 +147,11 @@ create table icecast_relays ( -- mount at server. eg /example.ogg mount VARCHAR(128) not null, -- eg /different.ogg - local_mount VARCHAR(128) not null, + local_mount VARCHAR(128) not null default '/relaymout.ogg', -- eg joe. could be null - username VARCHAR(64) default NULL , + username VARCHAR(64) not null default 'jkicerelayusr' , -- user password - password VARCHAR(64) default null , + password VARCHAR(64) not null default 'jkicerelaypwd' , relay_shoutcast_metadata INTEGER default 0, --- relay only if we have someone wanting to listen on_demand INTEGER default 0, @@ -164,28 +164,28 @@ create TABLE icecast_user_authentications( id VARCHAR(64) PRIMARY KEY NOT NULL DEFAULT uuid_generate_v4(), --"htpasswd or url" -- real name is type - stype VARCHAR(16) DEFAULT NULL , + stype VARCHAR(16) DEFAULT 'url' , -- these are for httpasswd filename VARCHAR(256) default NULL, - allow_duplicate_users INTEGER DEFAULT 0, + allow_duplicate_users INTEGER DEFAULT 1, -- these options are for url -- eg value="http://myauthserver.com/stream_start.php" - mount_add VARCHAR(256) default NULL, + mount_add VARCHAR(256) DEFAULT 'http://icecastauth.jamkazam.com/stream_start.php', --value="http://myauthserver.com/stream_end.php" - mount_remove VARCHAR(256) default NULL, + mount_remove VARCHAR(256) default 'http://icecastauth.jamkazam.com/stream_end.php', --value="http://myauthserver.com/listener_joined.php" - listener_add VARCHAR(256) default NULL, + listener_add VARCHAR(256) default 'http://icecastauth.jamkazam.com/listener_joined.php', --value="http://myauthserver.com/listener_left.php" - listener_remove VARCHAR(256) default NULL, + listener_remove VARCHAR(256) default 'http://icecastauth.jamkazam.com/listener_left.php', -- value="user" - username VARCHAR(64) default NULL, + username VARCHAR(64) default 'jkuser', -- value="pass" - password VARCHAR(64) default NULL, + password VARCHAR(64) DEFAULT 'jkhackpass', -- value="icecast-auth-user: 1" - auth_header VARCHAR(64) default NULL, + auth_header VARCHAR(64) default 'icecast-auth-user: 1', -- value="icecast-auth-timelimit:" - timelimit_header VARCHAR(64) default NULL, + timelimit_header VARCHAR(64) default 'icecast-auth-timelimit:', created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP @@ -197,7 +197,7 @@ create table icecast_mounts ( -- eg/example-complex.ogg mount_name VARCHAR(128) UNIQUE NOT NULL, username VARCHAR(64) NOT NULL DEFAULT 'jamsource', - password VARCHAR(64) NOT NULL DEFAULT 'jamksource', + password VARCHAR(64) NOT NULL DEFAULT 'jamhackmesourcepwd', max_listeners INTEGER NOT NULL DEFAULT 4, max_listener_duration INTEGER NOT NULL DEFAULT 3600, -- dump of the stream coming through on this mountpoint. @@ -248,6 +248,8 @@ create table icecast_mounts ( on_connect VARCHAR(256) DEFAULT '/home/icecast/bin/source-start', on_disconnect VARCHAR(256) DEFAULT '/home/icecast/bin/source-end', + user_authentication_id varchar(64) DEFAULT NULL references icecast_user_authentications(id), + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); @@ -294,15 +296,60 @@ create table icecast_securities ( updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); + create TABLE icecast_servers( id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), - icecast_limit_id VARCHAR(64) REFERENCES icecast_limits(id) + --use this to mark the server configuration as needing to be regenerated + config_changed INTEGER DEFAULT 0, + limit_id VARCHAR(64) REFERENCES icecast_limits(id), + adminauth_id VARCHAR(64) REFERENCES icecast_admin_authentications(id), + directory_id VARCHAR(64) REFERENCES icecast_directories(id), + misc_id VARCHAR(64) REFERENCES icecast_servermiscs(id), + master_relay_id VARCHAR(64) REFERENCES icecast_mastersvr_relays(id), + /* relay_ids VARCHAR(64) REFERENCES icecast_serverrelays(id), + mount_ids VARCHAR(64) REFERENCES icecast_servermounts(id), + socket_ids VARCHAR(64) REFERENCES icecast_serversockets(id) , + */ - -- configs - -- mounts + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); +CREATE TABLE icecast_servermounts ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + mount_id VARCHAR(64) REFERENCES icecast_mounts(id) ON DELETE CASCADE, + server_id VARCHAR(64) REFERENCES icecast_servers(id) ON DELETE CASCADE, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +ALTER TABLE icecast_servermounts ADD CONSTRAINT server_mount_uniqkey UNIQUE (server_id, mount_id); + +CREATE TABLE icecast_serverrelays ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + relay_id VARCHAR(64) REFERENCES icecast_relays(id) ON DELETE CASCADE, + server_id VARCHAR(64) REFERENCES icecast_servers(id) ON DELETE CASCADE, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +ALTER TABLE icecast_serverrelays ADD CONSTRAINT server_relay_uniqkey UNIQUE (server_id, relay_id); + +CREATE TABLE icecast_serversockets ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + socket_id VARCHAR(64) REFERENCES icecast_listen_sockets(id) ON DELETE CASCADE, + server_id VARCHAR(64) REFERENCES icecast_servers(id) ON DELETE CASCADE, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +ALTER TABLE icecast_serversockets ADD CONSTRAINT server_socket_uniqkey UNIQUE (server_id, socket_id); + + + + + diff --git a/ruby/lib/jam_ruby/models/icecast_admin_authentication.rb b/ruby/lib/jam_ruby/models/icecast_admin_authentication.rb index d94aeb1d1..f4ce4a1df 100644 --- a/ruby/lib/jam_ruby/models/icecast_admin_authentication.rb +++ b/ruby/lib/jam_ruby/models/icecast_admin_authentication.rb @@ -1,26 +1,19 @@ - -module JSONable - def jdumpXml (ovb, nm, ident=1, output=$stdout) - - serialized = Hash.new - ovb.myattr_accessor.each do |attribute| - #serialized[attribute] = ovb[attribute] - puts "attribute = #{attribute}" - #serialized[attribute] = self.public_send attribute - end - - hash = serialized +module JAmXml + def jdumpXml (hash, nm, ident=1, output=$stdout, child=nil) tb = "\t" tbs = tb * ident - tbse = tb * (ident-1) - output.puts "#{tbse}<#{nm}>" + unless ident <= 0 + tbse = tb * (ident-1) + output.puts "#{tbse}<#{nm}>" + end + hash.each do |key, val| #puts "attrib: key=#{key} val=#{val}" el = key - if key.present? + if !key.nil? && !key.empty? el = key.gsub(/_/, '-') end @@ -28,15 +21,45 @@ module JSONable sv = val if val.to_s.empty? #skip ??? + next if val.to_s.empty? else if val.instance_of? String #encode the string to be xml safe sv = CGI.escapeHTML(val) end end - output.puts "#{tbs}<#{el}>#{sv}" + + if key.empty? + output.puts "#{tbs}<#{sv}/>" + else + output.puts "#{tbs}<#{el}>#{sv}" + end end - puts "#{tbse}" + + if !child.nil? + if child.kind_of? Array + child.each { |x| x.dumpXml(ident+1,output)} + else + child.dumpXml(ident+1,output) + end + end + unless ident <= 0 + puts "#{tbse}" + end + end + + def jMakeStrXmlSafe(val) + sv = val + if val.to_s.empty? + #skip ??? + sv ="" + else + if val.instance_of? String + #encode the string to be xml safe + sv = CGI.escapeHTML(val) + end + end + return sv end end @@ -44,7 +67,7 @@ end module JamRuby class IcecastAdminAuthentication < ActiveRecord::Base - include JSONable + include JAmXml attr_accessible :source_password, :relay_user, :relay_password, :admin_user, :admin_password #myattr_accessor = [:source_password, :relay_user, :relay_password, :admin_user, :admin_password ] @@ -65,7 +88,13 @@ module JamRuby validates :admin_password, presence: true, length: {minimum: 5} def dumpXml (ident=1, output=$stdout) - self.jdumpXml(self,"authentication", ident,output) + hash = Hash["source_password" => self.source_password, + "relay_user" => self.relay_user, + "relay_password" => self.relay_password, + "admin_user" => self.admin_user, + "admin_password" => self.admin_password] + + self.jdumpXml(hash,"authentication", ident,output) end diff --git a/ruby/lib/jam_ruby/models/icecast_directory.rb b/ruby/lib/jam_ruby/models/icecast_directory.rb index f86a7f7c9..79f0f012a 100644 --- a/ruby/lib/jam_ruby/models/icecast_directory.rb +++ b/ruby/lib/jam_ruby/models/icecast_directory.rb @@ -1,10 +1,17 @@ module JamRuby class IcecastDirectory < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' + attr_accessible :yp_url_timeout, :yp_url - attr_accessor :yp_url_timeout, :yp_url + validates :yp_url_timeout, numericality: {only_integer: true}, length: {in: 1..30} + + def dumpXml (ident=1, output=$stdout) + hash = Hash["yp_url_timeout" => self.yp_url_timeout, + "yp_url" => self.yp_url] + self.jdumpXml(hash, "directory", ident, output) + end end end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_limit.rb b/ruby/lib/jam_ruby/models/icecast_limit.rb index 2e006c7e1..0249cb2b1 100644 --- a/ruby/lib/jam_ruby/models/icecast_limit.rb +++ b/ruby/lib/jam_ruby/models/icecast_limit.rb @@ -1,20 +1,19 @@ module JamRuby class IcecastLimit < ActiveRecord::Base - include JSONable + include JAmXml self.primary_key = 'id' attr_accessible :clients, :sources, :queue_size, :client_timeout, :header_timeout, :source_timeout, :burst_size - #attr_accessor :clients, :sources, :queue_size, :client_timeout, :header_timeout, :source_timeout, :burst_size - #validates :clients, numericality: {only_integer: true}, length: {in: 1..15000} - validates :clients, numericality: {only_integer: true} + validates :clients, numericality: {only_integer: true}, length: {in: 1..15000} + after_initialize :init def init - puts "Init self.client #{self.clients}" + #puts "Init self.client #{self.clients}" self.clients ||= 10000 self.sources ||= 1000 self.queue_size ||= 102400 @@ -24,11 +23,16 @@ module JamRuby self.burst_size ||= 65536 end - def setclients(val) - @clients = val - end + def dumpXml (ident=1, output=$stdout) - self.jdumpXml(self, "limits", ident, output) + hash = Hash["clients" => self.clients, + "sources" => self.sources, + "queue_size" => self.queue_size, + "client_timeout" => self.client_timeout, + "header_timeout" => self.header_timeout] + hash.merge! "source_timeout" => self.source_timeout, + "burst_size" => self.burst_size + self.jdumpXml(hash, "limits", ident, output) end end diff --git a/ruby/lib/jam_ruby/models/icecast_listen_socket.rb b/ruby/lib/jam_ruby/models/icecast_listen_socket.rb index b4e1741f8..65d721b1a 100644 --- a/ruby/lib/jam_ruby/models/icecast_listen_socket.rb +++ b/ruby/lib/jam_ruby/models/icecast_listen_socket.rb @@ -1,13 +1,19 @@ module JamRuby class IcecastListenSocket < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :port, :bind_address, :shoutcast_mount, :shoutcast_compat - attr_accessor :port, :bind_address, :shoutcast_mount, :shoutcast_compat - def dumpXml() + belongs_to :server, :class_name => "JamRuby::IcecastServer" , :inverse_of => :sockets + def dumpXml (ident=1, output=$stdout) + hash = Hash["port" => self.port, + "bind_address" => self.bind_address, + "shoutcast_mount" => self.shoutcast_mount, + "shoutcast_compat" => self.shoutcast_compat] + + self.jdumpXml(hash, "listen-socket", ident, output) end diff --git a/ruby/lib/jam_ruby/models/icecast_logging.rb b/ruby/lib/jam_ruby/models/icecast_logging.rb index a2aa1cc88..45cd97401 100644 --- a/ruby/lib/jam_ruby/models/icecast_logging.rb +++ b/ruby/lib/jam_ruby/models/icecast_logging.rb @@ -1,12 +1,18 @@ module JamRuby class IcecastLogging < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :accesslog, :errorlog, :playlistlog, :loglevel - attr_accessor :accesslog, :errorlog, :playlistlog, :loglevel - def dumpXml() + def dumpXml (ident=1, output=$stdout) + + hash = Hash["accesslog" => self.accesslog, + "errorlog" => self.errorlog, + "loglevel" => self.loglevel, + "playlistlog" => self.playlistlog] + + self.jdumpXml(hash, "logging", ident, output) end diff --git a/ruby/lib/jam_ruby/models/icecast_mastersvr_relay.rb b/ruby/lib/jam_ruby/models/icecast_mastersvr_relay.rb index cd949c3d2..8cb9bd3a9 100644 --- a/ruby/lib/jam_ruby/models/icecast_mastersvr_relay.rb +++ b/ruby/lib/jam_ruby/models/icecast_mastersvr_relay.rb @@ -1,12 +1,18 @@ module JamRuby class IcecastMastersvrRelay < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :master_server, :master_server_port, :master_username, :master_password, :relays_on_demand - attr_accessible :master_server, :master_server_port, :master_username, :master_password, :relays_on_demand + validates :master_password, :master_username, presence: true - def dumpXml() + def dumpXml (ident=0, output=$stdout) + hash = Hash["master_server" => self.master_server, + "master_server_port" => self.master_server_port, + "master_username" => self.master_username, + "master_password" => self.master_password, + "relays_on_demand" => self.relays_on_demand] + self.jdumpXml(hash, "masterrelay", ident, output) end end end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_mount.rb b/ruby/lib/jam_ruby/models/icecast_mount.rb index 47731cbf1..91b5873a6 100644 --- a/ruby/lib/jam_ruby/models/icecast_mount.rb +++ b/ruby/lib/jam_ruby/models/icecast_mount.rb @@ -1,24 +1,64 @@ module JamRuby class IcecastMount < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :mount_name, :username, :password, :max_listeners, :max_listener_duration, :dump_file - attr_accessor :mount_name, :username, :password, :max_listeners, :max_listener_duration, :dump_file - attr_accessible :intro, :fallback_mount, :fallback_override, :fallback_when_full, :charset - attr_accessor :intro, :fallback_mount, :fallback_override, :fallback_when_full, :charset - attr_accessible :publicc, :stream_name, :stream_description, :stream_url, :genre, :bitrate - attr_accessor :publicc, :stream_name, :stream_description, :stream_url, :genre, :bitrate - attr_accessible :mtype, :subtype, :hidden, :burst_size, :mp3_metadata_interval, :on_connect, :on_disconnect - attr_accessor :mtype, :subtype, :hidden, :burst_size, :mp3_metadata_interval, :on_connect, :on_disconnect + validates :mount_name, presence: true + validates :username, presence: true + validates :password, presence: true + + #has_one :authentication, :class_name => "IcecastUserAuthentication" has_one :authentication, :class_name => "IcecastUserAuthentication" + belongs_to :servermount, :class_name => "JamRuby::IcecastServermount" , :inverse_of => :mount - def dumpXml() + def dumpXml (ident=1, output=$stdout) + hash = Hash["mount_name" => self.mount_name, + "username" => self.username, + "password" => self.password, + "max_listeners" => self.max_listeners, + "max_listener_duration" => self.max_listener_duration, + "dump_file" => self.dump_file, + "intro" => self.intro, + "fallback_mount" => self.fallback_mount, + "fallback_override" => self.fallback_override, + "fallback_when_full" => self.fallback_when_full, + "charset" => self.charset, + + "public" => self.publicc, + "stream_name" => self.stream_name, + "stream_description" => self.stream_description, + "stream_url" => self.stream_url, + "genre" => self.genre, + "bitrate" => self.bitrate, + + "type" => self.mtype, + "subtype" => self.subtype, + "hidden" => self.hidden, + "burst_size" => self.burst_size, + "mp3_metadata_interval" => self.mp3_metadata_interval, + "on_connect" => self.on_connect, + "on_disconnect" => self.on_disconnect + ] + + self.jdumpXml(hash, "mount", ident, output, self.authentication) end + + def getMediaUrl + if !self.servermount.nil? + @server = self.servermount.server + @misc = @server.misc + url = "http://" + @misc.hostname + self.mount_name + return url; + else + raise ("Undefined severid") + end + end + end end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_path.rb b/ruby/lib/jam_ruby/models/icecast_path.rb index a6f01e122..19edb23ab 100644 --- a/ruby/lib/jam_ruby/models/icecast_path.rb +++ b/ruby/lib/jam_ruby/models/icecast_path.rb @@ -1,13 +1,24 @@ module JamRuby class IcecastPath < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :basedir, :logdir, :pidfile, :webroot, :adminroot, :allow_ip, :deny_ip, :aliass - attr_accessor :basedir, :logdir, :pidfile, :webroot, :adminroot, :allow_ip, :deny_ip, :aliass - def dumpXml() + def dumpXml (ident=1, output=$stdout) + a = "alias #{self.aliass}" + hash = Hash["basedir" => self.basedir, + "logdir" => self.logdir, + "pidfile" => self.pidfile, + "webroot" => self.webroot, + "adminroot" => self.adminroot, + + "allow_ip" => self.allow_ip, + "deny_ip" => self.deny_ip, + "" => a, + ] + self.jdumpXml(hash, "paths", ident, output) end end diff --git a/ruby/lib/jam_ruby/models/icecast_relay.rb b/ruby/lib/jam_ruby/models/icecast_relay.rb index 19d9b275d..74f693f57 100644 --- a/ruby/lib/jam_ruby/models/icecast_relay.rb +++ b/ruby/lib/jam_ruby/models/icecast_relay.rb @@ -1,14 +1,35 @@ module JamRuby class IcecastRelay < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :server, :port, :mount, :local_mount, :username, :password, :relay_shoutcast_metadata, :on_demand - attr_accessor :server, :port, :mount, :local_mount, :username, :password, :relay_shoutcast_metadata, :on_demand - def dumpXml() + validates :port, numericality: {only_integer: true}, length: {in: 1..65000} + validates :mount, presence: true + validates :server, presence: true + validates :local_mount, presence: true + validates :username, presence: true + validates :password, presence: true + belongs_to :sserver, :class_name => "JamRuby::IcecastServerrelay" + + + def dumpXml (ident=1, output=$stdout) + + hash = Hash["server" => self.server, + "port" => self.port, + "mount" => self.mount, + "local_mount" => self.local_mount, + "username" => self.username, + + "password" => self.password, + "relay_shoutcast_metadata" => self.relay_shoutcast_metadata, + "on_demand" => self.on_demand + ] + self.jdumpXml(hash, "relay", ident, output) end + end end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_sercurity.rb b/ruby/lib/jam_ruby/models/icecast_sercurity.rb index 318c055ed..3a8dafef8 100644 --- a/ruby/lib/jam_ruby/models/icecast_sercurity.rb +++ b/ruby/lib/jam_ruby/models/icecast_sercurity.rb @@ -1,12 +1,39 @@ module JamRuby class IcecastSecurity < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :chroot, :changeowner_user, :changeowner_group - attr_accessor :chroot, :changeowner_user, :changeowner_group - def dumpXml() + validates :chroot, numericality: {only_integer: true}, length: {in: 0..1} + + + def dumpXml (ident=1, output=$stdout) + + tb = "\t" + tbs = tb * (ident) + tbs2 = tb * (ident+1) + tbse = tb * (ident-1) + if tbse.empty? || tbse.nil? + tbse="" + end + + + nm = "security" + output.puts "#{tbse}<#{nm}>" + + output.puts "#{tbs}#{self.chroot}" + output.puts "#{tbs}" + + v = jMakeStrXmlSafe(self.changeowner_user) + output.puts "#{tbs2}#{v}" + + v = jMakeStrXmlSafe(self.changeowner_group) + output.puts "#{tbs2}#{v}" + + output.puts "#{tbs}" + + output.puts "#{tbse}" end diff --git a/ruby/lib/jam_ruby/models/icecast_server.rb b/ruby/lib/jam_ruby/models/icecast_server.rb index 8f837edc8..c753e44e0 100644 --- a/ruby/lib/jam_ruby/models/icecast_server.rb +++ b/ruby/lib/jam_ruby/models/icecast_server.rb @@ -1,21 +1,75 @@ module JamRuby class IcecastServer < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' - has_one :limit, :class_name => "JamRuby::IcecastLimit" - has_one :adminauth, :class_name => "JamRuby::IcecastAdminAuthentication" - has_one :directory, :class_name => "JamRuby::IcecastDirectory" - has_one :misc, :class_name => "JamRuby::IcecastServermisc" - has_many :listen_sockets, :class_name => "JamRuby::IcecastListenSocket" - has_one :master_relay, :class_name => "JamRuby::IcecastMastersvrRelay" - has_one :relay, :class_name => "JamRuby::IcecastRelay" - has_many :mounts, :class_name => "JamRuby::IcecastMount" - has_one :path, :class_name => "JamRuby::IcecastPath" - has_one :logging, :class_name => "JamRuby::IcecastLogging" - has_one :security, :class_name => "JamRuby::IceCastSecurity" + has_one :limit, :class_name => "JamRuby::IcecastLimit" , foreign_key: "id" + has_one :adminauth, :class_name => "JamRuby::IcecastAdminAuthentication" , foreign_key: "id" + has_one :directory, :class_name => "JamRuby::IcecastDirectory" , foreign_key: "id" + has_one :misc, :class_name => "JamRuby::IcecastServermisc" , foreign_key: "id" - def dumpXml() + has_one :master_relay, :class_name => "JamRuby::IcecastMastersvrRelay" , foreign_key: "id" + + has_many :smounts, :class_name => "JamRuby::IcecastServermount" + has_many :mounts, :class_name => "JamRuby::IcecastMount", :through => :smounts + + has_many :ssockets, :class_name => "JamRuby::IcecastServersocket" + has_many :sockets, :class_name => "JamRuby::IcecastListenSocket" ,:through => :ssockets + + has_many :srelays, :class_name => "JamRuby::IcecastServerrelay" , :inverse_of => :server + has_many :relays, :class_name => "JamRuby::IcecastRelay" , :through => :srelays + + + has_one :path, :class_name => "JamRuby::IcecastPath" , foreign_key: "id" + has_one :logging, :class_name => "JamRuby::IcecastLogging" , foreign_key: "id" + has_one :security, :class_name => "JamRuby::IcecastSecurity" , foreign_key: "id" + + def dumpXml (ident=1, output=$stdout) + ident += 1 + unless self.limit.nil? + self.limit.dumpXml(ident,output) + end + unless self.adminauth.nil? + self.adminauth.dumpXml(ident,output) + end + + unless self.directory.nil? + self.directory.dumpXml(ident,output) + end + + unless self.misc.nil? + self.misc.dumpXml(ident,output) + end + + unless self.master_relay.nil? + self.master_relay.dumpXml(ident,output) + end + + + unless self.path.nil? + self.path.dumpXml(ident,output) + end + + unless self.logging.nil? + self.logging.dumpXml(ident,output) + end + + unless self.security.nil? + self.security.dumpXml(ident,output) + end + + + self.relays.each do |rl| + sock.rl(ident,output) + end + + self.sockets.each do |sock| + sock.dumpXml(ident,output) + end + + self.mounts.each do |mount| + mount.dumpXml(ident,output) + end end diff --git a/ruby/lib/jam_ruby/models/icecast_servermisc.rb b/ruby/lib/jam_ruby/models/icecast_servermisc.rb index 881a1c811..cdc2b2c95 100644 --- a/ruby/lib/jam_ruby/models/icecast_servermisc.rb +++ b/ruby/lib/jam_ruby/models/icecast_servermisc.rb @@ -1,12 +1,12 @@ module JamRuby class IcecastServermisc < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :hostname, :location, :admin, :fileserve, :server_id - attr_accessor :hostname, :location, :admin, :fileserve, :server_id - def dumpXml() + + def dumpXml (ident=0, output=$stdout) end diff --git a/ruby/lib/jam_ruby/models/icecast_servermount.rb b/ruby/lib/jam_ruby/models/icecast_servermount.rb new file mode 100644 index 000000000..633bc6af2 --- /dev/null +++ b/ruby/lib/jam_ruby/models/icecast_servermount.rb @@ -0,0 +1,14 @@ +module JamRuby + class IcecastServermount < ActiveRecord::Base + + self.primary_key = 'id' + + belongs_to :mount, :class_name => "JamRuby::IcecastMount" , :inverse_of => :servermount + belongs_to :server, :class_name => "JamRuby::IcecastServer" + + validates :server_id, :presence => true + validates :mount_id, :presence => true + + + end +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_serverrelay.rb b/ruby/lib/jam_ruby/models/icecast_serverrelay.rb new file mode 100644 index 000000000..14b80220c --- /dev/null +++ b/ruby/lib/jam_ruby/models/icecast_serverrelay.rb @@ -0,0 +1,14 @@ +module JamRuby + class IcecastServerrelay < ActiveRecord::Base + + self.primary_key = 'id' + + belongs_to :relay, :class_name => "JamRuby::IcecastRelay" + belongs_to :server, :class_name => "JamRuby::IcecastServer" + + validates :server_id, :presence => true + validates :relay_id, :presence => true + + + end +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_serversocket.rb b/ruby/lib/jam_ruby/models/icecast_serversocket.rb new file mode 100644 index 000000000..c677e23d2 --- /dev/null +++ b/ruby/lib/jam_ruby/models/icecast_serversocket.rb @@ -0,0 +1,14 @@ +module JamRuby + class IcecastServersocket < ActiveRecord::Base + + self.primary_key = 'id' + + belongs_to :socket, :class_name => "JamRuby::IcecastListenSocket" , foreign_key: "id" + belongs_to :server, :class_name => "JamRuby::IcecastServer" , foreign_key: "id" + + validates :socket_id, :presence => true + validates :server_id, :presence => true + + + end +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/icecast_user_authentication.rb b/ruby/lib/jam_ruby/models/icecast_user_authentication.rb index 12d4f1520..a28056bae 100644 --- a/ruby/lib/jam_ruby/models/icecast_user_authentication.rb +++ b/ruby/lib/jam_ruby/models/icecast_user_authentication.rb @@ -1,16 +1,76 @@ module JamRuby class IcecastUserAuthentication < ActiveRecord::Base - + include JAmXml self.primary_key = 'id' attr_accessible :stype, :filename, :allow_duplicate_users, :mount_add, :mount_remove, :listener_add, :listener_remove, :username, :password, :auth_header, :timelimit_header - attr_accessor :stype, :filename, :allow_duplicate_users, :mount_add, :mount_remove, - :listener_add, :listener_remove, :username, :password, :auth_header, :timelimit_header - def dumpXml() + validates :stype, presence: true + + def dumpXml (ident=1, output=$stdout) + + tb = "\t" + tbs = tb * (ident) + tbse = tb * (ident-1) + if tbse.empty? || tbse.nil? + tbse="" + end + + if self.stype.nil? + return + elsif self.stype.empty? + return + elsif self.stype == "htpasswd" + nm = "" + + output.puts "#{tbse}#{nm}" + fname = jMakeStrXmlSafe(self.filename) + + output.puts "#{tbs}