# File lib/openid/server.rb, line 351
      def CheckIDRequest.from_query(query)
        mode = query['openid.mode']

        identity = query['openid.identity']
        raise ProtocolError.new(query, 'openid.identity missing') unless identity
        return_to = query['openid.return_to']
        raise ProtocolError.new(query, 'openid.return_to missing') unless return_to

        trust_root = query['openid.trust_root']
        trust_root = nil if trust_root and trust_root.empty?

        unless OpenID::TrustRoot.parse(return_to)
          raise MalformedReturnURL.new(query, return_to)
        end

        if trust_root and not OpenID::TrustRoot.parse(trust_root)
          raise MalformedTrustRoot.new(query, trust_root)
        end
       
        assoc_handle = query['openid.assoc_handle']
        
        req = new(mode, identity, return_to, trust_root, assoc_handle)        
        req.query = query
        
        unless req.trust_root_valid
          raise UntrustedReturnURL.new(query, return_to, trust_root)
        end

        return req
      end