Class: Mournmail::GoogleAuthCallbackServer

Inherits:
Object
  • Object
show all
Defined in:
lib/mournmail/utils.rb

Instance Method Summary collapse

Constructor Details

#initializeGoogleAuthCallbackServer

Returns a new instance of GoogleAuthCallbackServer.



230
231
232
# File 'lib/mournmail/utils.rb', line 230

def initialize
  @servers = Socket.tcp_server_sockets("127.0.0.1", 0)
end

Instance Method Details

#portObject



234
235
236
# File 'lib/mournmail/utils.rb', line 234

def port
  @servers.first.local_address.ip_port
end

#receive_codeObject



238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
# File 'lib/mournmail/utils.rb', line 238

def receive_code
  Socket.accept_loop(@servers) do |sock, addr|
    line = sock.gets
    query_string = line.slice(%r'\AGET [^?]*\?(.*) HTTP/1.1\r\n', 1)
    params = CGI.parse(query_string)
    code = params["code"][0]
    while line = sock.gets
      break if line == "\r\n"
    end
    sock.print("HTTP/1.1 200 OK\r\n")
    sock.print("Content-Type: text/plain\r\n")
    sock.print("\r\n")
    if code
      sock.print("Authenticated!")
    else
      sock.print("Authentication failed!")
    end
    return code
  ensure
    sock.close
  end
ensure
  @servers.each(&:close)
end