Class: Mournmail::GoogleAuthCallbackServer

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

Instance Method Summary collapse

Constructor Details

#initializeGoogleAuthCallbackServer



269
270
271
# File 'lib/mournmail/utils.rb', line 269

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

Instance Method Details

#portObject



273
274
275
# File 'lib/mournmail/utils.rb', line 273

def port
  @servers.first.local_address.ip_port
end

#receive_codeObject



277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
# File 'lib/mournmail/utils.rb', line 277

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