Author: titmuss
Date: Fri Apr 18 10:18:33 2008
New Revision: 2276
URL: http://svn.slimdevices.com?rev=2276&root=Jive&view=rev
Log:
[EMAIL PROTECTED] (orig r2275): titmuss | 2008-04-18 18:14:31 +0100
Bug: 5887
Description:
Add support for password protected SqueezeCenters.
Modified:
7.1/trunk/ (props changed)
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthApplet.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthMeta.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/strings.txt
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SelectPlayer/SelectPlayerApplet.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/Comet.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/CometRequest.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/RequestHttp.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua
7.1/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
Propchange: 7.1/trunk/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Fri Apr 18 10:18:33 2008
@@ -1,4 +1,4 @@
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.0/trunk:2269
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.0/trunk:2275
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:2013
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/SN:1083
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/scrolling:1378
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthApplet.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthApplet.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthApplet.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthApplet.lua
Fri Apr 18 10:18:33 2008
@@ -34,63 +34,68 @@
local Choice = require("jive.ui.Choice")
local Textarea = require("jive.ui.Textarea")
local Textinput = require("jive.ui.Textinput")
+
+local SocketHttp = require("jive.net.SocketHttp")
+
local log = require("jive.utils.log").logger("applets.setup")
module(...)
oo.class(_M, Applet)
-function settingsShow(self)
- -- setup menu
- local window = Window("window", self:string("HTTP_AUTH",
'settingstitle'))
- local menu = SimpleMenu("menu",
- {
- -- username
- {
- text = self:string("HTTP_AUTH_USERNAME"),
- sound = "WINDOWSHOW",
- callback = function(event, menuItem)
- self:enterTextWindow('username', menuItem)
- end
- },
- -- password
- {
- text = self:string("HTTP_AUTH_PASSWORD"),
- sound = "WINDOWSHOW",
- callback = function(event, menuItem)
- self:enterTextWindow('password', menuItem)
- end
- }
- })
-
- window:addWidget(Textarea("help", self:string("HTTP_AUTH_HELP")))
- window:addWidget(menu)
+function squeezeCenterPassword(self, server)
+ self.server = server
- self:tieAndShowWindow(window)
- return window
+ self.topWindow = self:_enterTextWindow("username",
"HTTP_AUTH_USERNAME", "HTTP_AUTH_USERNAME_HELP", _enterPassword)
end
-function enterTextWindow(self, userOrPass, menuItem)
- local window = Window("window", menuItem.text)
- local helpText = self:string("HTTP_AUTH_ENTER_HELP", userOrPass)
+function _enterPassword(self)
+ self:_enterTextWindow("password", "HTTP_AUTH_PASSWORD",
"HTTP_AUTH_PASSWORD_HELP", _enterDone)
+end
- local defaultText = self:getSettings()[userOrPass]
- if defaultText == nil then
- defaultText = ""
- end
- local input = Textinput("textinput", defaultText,
+function _enterDone(self)
+ local protected, realm = self.server:isPasswordProtected()
+
+ -- store username/password
+ local settings = self:getSettings()
+ settings[self.server:getName()] = {
+ realm = realm,
+ username = self.username,
+ password = self.password
+ }
+ self:storeSettings()
+
+ -- set authorization
+ self.server:setCredentials({
+ realm = realm,
+ username = self.username,
+ password = self.password,
+ })
+
+ self.username = nil
+ self.password = nil
+
+ -- FIXME delay here to check if the username/password are correct
+
+ self.topWindow:hideToTop(Window.transitionPushLeft)
+end
+
+
+function _enterTextWindow(self, key, title, help, next)
+ local window = Window("window", self:string(title))
+
+ local input = Textinput("textinput", self[key] or "",
function(_, value)
- log:warn("Input ", value)
- self:storeInput(userOrPass, value)
+ self[key] = value
window:playSound("WINDOWSHOW")
- window:hide(Window.transitionPushLeft)
+ next(self)
return true
end)
- window:addWidget(Textarea("softHelp", helpText))
+ window:addWidget(Textarea("softHelp", self:string(help)))
window:addWidget(Label("softButton1", "Insert"))
window:addWidget(Label("softButton2", "Delete"))
window:addWidget(input)
@@ -99,10 +104,6 @@
return window
end
-function storeInput(self, userOrPass, value)
- self:getSettings()[userOrPass] = value
- self:storeSettings()
-end
--[[
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthMeta.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthMeta.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthMeta.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/HttpAuthMeta.lua
Fri Apr 18 10:18:33 2008
@@ -22,6 +22,8 @@
local AppletMeta = require("jive.AppletMeta")
local Framework = require("jive.ui.Framework")
+local SlimServer = require("jive.slim.SlimServer")
+
local appletManager = appletManager
local jiveMain = jiveMain
@@ -33,17 +35,15 @@
end
function defaultSettings(meta)
- return {
- username = "",
- password = ""
- }
+ return { }
end
function registerApplet(meta)
---[[ FIXME-- this is not implemented correctly, comment for now
- -- add a menu to load us
- jiveMain:addItem(meta:menuItem('appletHttpAuth', 'advancedSettings',
"HTTP_AUTH", function(applet, ...) applet:settingsShow(...) end, 85))
---]]
+ local settings = meta:getSettings()
+
+ for servername, cred in pairs(settings) do
+ SlimServer:setCredentials(cred, servername)
+ end
end
--[[
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/strings.txt
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/strings.txt?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/strings.txt
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/HttpAuth/strings.txt
Fri Apr 18 10:18:33 2008
@@ -29,21 +29,21 @@
IT Password
NL Wachtwoord
-HTTP_AUTH_HELP
- DA Hvis du har aktiveret kodeord-beskyttelse af SqueezeCenter skal
du konfigurere brugernavn og kodeord her.
- DE Ist der Kennwortschutz für SqueezeCenter konfiguriert, geben
Sie hier Benutzername und Kennwort ein.
- EN If your SqueezeCenter is configured for password protection,
configure the username and password here
- ES Si SqueezeCenter se ha configurado con protección por
contraseña, configure el nombre de usuario y la contraseña aquÃ
- FR Si le SqueezeCenter est configuré pour la protection par mot
de passe, spécifiez le nom d'utilisateur et le mot de passe ici.
- IT Se SqueezeCenter è configurato con la protezione tramite
password, configurare qui nome utente e password
- NL Als je SqueezeCenter voor wachtwoordbeveiliging geconfigureerd
is, kun je de gebruikersnaam en het wachtwoord hier instellen.
+HTTP_AUTH_USERNAME_HELP
+ DA Indtast Brugernavn som er konfigureret for kodeord-beskyttelse
på dit SqueezeCenter
+ DE Geben Sie den für den SqueezeCenter-Kennwortschutz
konfigurierten Benutzername ein.
+ EN Enter the Username configured for password protection on your
SqueezeCenter
+ ES Introduzca Nombre de usuario tal y como se haya configurado
para protección por contraseña en SqueezeCenter
+ FR Spécifiez le Nom d'utilisateur configuré pour la protection
par mot de passe sur le SqueezeCenter.
+ IT Immettere Nome utente configurato per la protezione con
password in SqueezeCenter
+ NL Voer geconfigureerd(e) Gebruikersnaam dat/die voor
wachtwoordbeveiliging in je SqueezeCenter is ingesteld
-HTTP_AUTH_ENTER_HELP
- DA Indtast %s som er konfigureret for kodeord-beskyttelse på dit
SqueezeCenter
- DE Geben Sie den für den SqueezeCenter-Kennwortschutz
konfigurierten %s ein.
- EN Enter the %s configured for password protection on your
SqueezeCenter
- ES Introduzca %s tal y como se haya configurado para protección
por contraseña en SqueezeCenter
- FR Spécifiez le %s configuré pour la protection par mot de passe
sur le SqueezeCenter.
- IT Immettere %s configurato per la protezione con password in
SqueezeCenter
- NL Voer geconfigureerd(e) %s dat/die voor wachtwoordbeveiliging in
je SqueezeCenter is ingesteld
+HTTP_AUTH_PASSWORD_HELP
+ DA Indtast Kodeord som er konfigureret for kodeord-beskyttelse på
dit SqueezeCenter
+ DE Geben Sie den für den SqueezeCenter-Kennwortschutz
konfigurierten Kennwort ein.
+ EN Enter the Password configured for password protection on your
SqueezeCenter
+ ES Introduzca Contraseña tal y como se haya configurado para
protección por contraseña en SqueezeCenter
+ FR Spécifiez le Mot de passe configuré pour la protection par
mot de passe sur le SqueezeCenter.
+ IT Immettere Password configurato per la protezione con password
in SqueezeCenter
+ NL Voer geconfigureerd(e) Wachtwoord dat/die voor
wachtwoordbeveiliging in je SqueezeCenter is ingesteld
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SelectPlayer/SelectPlayerApplet.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SelectPlayer/SelectPlayerApplet.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SelectPlayer/SelectPlayerApplet.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SelectPlayer/SelectPlayerApplet.lua
Fri Apr 18 10:18:33 2008
@@ -57,8 +57,14 @@
oo.class(_M, Applet)
+local PLAYER_WEIGHT = 1
+local SERVER_WEIGHT = 10
+local ACTIVATE_WEIGHT = 20
+
+
function init(self, ...)
self.playerItem = {}
+ self.serverItem = {}
self.scanResults = {}
if hasWireless then
@@ -82,6 +88,8 @@
self.playerMenu:removeItem(self.playerItem[mac])
self.playerItem[mac] = nil
end
+
+ self:_updateServerItem(playerObj:getSlimServer())
end
@@ -93,6 +101,8 @@
if self.playerMenu then
self:_addPlayerItem(playerObj)
end
+
+ self:_updateServerItem(playerObj:getSlimServer())
end
@@ -105,22 +115,30 @@
function notify_serverConnected(self, server)
- if self.playerMenu then
- for id, player in server:allPlayers() do
- self:_refreshPlayerItem(player)
- end
- self:manageSelectPlayerMenu()
- end
+ if not self.playerMenu then
+ return
+ end
+
+ for id, player in server:allPlayers() do
+ self:_refreshPlayerItem(player)
+ end
+ self:manageSelectPlayerMenu()
+
+ self:_updateServerItem(server)
end
function notify_serverDisconnected(self, server)
- if self.playerMenu then
- for id, player in server:allPlayers() do
- self:_refreshPlayerItem(player)
- end
- self:manageSelectPlayerMenu()
- end
+ if not self.playerMenu then
+ return
+ end
+
+ for id, player in server:allPlayers() do
+ self:_refreshPlayerItem(player)
+ end
+ self:manageSelectPlayerMenu()
+
+ self:_updateServerItem(server)
end
@@ -160,7 +178,7 @@
function _addPlayerItem(self, player)
local mac = player.id
local playerName = player.name
- local playerWeight = 1
+ local playerWeight = PLAYER_WEIGHT
-- if waiting for a SN pin modify name
if player:getPin() then
@@ -170,7 +188,7 @@
end
playerName = self:string("SQUEEZEBOX_ACTIVATE", player.name)
- playerWeight = 20
+ playerWeight = ACTIVATE_WEIGHT
end
local item = {
@@ -263,6 +281,34 @@
end
+-- Add password protected servers
+function _updateServerItem(self, server)
+ local id = server:getName()
+
+ if not server:isPasswordProtected() then
+ if self.serverItem[id] then
+ self.playerMenu:removeItem(self.serverItem[id])
+ self.serverItem[id] = nil
+ end
+ return
+ end
+
+ local item = {
+ id = id,
+ text = server:getName(),
+ sound = "WINDOWSHOW",
+ callback = function()
+ local auth = AppletManager:loadApplet("HttpAuth")
+ auth:squeezeCenterPassword(server)
+ end,
+ weight = SERVER_WEIGHT,
+ }
+
+ self.playerMenu:addItem(item)
+ self.serverItem[id] = item
+end
+
+
function _showWallpaper(self, playerId)
log:info("previewing background wallpaper for ", playerId)
SetupWallpaper:showBackground(nil, playerId)
@@ -294,6 +340,11 @@
if player:isConnected() then
_addPlayerItem(self, player)
end
+ end
+
+ -- Display password protected servers
+ for id, server in self.discovery:allServers() do
+ _updateServerItem(self, server)
end
-- Bug 6130 add a Set up Squeezebox option, only in Setup not Settings
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
---
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
(original)
+++
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/SlimBrowserApplet.lua
Fri Apr 18 10:18:33 2008
@@ -2244,6 +2244,17 @@
end,
})
+ if server:isPasswordProtected() then
+ -- password protection has been enabled
+ menu:addItem({
+ text = self:string("SLIMBROWSER_ENTER_PASSWORD"),
+ callback = function()
+ local auth =
AppletManager:loadApplet("HttpAuth")
+ auth:squeezeCenterPassword(server)
+ end,
+ })
+ end
+
-- change music source, only for udap players
if player and player:canUdap() and
appletManager:hasApplet("SetupSqueezebox") then
menu:addItem({
Modified:
7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/applets/SlimBrowser/strings.txt
Fri Apr 18 10:18:33 2008
@@ -142,3 +142,5 @@
SLIMBROWSER_SCANNER
EN Song Position
+SLIMBROWSER_ENTER_PASSWORD
+ EN Enter Password
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/Comet.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/Comet.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/Comet.lua (original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/Comet.lua Fri Apr 18
10:18:33 2008
@@ -579,7 +579,7 @@
_getHandshakeSink = function(self)
- return function(chunk, err)
+ return function(chunk, err, cometRequest)
if self.state ~= CONNECTING then
return
end
@@ -589,7 +589,7 @@
log:info(self, ": _handshake error: ", err)
-- Try to reconnect according to advice
- return _handleAdvice(self)
+ return _handleAdvice(self, cometRequest)
end
-- If we have data
@@ -711,13 +711,13 @@
-- sink for chunked connection, handle advice on error
_getEventSink = function(self)
- return function(chunk, err)
+ return function(chunk, err, cometRequest)
-- On error, print something...
if err then
log:info(self, ": _getEventSink error: ", err)
-- Try to reconnect according to advice
- return _handleAdvice(self)
+ return _handleAdvice(self, cometRequest)
end
_response(self, chunk)
@@ -727,10 +727,14 @@
-- sink for request connection, resend requests on error
_getRequestSink = function(self)
- return function(chunk, err)
+ return function(chunk, err, cometRequest)
-- On error, print something...
if err then
log:info(self, ": _getRequestSink error: ", err)
+
+ if cometRequest:t_getResponseStatus() == 401 then
+ return _handleAdvice(self, cometRequest)
+ end
-- Resend any un-acknowledged requests
local data = {}
@@ -891,12 +895,20 @@
-- Decide what to do if we get disconnected or get an error while
handshaking/connecting
-_handleAdvice = function(self)
+_handleAdvice = function(self, cometRequest)
log:info(self, ": handleAdvice state=", self.state)
if self.state == UNCONNECTED then
-- do nothing
return
+ end
+
+ -- FIXME can handle HTTP errors here
+
+ -- HTTP authorization failure?
+ if cometRequest and cometRequest:t_getResponseStatus() == 401 then
+ self.jnt:notify('cometHttpError', self, cometRequest)
+ -- keep trying to connect
end
-- force connection closed
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/CometRequest.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/CometRequest.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/CometRequest.lua
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/CometRequest.lua Fri
Apr 18 10:18:33 2008
@@ -132,9 +132,9 @@
jsonfilters.decode,
sink
)
- mySink(data)
+ mySink(data, nil, self)
else
- sink(nil, err)
+ sink(nil, err, self)
end
end
end
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/RequestHttp.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/RequestHttp.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/RequestHttp.lua
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/RequestHttp.lua Fri
Apr 18 10:18:33 2008
@@ -338,18 +338,18 @@
local code, err = self:t_getResponseStatus()
if code == 200 then
if self.t_httpResponse.stream then
- sink(data)
+ sink(data, nil, self)
else
if data and data ~= "" then
- sink(data)
- sink(nil)
+ sink(data, nil, self)
+ sink(nil, nil, self)
end
end
else
if not err then
err = "HTTP request failed with code" .. code
end
- sink(nil, err)
+ sink(nil, err, self)
end
end
end
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua Fri Apr
18 10:18:33 2008
@@ -39,7 +39,7 @@
local oo = require("loop.simple")
local socket = require("socket")
-local socketHttp = require("socket.http")
+local mime = require("mime")
local ltn12 = require("ltn12")
local Task = require("jive.ui.Task")
@@ -65,25 +65,41 @@
local SOCKET_CONNECT_TIMEOUT = 10 -- connect in 10 seconds
local SOCKET_TIMEOUT = 70 -- response in 70 seconds
+-- http authentication credentials
+local credentials = {}
+
+
+-- Class method to set HTTP authentication headers
+function setCredentials(class, cred)
+ _assert(cred.ipport)
+ _assert(cred.realm)
+ _assert(cred.username)
+ _assert(cred.password)
+
+ -- FIXME this only supports one username:password per server
+ local key = table.concat(cred.ipport, ":")
+ credentials[key] = cred
+end
+
--[[
-=head2 jive.net.SocketHttp(jnt, address, port, name)
+=head2 jive.net.SocketHttp(jnt, host, port, name)
Creates an HTTP socket named I<name> to interface with the given I<jnt>
(a L<jive.net.NetworkThread> instance). I<name> is used for debugging and
-defaults to "". I<address> and I<port> are the hostname/IP address and port of
the HTTP server.
+defaults to "". I<host> and I<port> are the hostname/IP host and port of the
HTTP server.
=cut
--]]
-function __init(self, jnt, address, port, name)
- log:debug("SocketHttp:__init(", name, ", ", address, ", ", port, ")")
+function __init(self, jnt, host, port, name)
+ log:debug("SocketHttp:__init(", name, ", ", host, ", ", port, ")")
-- init superclass
- local obj = oo.rawnew(self, SocketTcp(jnt, address, port, name))
+ local obj = oo.rawnew(self, SocketTcp(jnt, host, port, name))
-- hostname
- obj.address = address
+ obj.host = host
-- init states
obj.t_httpSendState = 't_sendDequeue'
@@ -185,9 +201,9 @@
function t_sendResolve(self)
log:debug(self, ":t_sendResolve()")
- if DNS:isip(self.address) then
+ if DNS:isip(self.host) then
-- don't lookup an ip address
- self.t_tcp.address = self.address
+ self.t_tcp.address = self.host
self:t_nextSendState(true, 't_sendConnect')
return
end
@@ -195,12 +211,12 @@
local t = Task(tostring(self) .. "(D)",
self,
function()
- log:debug(self, " DNS loopup for ", self.address)
- local ip, err = DNS:toip(self.address)
+ log:debug(self, " DNS loopup for ", self.host)
+ local ip, err = DNS:toip(self.host)
log:debug(self, " IP=", ip)
if not ip then
- self:close(self.address .. " " .. err)
+ self:close(self.host .. " " .. err)
return
end
@@ -240,12 +256,14 @@
["User-Agent"] = 'Jive/' .. JIVE_VERSION,
}
+ local ip, port = self:t_getAddressPort()
+
local req_headers = self.t_httpSendRequest:t_getRequestHeaders()
if not req_headers["Host"] then
- local address, port = self:t_getAddressPort()
- headers["Host"] = address
- if port != 80 then
- headers["Host"] = headers["Host"] .. ':' .. port
+ if port == 80 then
+ headers["Host"] = self.host
+ else
+ headers["Host"] = self.host .. ":" .. port
end
end
@@ -253,7 +271,14 @@
headers["Content-Length"] = #self.t_httpSendRequest:t_body()
end
- req_headers["Accept-Language"] = string.lower(locale.getLocale())
+ req_headers["Accept-Language"] = string.lower(locale.getLocale())
+
+ -- http authentication?
+ local cred = credentials[ip .. ":" .. port]
+ if cred then
+ req_headers["Authorization"] = "Basic " ..
mime.b64(cred.username .. ":" .. cred.password)
+ end
+
return headers
end
Modified: 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
URL:
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua?rev=2276&root=Jive&r1=2275&r2=2276&view=diff
==============================================================================
--- 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua
(original)
+++ 7.1/trunk/squeezeplay/src/squeezeplay/share/jive/slim/SlimServer.lua Fri
Apr 18 10:18:33 2008
@@ -69,6 +69,9 @@
-- list of servers index by id.
local servers = {}
setmetatable(servers, { __mode = 'v' })
+
+-- credential list
+local credentials = {}
-- _getSink
@@ -191,6 +194,27 @@
end
+-- can be called as a object or class method
+function setCredentials(self, cred, name)
+ if not name then
+ -- object method
+ name = self:getName()
+
+ SocketHttp:setCredentials({
+ ipport = { self:getIpPort() },
+ realm = cred.realm,
+ username = cred.username,
+ password = cred.password,
+ })
+
+ -- force re-connection
+ self:connect()
+ end
+
+ credentials[name] = cred
+end
+
+
--[[
=head2 jive.slim.SlimServer(jnt, ip, name)
@@ -263,8 +287,18 @@
setmetatable(obj.imageCache, { __mode = "kv" })
obj.id = obj:idFor(ip, port, name)
-
servers[obj.id] = obj
+
+ -- http authentication
+ local cred = credentials[name]
+ if cred then
+ SocketHttp:setCredentials({
+ ipport = { obj:getIpPort() },
+ realm = cred.realm,
+ username = cred.username,
+ password = cred.password,
+ })
+ end
-- subscribe to comet events
jnt:subscribe(obj)
@@ -421,6 +455,16 @@
log:info(self, " disconnected")
self.active = false
self.jnt:notify('serverDisconnected', self, numPendingRequests)
+end
+
+
+-- comet http error
+function notify_cometHttpError(self, comet, cometRequest)
+ if cometRequest:t_getResponseStatus() == 401 then
+ local authenticate =
cometRequest:t_getResponseHeader("WWW-Authenticate")
+
+ self.realm = string.match(authenticate, 'Basic realm="(.*)"')
+ end
end
@@ -872,6 +916,16 @@
end
+-- returns true if a password is needed
+function isPasswordProtected(self)
+ if self.realm and not self.active then
+ return true, self.realm
+ else
+ return false
+ end
+end
+
+
--[[
=head2 jive.slim.SlimServer:allPlayers()
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins