Github user jorgebay commented on a diff in the pull request:

    https://github.com/apache/tinkerpop/pull/889#discussion_r200922477
  
    --- Diff: 
gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/authenticator.js
 ---
    @@ -0,0 +1,32 @@
    +/*
    + *  Licensed to the Apache Software Foundation (ASF) under one
    + *  or more contributor license agreements.  See the NOTICE file
    + *  distributed with this work for additional information
    + *  regarding copyright ownership.  The ASF licenses this file
    + *  to you under the Apache License, Version 2.0 (the
    + *  "License"); you may not use this file except in compliance
    + *  with the License.  You may obtain a copy of the License at
    + *
    + *  http://www.apache.org/licenses/LICENSE-2.0
    + *
    + *  Unless required by applicable law or agreed to in writing,
    + *  software distributed under the License is distributed on an
    + *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + *  KIND, either express or implied.  See the License for the
    + *  specific language governing permissions and limitations
    + *  under the License.
    + */
    +'use strict';
    +
    +/** @abstract */
    +class Authenticator {
    +  constructor(credentials) {
    +    this._credentials = credentials;
    +  }
    +  
    +  evaluateChallenge(ws, header) {
    --- End diff --
    
    We should detach the `Authenticator` from the transport (`ws`).
    
    I think we can provide an interface that takes a server challenge and 
returns a client challenge, very similar to java's counter part: 
https://github.com/apache/tinkerpop/blob/master/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/Authenticator.java#L55
    
    In our case, `evaluateResponse()` should be asynchronous and return a 
`Promise` as some SASL mechanisms (like Kerberos) require IO on the client side.
    
    The connection will still be responsible to build the requests and parse 
the response with those challenges.


---

Reply via email to