60 lines
1.8 KiB
Python
60 lines
1.8 KiB
Python
![]() |
# -*- test-case-name: twisted.test.test_strcred -*-
|
||
|
#
|
||
|
# Copyright (c) Twisted Matrix Laboratories.
|
||
|
# See LICENSE for details.
|
||
|
|
||
|
"""
|
||
|
Cred plugin for a file of the format 'username:password'.
|
||
|
"""
|
||
|
|
||
|
|
||
|
import sys
|
||
|
|
||
|
from zope.interface import implementer
|
||
|
|
||
|
from twisted import plugin
|
||
|
from twisted.cred.checkers import FilePasswordDB
|
||
|
from twisted.cred.credentials import IUsernameHashedPassword, IUsernamePassword
|
||
|
from twisted.cred.strcred import ICheckerFactory
|
||
|
|
||
|
fileCheckerFactoryHelp = """
|
||
|
This checker expects to receive the location of a file that
|
||
|
conforms to the FilePasswordDB format. Each line in the file
|
||
|
should be of the format 'username:password', in plain text.
|
||
|
"""
|
||
|
|
||
|
invalidFileWarning = "Warning: not a valid file"
|
||
|
|
||
|
|
||
|
@implementer(ICheckerFactory, plugin.IPlugin)
|
||
|
class FileCheckerFactory:
|
||
|
"""
|
||
|
A factory for instances of L{FilePasswordDB}.
|
||
|
"""
|
||
|
|
||
|
authType = "file"
|
||
|
authHelp = fileCheckerFactoryHelp
|
||
|
argStringFormat = "Location of a FilePasswordDB-formatted file."
|
||
|
# Explicitly defined here because FilePasswordDB doesn't do it for us
|
||
|
credentialInterfaces = (IUsernamePassword, IUsernameHashedPassword)
|
||
|
|
||
|
errorOutput = sys.stderr
|
||
|
|
||
|
def generateChecker(self, argstring):
|
||
|
"""
|
||
|
This checker factory expects to get the location of a file.
|
||
|
The file should conform to the format required by
|
||
|
L{FilePasswordDB} (using defaults for all
|
||
|
initialization parameters).
|
||
|
"""
|
||
|
from twisted.python.filepath import FilePath
|
||
|
|
||
|
if not argstring.strip():
|
||
|
raise ValueError("%r requires a filename" % self.authType)
|
||
|
elif not FilePath(argstring).isfile():
|
||
|
self.errorOutput.write(f"{invalidFileWarning}: {argstring}\n")
|
||
|
return FilePasswordDB(argstring)
|
||
|
|
||
|
|
||
|
theFileCheckerFactory = FileCheckerFactory()
|