#// Copyright (c) 2000-2019 Ericsson Telecom AB                                                         //
#// All rights reserved. This program and the accompanying materials are made available under the terms //
#// of the Eclipse Public License v2.0 which accompanies this distribution, and is available at         //
#// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html                                                           //
#/////////////////////////////////////////////////////////////////////////////////////////////////////////
'''This package contains the handlers for authentication and user groups'''

from AuthenticationHandler import AuthenticationHandler

EXTENSION = 'api.authenticate'

def createHandler(directory, *args):
    return AuthenticationHandler(directory)