Class: Narou::AppServer
- Inherits:
-
Sinatra::Base
- Object
- Sinatra::Base
- Narou::AppServer
- Defined in:
- lib/web/appserver.rb
Constant Summary collapse
- BOOKMARKLET_MODE =
ウィジット関係
%w(download insert_button)
- ALLOW_HOSTS =
[].tap do |hosts| SiteSetting.settings.each_value do |s| hosts << s["domain"] end hosts.freeze end
- @@request_reboot =
false
- @@already_update_system =
false
- @@gem_update_last_log =
""
Class Method Summary collapse
-
.create_address(user_port = nil) ⇒ Object
サーバのアドレスを生成.
-
.my_ipaddress ⇒ Object
自分のIPアドレス取得.
- .push_server ⇒ Object
- .push_server=(server) ⇒ Object
- .request_reboot ⇒ Object
- .request_reboot? ⇒ Boolean
Instance Method Summary collapse
-
#fill_general_all_no_in_database ⇒ Object
話数の設定されていない小説の話数を取得して埋める.
- #general_all_no_by_toc(id) ⇒ Object
-
#initialize ⇒ AppServer
constructor
A new instance of AppServer.
- #puts_hello_messages ⇒ Object
-
#setup_server_authentication ⇒ Object
サーバーの認証の設定 とりあえずDigest認証のみ.
- #start_device_ejectable_event ⇒ Object
Constructor Details
#initialize ⇒ AppServer
Returns a new instance of AppServer.
121 122 123 124 125 126 127 |
# File 'lib/web/appserver.rb', line 121 def initialize super start_device_ejectable_event fill_general_all_no_in_database setup_server_authentication end |
Class Method Details
.create_address(user_port = nil) ⇒ Object
サーバのアドレスを生成
portは初回起動時にランダムで設定する。次回からは同じ設定を引き継ぐ。 bindは自分で設定する場合は narou s server-bind=address で行う。 bindは設定しなかった場合は起動したPCのプライベートIPアドレスが設定される。 この場合はLAN内からアクセス出来る。 bindがlocalhostの場合は実際には127.0.0.1で処理される。(起動したPCでしか アクセス出来ない) 0.0.0.0 を指定した場合はアクセスに制限がかからない(外部からアクセス可能) セキュリティ上オススメ出来ない。
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/web/appserver.rb', line 80 def self.create_address(user_port = nil) global_setting = Inventory.load("global_setting", :global) port, bind = global_setting["server-port"], global_setting["server-bind"] port = user_port if user_port ipaddress = my_ipaddress unless port port = rand(4000..65000) global_setting["server-port"] = port global_setting.save end bind = "127.0.0.1" if bind == "localhost" host = bind ? bind : ipaddress set :port, port set :bind, host { host: host, port: port } end |
.my_ipaddress ⇒ Object
自分のIPアドレス取得
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/web/appserver.rb', line 105 def self.my_ipaddress @@__ipaddress ||= -> { udp = UDPSocket.new begin # 128.0.0.0 への送信に使用されるNICのアドレスを取得 udp.connect("128.0.0.0", 7) Socket.unpack_sockaddr_in(udp.getsockname)[1] rescue Errno::ENETUNREACH # 128.0.0.0 へのルーティングがないとき "127.0.0.1" ensure udp.close end }.call end |
.push_server ⇒ Object
56 57 58 |
# File 'lib/web/appserver.rb', line 56 def self.push_server @@push_server end |
.push_server=(server) ⇒ Object
52 53 54 |
# File 'lib/web/appserver.rb', line 52 def self.push_server=(server) @@push_server = server end |
.request_reboot ⇒ Object
60 61 62 |
# File 'lib/web/appserver.rb', line 60 def self.request_reboot @@request_reboot = true end |
.request_reboot? ⇒ Boolean
64 65 66 |
# File 'lib/web/appserver.rb', line 64 def self.request_reboot? @@request_reboot end |
Instance Method Details
#fill_general_all_no_in_database ⇒ Object
話数の設定されていない小説の話数を取得して埋める
154 155 156 157 158 159 160 161 162 |
# File 'lib/web/appserver.rb', line 154 def fill_general_all_no_in_database modified = false Database.instance.each do |id, data| next if data["general_all_no"] data["general_all_no"] = general_all_no_by_toc(id) modified = true end Database.instance.save_database if modified end |
#general_all_no_by_toc(id) ⇒ Object
147 148 149 150 151 |
# File 'lib/web/appserver.rb', line 147 def general_all_no_by_toc(id) toc = Downloader.new(id).load_toc_file return nil unless toc toc["subtitles"].size end |
#puts_hello_messages ⇒ Object
129 130 131 |
# File 'lib/web/appserver.rb', line 129 def puts "<white>Narou.rb version #{Narou::VERSION}</white>".termcolor end |
#setup_server_authentication ⇒ Object
サーバーの認証の設定 とりあえずDigest認証のみ
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/web/appserver.rb', line 166 def setup_server_authentication auth = Inventory.load("global_setting", :global).group("server-digest-auth") user = auth.user hashed = auth.hashed_password passwd = hashed || auth.password # enableかつユーザー名とパスワードが設定されている時のみ認証を有効にする return unless auth.enable && user && passwd self.class.class_exec do use Rack::Auth::Digest::MD5, { realm: "narou.rb", opaque: "", passwords_hashed: hashed } do |username| passwd if username == user end end end |
#start_device_ejectable_event ⇒ Object
133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/web/appserver.rb', line 133 def start_device_ejectable_event return unless Device.support_eject? Thread.new do loop do if @@push_server.connections.count > 0 device = Narou.get_device @@push_server.send_all(:"device.ejectable" => device && device.ejectable?) end sleep 2 end end end |