Hi,

Le 20/03/2018 à 21:47, Markus Rathgeb a écrit :
> Hi,
> 
> has this been the wrong mailing list?

Nope.

> I know there exist also "users" and "ftpserver-users", but isn't it more or
> less a developer question and so should be sent to the "dev" list?

That's correct.

The thing is that we lack developpers to support ftp-server atm, so
that's the reason you haven't got any answer so far.

That being said, it's a open source project, and would you sned us a
patch with your proposed changes, I can apply them to the code and cut a
release. It's even possible for you to become a committer on this
project if you like to.

> 
> Best regards,
> Markus
> 
> 
> 2018-03-05 15:48 GMT+01:00 Markus Rathgeb <maggu2...@gmail.com>:
> 
>> Hello,
>>
>> I would like to use the FtpServer configure the allowed remotes and
>> users programmatic.
>>
>> Utility classes:
>> * AddressPlusPort: simple object that holds an inet address and a port
>> (wildcard for address and port is allowed)
>> * ConnectionInfo: an AddressPlusPort for the local endpoint and an
>> AddressPlusPort for the remote endpoint
>>
>> I created a "SessionFilter" implementation that holds the information
>> about the allowed connections (a collection of "ConnectionInfo").
>> The accept methods checks if there is a match.
>>
>> I created an "User" implementation that also stores an "InetAddress"
>> reference. The "InetAddress" reference is the expected remote peer
>> that uses that user to login.
>>
>> I created an "UserManager" implementation that authenticate method
>> checks if the remote address matches to the address that is stored in
>> the user object.
>>
>> At least all seems to be working.
>>
>> But there is a problem to use this implementation in OSGi.
>>
>> The public interface of the "UsernamePasswordAuthentication" interface
>> (that resides in a exported package) provides the method "public
>> UserMetadata getUserMetadata()".
>>
>> The UserMetadata class itself that contains e.g. the remote address.
>> But the returned class UserMetadata resides in a non-exported package
>> (org.apache.ftpserver.usermanager.impl.UserMetadata). AFAIK the
>> exported (OSGi) API should not use / provide private stuff.
>>
>> Would it be possible to create an "UserMetadata" interface that is
>> defined in an exported package and there is e.g. a non exported
>> UserMetadataImpl class that is used internally in your code?
>>
>> Another problem I run into are the authorities used by the user.
>> If I create an user I would like to add instances of
>> "WritePermission", "ConcurrentLoginPermission" and
>> "TransferRatePermission".
>> The classes itself resides in a non-exported package, so I cannot
>> create instances or use that classes in my OSGi code.
>>
>> If you would like to have a look at my code it is available here:
>> https://github.com/maggu2810/ftpserver-programmatic/
>>
>> ---
>>
>> The service that is provided as an OSGi component provides that interface:
>> https://github.com/maggu2810/ftpserver-programmatic/blob/
>> f46b3e8/src/main/java/de/maggu2810/playground/ftpserver/programmatic/
>> FtpServerService.java
>>
>> The consumer can use the functions "add" and "remove" to grant or remove
>> access.
>> The access is defined by an "AccessInfo" (the interface itself is
>> public the specific implementation is private).
>>
>> A specific "AccessInfo" could be created using the
>> "AccessInfoFactory":
>> https://github.com/maggu2810/ftpserver-programmatic/blob/
>> master/src/main/java/de/maggu2810/playground/ftpserver/programmatic/
>> AccessInfoFactory.java
>>
>> Arguments explained
>> * local host: used in the session filter to check if the remote
>> connection is established using this local host. The server is bound
>> to all interfaces and would like to be able to check if the incoming
>> connection from IP_x uses "local host" to access ourselves (wildcard
>> (any address) is supported)
>> * local port: should fit to the FTP server address or -1 if not limited
>> * remote host: the remote address used for the session filter and also
>> to limit the given username to exactly this remote address (wildcard -
>> (any address) is supported). (currently we "know" that username is
>> unique for every peer)
>> * remote port: if the remote port should be a special one or -1 if not
>> limited
>> * username: the username (a user implementation object will be created
>> and added to the user manager implementation)
>> * password: the password for the user
>> * homeDir: the home directory for the user to limit the FS access
>>
>> ---
>>
>> Currently I work around the non exported packages (impl) by embedding
>> the FTP server code into my bundle.
>> But how can this done by using the FtpServer bundle itself?
>> How to create the Authorities?
>> How to access USerMetadata?
>>
>> Best regards,
>> Markus
>>
> 

-- 
Emmanuel Lecharny

Symas.com
directory.apache.org

Reply via email to