def wait_for_otp_code(server)
  loop do
    socket = server.accept
    request_line = socket.gets
    method, req_uri, _protocol = request_line.split(" ")
    req_uri = URI.parse(req_uri)
    responder = SocketResponder.new(socket)
    unless root_path?(req_uri)
      responder.send(NotFoundResponse.for(host))
      raise Gem::WebauthnVerificationError, "Page at #{req_uri.path} not found."
    end
    case method.upcase
    when "OPTIONS"
      responder.send(NoContentResponse.for(host))
      next 
    when "GET"
      if otp = parse_otp_from_uri(req_uri)
        responder.send(OkResponse.for(host))
        return otp
      end
      responder.send(BadRequestResponse.for(host))
      raise Gem::WebauthnVerificationError, "Did not receive OTP from #{host}."
    else
      responder.send(MethodNotAllowedResponse.for(host))
      raise Gem::WebauthnVerificationError, "Invalid HTTP method #{method.upcase} received."
    end
  end
end