Posted 05 June 2016 - 07:55 PM
As the Title suggests, this is an API that allows to transmit Files and even a file-tree from the ccFTP-Share. It works with a basic Client-Server System.
Each Revision is not compatible with other Revisions. For example sending a ServerVer request from a Rev3 client to a Rev2 Server causes the Server to reply with nsu (but appears as Rev2 on the Client), please note that if the Server runs in return mode the second var will be nil! Yet I'll try to make it very easy for developers to switch to a newer API Revision.
At the moment the API is very basic. But it has some good things with it: for example it is very simple to implement and use it.
Even though it's very basic, it still rocks AES256 encryption for Data transmission.
I'm already thinking about how to implement things like remote User managment.
Well enought talking lets get to the API itself. It is one API for both Client and Server. Here are the functions with a brief description on what they do:
ccFTP is now under the MIT License. Please keep this in mind when republishing.
I would appreciate it, if you tell me for what you used it, but this isn't neccesary.
Download API: pastebin get jCMXvY1A /.ccftp/ccftp
Current Version: Rev3
This API is self-suppling, which means, that it needs 2 more API's (SHA256 by GravityScore & AES by KillaVanilla) but it'll download them by itself into the directory: /.ccftp
This is why I reccomend to keep this API in /.ccftp too.
And here's an example Server program I've written for the API (still uses Rev2): http://pastebin.com/rd6fZ8fH
Changelog:
Rev3:
[indent=1]+ Client & Server check versions of each other before they communicate[/indent]
[indent=1]# ccFTP Server in return mode now returns which user send the request[/indent]
[indent=1]# now all of the communication happens encrypted[/indent]
[indent=1]# switched from AES128 to AES256[/indent]
[indent=1]- old, not working Servershell function[/indent]
Rev2:
[indent=1]+ function to delete files remotely[/indent]
[indent=1]+ function to get client and server API Version[/indent]
[indent=1]+ getRunningHost and closeServer functions[/indent]
[indent=1]# Server-Host-protocoll (results in incompatibilety)[/indent]
[indent=1]# run Server Arguments (changed order + added new option)[/indent]
Rev1:
[indent=1]* Initial Release[/indent]
Each Revision is not compatible with other Revisions. For example sending a ServerVer request from a Rev3 client to a Rev2 Server causes the Server to reply with nsu (but appears as Rev2 on the Client), please note that if the Server runs in return mode the second var will be nil! Yet I'll try to make it very easy for developers to switch to a newer API Revision.
At the moment the API is very basic. But it has some good things with it: for example it is very simple to implement and use it.
Even though it's very basic, it still rocks AES256 encryption for Data transmission.
I'm already thinking about how to implement things like remote User managment.
Well enought talking lets get to the API itself. It is one API for both Client and Server. Here are the functions with a brief description on what they do:
Spoiler
-- Functions for Server
ccftp.runServer(hostname, [disable-autoloop], [FTP-share], [account-directory]) -- runs the FTP-Server with the Hostname 'hostname'; WARNING! Do not set / as FTP-Share! Bad minded people could use this to crash the FTP-Server
if disable-autoloop is set to true, it will return 5 vars: first tells you if the request was successfull, second tells you who sent the request, third tells you with which account the request was sent, fourth tells you what was requested, the last one tells you additional args on success and error code when not
if no modem is attached it returns nMa; if no hostname is specified it returns nHn
ccftp.getRunningHost()
returns true and currently running host if there is one
returns just false if there is no currently running host
ccftp.closeServer()
returns true if there was still a running host which is now disabled
returns false if there is not any running host on the system
ccftp.createUser(Username, Password, [account-directory]) -- creates a User with the Name 'Username' and the Password 'Password'
returns on success true
returns on fail: nUsrN (no UserName), nUsrP (no Password), UsrE (User already exists)
ccftp.renameUser(oldUsername, newUsername, Password, [account-directory]) -- renames User 'oldUsername' to 'newUsername'; Password is needed for securety
returns on success true
returns on fail: noUsrN (no oldUserName), nnUsrN (no newUserName), nUsrP (no Password), nsUsr (oldUser does not exist), nUsrE (new User does exist), pww (password wrong)
ccftp.changeUserPass(Username, oldPassword, newPassword, [account-directory]) -- changes the Password from 'Username'
returns on success true
returns on fail: nUsrN (no UserName), noUsrP (no old password), nnUsrP (no new password), nsUsr (User does not exist), pww (password wrong)
ccftp.removeUser(Username, Password, [account-directory]) -- delete the specified User
returns on success true
returns on fail: nUsrN (no UserName), nUsrP (no Password), nsUsr (User does not exist), pww (password wrong)
-- Functions for Clients
ccftp.getClientVer()
returns current local API Version (can also be used on a ccFTP Server) (implemeted in Rev2)
ccftp.getServerVer(Hostname)
returns on success current API Version of the Server 'Hostname'
returns on fail: nMa (no modem attached), nsh (no such host) (also returns if sent to Rev1 Server)
ccftp.getDirCont(Hostname, Username, Password, [Subdir]) -- gets the contents of the directory 'Subdir' in the Share; if Subdir is left empty, it gets the contents of the Share-root; this is the only unencrypted communication
returns on success 2 tabels, first is all files of the FTP-Share Subdir, second is all folders in the FTP-Share Subdir
returns on fail: nsh (no such host), ddne (dir does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)
ccftp.getFile(Hostname, Username, Password, FileonHost, FileonClient) -- downloads the File form Server to 'FileonClient'
returns on success true
returns on fail: nsh (no such host), fdne (file does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)
ccftp.pushFile(Hostname, Username, Password, FileonClient, FileonHost) -- uploads the 'FileonClient' to the Server with name 'FileonHost'
returns on success true
returns on fail: nsh (no such host), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)
ccftp.removeFile(Hostname, Username, Password, FileonHost)
returns on success true
returns on fail: nsh (no such host), fdne (file does not exist), pww (password wrong), nsu (no such user), nMa (no modem attached); wSV (Server runs a older API version); wCV (client runs a older API version)
ccFTP is now under the MIT License. Please keep this in mind when republishing.
I would appreciate it, if you tell me for what you used it, but this isn't neccesary.
Download API: pastebin get jCMXvY1A /.ccftp/ccftp
Current Version: Rev3
This API is self-suppling, which means, that it needs 2 more API's (SHA256 by GravityScore & AES by KillaVanilla) but it'll download them by itself into the directory: /.ccftp
This is why I reccomend to keep this API in /.ccftp too.
And here's an example Server program I've written for the API (still uses Rev2): http://pastebin.com/rd6fZ8fH
Changelog:
Spoiler
+ = added | - = removed | # = changed | * = NoteRev3:
[indent=1]+ Client & Server check versions of each other before they communicate[/indent]
[indent=1]# ccFTP Server in return mode now returns which user send the request[/indent]
[indent=1]# now all of the communication happens encrypted[/indent]
[indent=1]# switched from AES128 to AES256[/indent]
[indent=1]- old, not working Servershell function[/indent]
Rev2:
[indent=1]+ function to delete files remotely[/indent]
[indent=1]+ function to get client and server API Version[/indent]
[indent=1]+ getRunningHost and closeServer functions[/indent]
[indent=1]# Server-Host-protocoll (results in incompatibilety)[/indent]
[indent=1]# run Server Arguments (changed order + added new option)[/indent]
Rev1:
[indent=1]* Initial Release[/indent]
Edited on 23 June 2016 - 08:49 AM