aboutsummaryrefslogtreecommitdiff
path: root/other/java/hdfs-over-ftp
diff options
context:
space:
mode:
Diffstat (limited to 'other/java/hdfs-over-ftp')
-rw-r--r--other/java/hdfs-over-ftp/pom.xml120
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/ApplicationServer.java14
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/config/SwaggerConfig.java27
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/FtpManagerController.java71
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/UserController.java98
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/FtpUser.java71
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/Result.java43
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/HFtpService.java102
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileObject.java333
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemManager.java14
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemView.java104
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsOverFtpSystem.java72
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUser.java239
-rw-r--r--other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUserManager.java453
-rw-r--r--other/java/hdfs-over-ftp/src/main/resources/application.yml15
-rw-r--r--other/java/hdfs-over-ftp/src/main/resources/assembly.xml39
-rw-r--r--other/java/hdfs-over-ftp/src/main/resources/logback-spring.xml40
-rw-r--r--other/java/hdfs-over-ftp/users.properties12
18 files changed, 0 insertions, 1867 deletions
diff --git a/other/java/hdfs-over-ftp/pom.xml b/other/java/hdfs-over-ftp/pom.xml
deleted file mode 100644
index 3f7e6c4b0..000000000
--- a/other/java/hdfs-over-ftp/pom.xml
+++ /dev/null
@@ -1,120 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <groupId>hdfs-over-ftp</groupId>
- <artifactId>hdfs-over-ftp</artifactId>
- <version>1.0</version>
-
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.4.3</version>
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger2</artifactId>
- <version>2.9.2</version>
- </dependency>
- <dependency>
- <groupId>io.springfox</groupId>
- <artifactId>springfox-swagger-ui</artifactId>
- <version>2.10.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>3.4.0</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-client</artifactId>
- <version>3.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.ftpserver</groupId>
- <artifactId>ftpserver-core</artifactId>
- <version>1.1.1</version>
- </dependency>
- <dependency>
- <groupId>com.seaweedfs</groupId>
- <artifactId>seaweedfs-hadoop3-client</artifactId>
- <version>1.6.2</version>
- </dependency>
- </dependencies>
-
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.1</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <encoding>UTF-8</encoding>
- <compilerArguments>
- <verbose />
- <bootclasspath>${java.home}/lib/rt.jar</bootclasspath>
- </compilerArguments>
- </configuration>
- </plugin>
-
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>2.6</version>
- <configuration>
- <archive>
- <manifest>
- <mainClass>org.apache.hadoop.seaweed.ftp.ApplicationServer</mainClass>
- <addClasspath>true</addClasspath>
- <classpathPrefix>lib/</classpathPrefix>
- </manifest>
- <manifestEntries>
- <Class-Path>./</Class-Path>
- </manifestEntries>
- </archive>
- </configuration>
- </plugin>
-
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>src/main/resources/assembly.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/ApplicationServer.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/ApplicationServer.java
deleted file mode 100644
index b8ef1d840..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/ApplicationServer.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.hadoop.seaweed.ftp;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-
-@SpringBootApplication
-public class ApplicationServer {
-
- public static void main(String[] args) {
- SpringApplication.run(ApplicationServer.class, args);
- }
-
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/config/SwaggerConfig.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/config/SwaggerConfig.java
deleted file mode 100644
index 3c395493d..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/config/SwaggerConfig.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.config;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import springfox.documentation.builders.ApiInfoBuilder;
-import springfox.documentation.builders.PathSelectors;
-import springfox.documentation.builders.RequestHandlerSelectors;
-import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spring.web.plugins.Docket;
-import springfox.documentation.swagger2.annotations.EnableSwagger2;
-
-@Configuration
-@EnableSwagger2
-public class SwaggerConfig {
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.SWAGGER_2)
- .pathMapping("/")
- .select()
- .apis(RequestHandlerSelectors.basePackage("org.apache.hadoop.seaweed.ftp"))
- .paths(PathSelectors.any())
- .build().apiInfo(new ApiInfoBuilder()
- .title("FTP API Doc")
- .version("1.0")
- .build());
- }
-} \ No newline at end of file
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/FtpManagerController.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/FtpManagerController.java
deleted file mode 100644
index 7a5a4e74d..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/FtpManagerController.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.controller;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.hadoop.seaweed.ftp.service.HFtpService;
-import org.apache.hadoop.seaweed.ftp.controller.vo.Result;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@RestController
-@RequestMapping("/manager")
-@Api(tags = "FTP操作管理")
-public class FtpManagerController {
-
- private static Logger log = Logger.getLogger(FtpManagerController.class);
-
- @Autowired
- private HFtpService hdfsOverFtpServer;
-
- @GetMapping("/status")
- @ApiOperation("查看FTP服务状态")
- public Result status() {
- Map map = new HashMap<>();
- try {
- boolean status = hdfsOverFtpServer.statusServer();
- map.put("is_running", status);
- return new Result(true, map, "FTP 服务状态获取成功");
- }catch (Exception e) {
- log.error(e);
- map.put("is_running", false);
- return new Result(true, map, "FTP 服务状态获取成功");
- }
- }
-
- @PutMapping("/start")
- @ApiOperation("启动FTP服务")
- public Result start() {
- try {
- boolean status = hdfsOverFtpServer.statusServer();
- if(!status) {
- hdfsOverFtpServer.startServer();
- }
- return new Result(true, "FTP 服务启动成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "FTP 服务启动失败");
- }
- }
-
- @PutMapping("/stop")
- @ApiOperation("停止FTP服务")
- public Result stop() {
- try {
- boolean status = hdfsOverFtpServer.statusServer();
- if(status) {
- hdfsOverFtpServer.stopServer();
- }
- return new Result(true, "FTP 服务停止成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "FTP 服务停止失败");
- }
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/UserController.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/UserController.java
deleted file mode 100644
index c4d2261b3..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/UserController.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.controller;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.ftpserver.ftplet.User;
-import org.apache.ftpserver.usermanager.Md5PasswordEncryptor;
-import org.apache.ftpserver.usermanager.UserFactory;
-import org.apache.hadoop.seaweed.ftp.controller.vo.FtpUser;
-import org.apache.hadoop.seaweed.ftp.controller.vo.Result;
-import org.apache.hadoop.seaweed.ftp.users.HdfsUserManager;
-import org.apache.log4j.Logger;
-import org.springframework.web.bind.annotation.*;
-
-import java.io.File;
-
-@RestController
-@RequestMapping("/user")
-@Api(tags = "FTP用户管理")
-public class UserController {
-
- private static Logger log = Logger.getLogger(UserController.class);
-
- /***
- * {
- * "name": "test",
- * "password": "test",
- * "homeDirectory": "/buckets/test/"
- * }
- * @param ftpUser
- * @return
- */
- @PostMapping("/add")
- @ApiOperation("新增/编辑用户")
- public Result add(@RequestBody FtpUser ftpUser) {
- try {
- HdfsUserManager userManagerFactory = new HdfsUserManager();
- userManagerFactory.setFile(new File(System.getProperty("user.dir") + File.separator + "users.properties"));
- userManagerFactory.setPasswordEncryptor(new Md5PasswordEncryptor());
-
- UserFactory userFactory = new UserFactory();
- userFactory.setHomeDirectory(ftpUser.getHomeDirectory());
- userFactory.setName(ftpUser.getName());
- userFactory.setPassword(ftpUser.getPassword());
- userFactory.setEnabled(ftpUser.isEnabled());
- userFactory.setMaxIdleTime(ftpUser.getMaxIdleTime());
-
- User user = userFactory.createUser();
- userManagerFactory.save(user, ftpUser.isRenamePush());
- return new Result(true, "新建用户成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "新建用户失败");
- }
- }
-
- @DeleteMapping("/delete/{user}")
- @ApiOperation("删除用户")
- public Result delete(@PathVariable(value = "user") String user) {
- try {
- HdfsUserManager userManagerFactory = new HdfsUserManager();
- userManagerFactory.setFile(new File(System.getProperty("user.dir") + File.separator + "users.properties"));
- userManagerFactory.delete(user);
- return new Result(true, "删除用户成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "删除用户失败");
- }
- }
-
- @GetMapping("/show/{userName}")
- @ApiOperation("查看用户")
- public Result show(@PathVariable(value = "userName") String userName) {
- try {
- HdfsUserManager userManagerFactory = new HdfsUserManager();
- userManagerFactory.setFile(new File(System.getProperty("user.dir") + File.separator + "users.properties"));
- User user = userManagerFactory.getUserByName(userName);
- FtpUser ftpUser = new FtpUser(user.getHomeDirectory(), user.getPassword(), user.getEnabled(), user.getName(), user.getMaxIdleTime(), HdfsUserManager.getUserRenamePush(userName));
- return new Result(true, ftpUser, "获取用户信息成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "获取用户信息失败");
- }
- }
-
- @GetMapping("/list")
- @ApiOperation("列举用户")
- public Result list() {
- try {
- HdfsUserManager userManagerFactory = new HdfsUserManager();
- userManagerFactory.setFile(new File(System.getProperty("user.dir") + File.separator + "users.properties"));
- String[] allUserNames = userManagerFactory.getAllUserNames();
- return new Result(true, allUserNames, "列举用户成功");
- }catch (Exception e) {
- log.error(e);
- return new Result(false, "列举用户失败");
- }
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/FtpUser.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/FtpUser.java
deleted file mode 100644
index 953d08603..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/FtpUser.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.controller.vo;
-
-public class FtpUser {
-
- private String homeDirectory;
- private String password;
- private boolean enabled;
- private String name;
- private int maxIdleTime;
- private boolean renamePush;
-
- public FtpUser() {
- }
-
- public FtpUser(String homeDirectory, String password, boolean enabled, String name, int maxIdleTime, boolean renamePush) {
- this.homeDirectory = homeDirectory;
- this.password = password;
- this.enabled = enabled;
- this.name = name;
- this.maxIdleTime = maxIdleTime;
- this.renamePush = renamePush;
- }
-
- public String getHomeDirectory() {
- return homeDirectory;
- }
-
- public void setHomeDirectory(String homeDirectory) {
- this.homeDirectory = homeDirectory;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public boolean isEnabled() {
- return enabled;
- }
-
- public void setEnabled(boolean enabled) {
- this.enabled = enabled;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getMaxIdleTime() {
- return maxIdleTime;
- }
-
- public void setMaxIdleTime(int maxIdleTime) {
- this.maxIdleTime = maxIdleTime;
- }
-
- public boolean isRenamePush() {
- return renamePush;
- }
-
- public void setRenamePush(boolean renamePush) {
- this.renamePush = renamePush;
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/Result.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/Result.java
deleted file mode 100644
index b6a480ba7..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/controller/vo/Result.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.controller.vo;
-
-public class Result {
-
- private boolean status;
- private Object data;
- private String message;
-
- public Result(boolean status, String message) {
- this.status = status;
- this.message = message;
- }
-
- public Result(boolean status, Object data, String message) {
- this.status = status;
- this.message = message;
- this.data = data;
- }
-
- public boolean isStatus() {
- return status;
- }
-
- public void setStatus(boolean status) {
- this.status = status;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public Object getData() {
- return data;
- }
-
- public void setData(Object data) {
- this.data = data;
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/HFtpService.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/HFtpService.java
deleted file mode 100644
index 9fe5dfd95..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/HFtpService.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.service;
-
-import org.apache.ftpserver.DataConnectionConfiguration;
-import org.apache.ftpserver.DataConnectionConfigurationFactory;
-import org.apache.ftpserver.FtpServer;
-import org.apache.ftpserver.FtpServerFactory;
-import org.apache.ftpserver.command.CommandFactoryFactory;
-import org.apache.ftpserver.listener.ListenerFactory;
-import org.apache.hadoop.seaweed.ftp.service.filesystem.HdfsFileSystemManager;
-import org.apache.hadoop.seaweed.ftp.service.filesystem.HdfsOverFtpSystem;
-import org.apache.hadoop.seaweed.ftp.users.HdfsUserManager;
-import org.apache.log4j.Logger;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-
-/**
- * reference: https://github.com/AShiou/hof
- */
-@Component
-public class HFtpService {
-
- private static Logger log = Logger.getLogger(HFtpService.class);
-
- @Value("${ftp.port}")
- private int port = 0;
-
- @Value("${ftp.passive-address}")
- private String passiveAddress;
-
- @Value("${ftp.passive-ports}")
- private String passivePorts;
-
- @Value("${hdfs.uri}")
- private String hdfsUri;
-
- @Value("${seaweedFs.enable}")
- private boolean seaweedFsEnable;
-
- @Value("${seaweedFs.access}")
- private String seaweedFsAccess;
-
- @Value("${seaweedFs.replication}")
- private String seaweedFsReplication;
-
- private FtpServer ftpServer = null;
-
- public void startServer() throws Exception {
- log.info("Starting HDFS-Over-Ftp server. port: " + port + " passive-address: " + passiveAddress + " passive-ports: " + passivePorts + " hdfs-uri: " + hdfsUri);
-
- HdfsOverFtpSystem.setHdfsUri(hdfsUri);
- HdfsOverFtpSystem.setSeaweedFsEnable(seaweedFsEnable);
- HdfsOverFtpSystem.setSeaweedFsAccess(seaweedFsAccess);
- HdfsOverFtpSystem.setSeaweedFsReplication(seaweedFsReplication);
-
- FtpServerFactory server = new FtpServerFactory();
- server.setFileSystem(new HdfsFileSystemManager());
-
- ListenerFactory factory = new ListenerFactory();
- factory.setPort(port);
-
- DataConnectionConfigurationFactory dccFactory = new DataConnectionConfigurationFactory();
- dccFactory.setPassiveAddress("0.0.0.0");
- dccFactory.setPassivePorts(passivePorts);
- dccFactory.setPassiveExternalAddress(passiveAddress);
- DataConnectionConfiguration dcc = dccFactory.createDataConnectionConfiguration();
- factory.setDataConnectionConfiguration(dcc);
-
- server.addListener("default", factory.createListener());
-
- HdfsUserManager userManager = new HdfsUserManager();
- final File file = loadResource("/users.properties");
- userManager.setFile(file);
- server.setUserManager(userManager);
-
- CommandFactoryFactory cmFact = new CommandFactoryFactory();
- cmFact.setUseDefaultCommands(true);
- server.setCommandFactory(cmFact.createCommandFactory());
-
- // start the server
- ftpServer = server.createServer();
- ftpServer.start();
- }
-
- public void stopServer() {
- log.info("Stopping Hdfs-Over-Ftp server. port: " + port + " passive-address: " + passiveAddress + " passive-ports: " + passivePorts + " hdfs-uri: " + hdfsUri);
- ftpServer.stop();
- }
-
- public boolean statusServer() {
- try {
- return !ftpServer.isStopped();
- }catch (Exception e) {
- return false;
- }
- }
-
- private static File loadResource(String resourceName) {
- return new File(System.getProperty("user.dir") + resourceName);
- }
-} \ No newline at end of file
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileObject.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileObject.java
deleted file mode 100644
index e97c2dc14..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileObject.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.service.filesystem;
-
-import org.apache.ftpserver.ftplet.FtpFile;
-import org.apache.ftpserver.ftplet.User;
-import org.apache.hadoop.fs.*;
-import org.apache.hadoop.seaweed.ftp.users.HdfsUser;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * This class implements all actions to HDFS
- */
-public class HdfsFileObject implements FtpFile {
-
- private final Logger log = LoggerFactory.getLogger(HdfsFileObject.class);
-
- private Path homePath;
- private Path path;
- private Path fullPath;
- private HdfsUser user;
-
- /**
- * Constructs HdfsFileObject from path
- *
- * @param path path to represent object
- * @param user accessor of the object
- */
- public HdfsFileObject(String homePath, String path, User user) {
- this.homePath = new Path(homePath);
- this.path = new Path(path);
- this.fullPath = new Path(homePath + path);
- this.user = (HdfsUser) user;
- }
-
- public String getAbsolutePath() {
- // strip the last '/' if necessary
- String fullName = path.toString();
- int filelen = fullName.length();
- if ((filelen != 1) && (fullName.charAt(filelen - 1) == '/')) {
- fullName = fullName.substring(0, filelen - 1);
- }
-
- return fullName;
- }
-
- public String getName() {
- return path.getName();
- }
-
- /**
- * HDFS has no hidden objects
- *
- * @return always false
- */
- public boolean isHidden() {
- return false;
- }
-
- /**
- * Checks if the object is a directory
- *
- * @return true if the object is a directory
- */
- public boolean isDirectory() {
- try {
- log.debug("is directory? : " + fullPath);
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fs = dfs.getFileStatus(fullPath);
- return fs.isDir();
- } catch (IOException e) {
- log.debug(fullPath + " is not dir", e);
- return false;
- }
- }
-
- /**
- * Checks if the object is a file
- *
- * @return true if the object is a file
- */
- public boolean isFile() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- return dfs.isFile(fullPath);
- } catch (IOException e) {
- log.debug(fullPath + " is not file", e);
- return false;
- }
- }
-
- /**
- * Checks if the object does exist
- *
- * @return true if the object does exist
- */
- public boolean doesExist() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- dfs.getFileStatus(fullPath);
- return true;
- } catch (IOException e) {
- // log.debug(path + " does not exist", e);
- return false;
- }
- }
-
- public boolean isReadable() {
- return true;
- }
-
- public boolean isWritable() {
- return true;
- }
-
- public boolean isRemovable() {
- return true;
- }
-
- /**
- * Get owner of the object
- *
- * @return owner of the object
- */
- public String getOwnerName() {
- return "root";
- /*
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fs = dfs.getFileStatus(fullPath);
- String owner = fs.getOwner();
- if(owner.length() == 0) {
- return "root";
- }
- return owner;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- */
- }
-
- /**
- * Get group of the object
- *
- * @return group of the object
- */
- public String getGroupName() {
- return "root";
- /*
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fs = dfs.getFileStatus(fullPath);
- String group = fs.getGroup();
- if(group.length() == 0) {
- return "root";
- }
- return group;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- */
- }
-
- /**
- * Get link count
- *
- * @return 3 is for a directory and 1 is for a file
- */
- public int getLinkCount() {
- return isDirectory() ? 3 : 1;
- }
-
- /**
- * Get last modification date
- *
- * @return last modification date as a long
- */
- public long getLastModified() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fs = dfs.getFileStatus(fullPath);
- return fs.getModificationTime();
- } catch (IOException e) {
- e.printStackTrace();
- return 0;
- }
- }
-
- public boolean setLastModified(long l) {
- return false;
- }
-
- /**
- * Get a size of the object
- *
- * @return size of the object in bytes
- */
- public long getSize() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fs = dfs.getFileStatus(fullPath);
- log.debug("getSize(): " + fullPath + " : " + fs.getLen());
- return fs.getLen();
- } catch (IOException e) {
- e.printStackTrace();
- return 0;
- }
- }
-
- public Object getPhysicalFile() {
- return null;
- }
-
- /**
- * Create a new dir from the object
- *
- * @return true if dir is created
- */
- public boolean mkdir() {
- try {
- FileSystem fs = HdfsOverFtpSystem.getDfs();
- fs.mkdirs(fullPath);
-// fs.setOwner(path, user.getName(), user.getMainGroup());
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- }
- }
-
- /**
- * Delete object from the HDFS filesystem
- *
- * @return true if the object is deleted
- */
- public boolean delete() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- dfs.delete(fullPath, true);
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- }
- }
-
- public boolean move(FtpFile ftpFile) {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- dfs.rename(fullPath, new Path(fullPath.getParent() + File.separator + ftpFile.getName()));
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- return false;
- }
- }
-
-
- /**
- * List files of the directory
- *
- * @return List of files in the directory
- */
- public List<FtpFile> listFiles() {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FileStatus fileStats[] = dfs.listStatus(fullPath);
-
- // get the virtual name of the base directory
- String virtualFileStr = getAbsolutePath();
- if (virtualFileStr.charAt(virtualFileStr.length() - 1) != '/') {
- virtualFileStr += '/';
- }
-
- FtpFile[] virtualFiles = new FtpFile[fileStats.length];
- for (int i = 0; i < fileStats.length; i++) {
- File fileObj = new File(fileStats[i].getPath().toString());
- String fileName = virtualFileStr + fileObj.getName();
- virtualFiles[i] = new HdfsFileObject(homePath.toString(), fileName, user);
- }
- return Collections.unmodifiableList(Arrays.asList(virtualFiles));
- } catch (IOException e) {
- log.debug("", e);
- return null;
- }
- }
-
- /**
- * Creates output stream to write to the object
- *
- * @param l is not used here
- * @return OutputStream
- * @throws IOException
- */
- public OutputStream createOutputStream(long l) {
- try {
- FileSystem fs = HdfsOverFtpSystem.getDfs();
- FSDataOutputStream out = fs.create(fullPath);
-// fs.setOwner(fullPath, user.getName(), user.getMainGroup());
- return out;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- /**
- * Creates input stream to read from the object
- *
- * @param l is not used here
- * @return OutputStream
- * @throws IOException
- */
- public InputStream createInputStream(long l) {
- try {
- FileSystem dfs = HdfsOverFtpSystem.getDfs();
- FSDataInputStream in = dfs.open(fullPath);
- return in;
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemManager.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemManager.java
deleted file mode 100644
index 533c2c3aa..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemManager.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.service.filesystem;
-
-import org.apache.ftpserver.ftplet.FileSystemFactory;
-import org.apache.ftpserver.ftplet.FileSystemView;
-import org.apache.ftpserver.ftplet.User;
-
-/**
- * Impelented FileSystemManager to use HdfsFileSystemView
- */
-public class HdfsFileSystemManager implements FileSystemFactory {
- public FileSystemView createFileSystemView(User user) {
- return new HdfsFileSystemView(user);
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemView.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemView.java
deleted file mode 100644
index 8b910e775..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsFileSystemView.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.service.filesystem;
-
-import org.apache.ftpserver.ftplet.FileSystemView;
-import org.apache.ftpserver.ftplet.FtpFile;
-import org.apache.ftpserver.ftplet.User;
-import org.apache.hadoop.fs.Path;
-
-import java.io.File;
-
-/**
- * Implemented FileSystemView to use HdfsFileObject
- */
-public class HdfsFileSystemView implements FileSystemView {
-
- private String homePath;
- private String currPath = File.separator;
- private User user;
-
- /**
- * Constructor - set the user object.
- */
- protected HdfsFileSystemView(User user) {
- if (user == null) {
- throw new IllegalArgumentException("user can not be null");
- }
- if (user.getHomeDirectory() == null) {
- throw new IllegalArgumentException(
- "User home directory can not be null");
- }
-
- this.homePath = user.getHomeDirectory();
- this.user = user;
- }
-
- public FtpFile getHomeDirectory() {
- return new HdfsFileObject(homePath, File.separator, user);
- }
-
- public FtpFile getWorkingDirectory() {
- FtpFile fileObj;
- if (currPath.equals(File.separator)) {
- fileObj = new HdfsFileObject(homePath, File.separator, user);
- } else {
- fileObj = new HdfsFileObject(homePath, currPath, user);
-
- }
- return fileObj;
- }
-
- public boolean changeWorkingDirectory(String dir) {
-
- Path path;
- if (dir.startsWith(File.separator) || new Path(currPath).equals(new Path(dir))) {
- path = new Path(dir);
- } else if (currPath.length() > 1) {
- path = new Path(currPath + File.separator + dir);
- } else {
- if(dir.startsWith("/")) {
- path = new Path(dir);
- }else {
- path = new Path(File.separator + dir);
- }
- }
-
- // 防止退回根目录
- if (path.getName().equals("..")) {
- path = new Path(File.separator);
- }
-
- HdfsFileObject file = new HdfsFileObject(homePath, path.toString(), user);
- if (file.isDirectory()) {
- currPath = path.toString();
- return true;
- } else {
- return false;
- }
- }
-
- public FtpFile getFile(String file) {
- String path;
- if (file.startsWith(File.separator)) {
- path = file;
- } else if (currPath.length() > 1) {
- path = currPath + File.separator + file;
- } else {
- path = File.separator + file;
- }
- return new HdfsFileObject(homePath, path, user);
- }
-
- /**
- * Is the file content random accessible?
- */
- public boolean isRandomAccessible() {
- return true;
- }
-
- /**
- * Dispose file system view - does nothing.
- */
- public void dispose() {
- }
-
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsOverFtpSystem.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsOverFtpSystem.java
deleted file mode 100644
index 149fd6857..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/service/filesystem/HdfsOverFtpSystem.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.service.filesystem;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-
-/**
- * Class to store DFS connection
- */
-public class HdfsOverFtpSystem {
-
- private static FileSystem fs = null;
-
- private static String hdfsUri;
-
- private static boolean seaweedFsEnable;
-
- private static String seaweedFsAccess;
-
- private static String seaweedFsReplication;
-
- private final static Logger log = LoggerFactory.getLogger(HdfsOverFtpSystem.class);
-
- private static void hdfsInit() throws IOException {
- Configuration configuration = new Configuration();
-
- configuration.set("fs.defaultFS", hdfsUri);
- if(seaweedFsEnable) {
- configuration.set("fs.seaweedfs.impl", "seaweed.hdfs.SeaweedFileSystem");
- configuration.set("fs.seaweed.volume.server.access", seaweedFsAccess);
- configuration.set("fs.seaweed.replication", seaweedFsReplication);
- }
- fs = FileSystem.get(configuration);
- log.info("HDFS load success");
- }
-
- /**
- * Get dfs
- *
- * @return dfs
- * @throws IOException
- */
- public static FileSystem getDfs() throws IOException {
- if (fs == null) {
- hdfsInit();
- }
- return fs;
- }
-
- public static void setHdfsUri(String hdfsUri) {
- HdfsOverFtpSystem.hdfsUri = hdfsUri;
- }
-
- public static String getHdfsUri() {
- return hdfsUri;
- }
-
- public static void setSeaweedFsEnable(boolean seaweedFsEnable) {
- HdfsOverFtpSystem.seaweedFsEnable = seaweedFsEnable;
- }
-
- public static void setSeaweedFsAccess(String seaweedFsAccess) {
- HdfsOverFtpSystem.seaweedFsAccess = seaweedFsAccess;
- }
-
- public static void setSeaweedFsReplication(String seaweedFsReplication) {
- HdfsOverFtpSystem.seaweedFsReplication = seaweedFsReplication;
- }
-} \ No newline at end of file
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUser.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUser.java
deleted file mode 100644
index c82f6516f..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUser.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.users;
-
-import org.apache.ftpserver.ftplet.Authority;
-import org.apache.ftpserver.ftplet.AuthorizationRequest;
-import org.apache.ftpserver.ftplet.User;
-import org.apache.log4j.Logger;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class HdfsUser implements User, Serializable {
-
- private static final long serialVersionUID = -47371353779731294L;
-
- private String name = null;
-
- private String password = null;
-
- private int maxIdleTimeSec = 0; // no limit
-
- private String homeDir = null;
-
- private boolean isEnabled = true;
-
- private List<? extends Authority> authorities = new ArrayList<Authority>();
-
- private ArrayList<String> groups = new ArrayList<String>();
-
- private Logger log = Logger.getLogger(HdfsUser.class);
-
- /**
- * Default constructor.
- */
- public HdfsUser() {
- }
-
- /**
- * Copy constructor.
- */
- public HdfsUser(User user) {
- name = user.getName();
- password = user.getPassword();
- authorities = user.getAuthorities();
- maxIdleTimeSec = user.getMaxIdleTime();
- homeDir = user.getHomeDirectory();
- isEnabled = user.getEnabled();
- }
-
- public ArrayList<String> getGroups() {
- return groups;
- }
-
- /**
- * Get the main group of the user
- *
- * @return main group of the user
- */
- public String getMainGroup() {
- if (groups.size() > 0) {
- return groups.get(0);
- } else {
- log.error("User " + name + " is not a memer of any group");
- return "error";
- }
- }
-
- /**
- * Checks if user is a member of the group
- *
- * @param group to check
- * @return true if the user id a member of the group
- */
- public boolean isGroupMember(String group) {
- for (String userGroup : groups) {
- if (userGroup.equals(group)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Set users' groups
- *
- * @param groups to set
- */
- public void setGroups(ArrayList<String> groups) {
- if (groups.size() < 1) {
- log.error("User " + name + " is not a memer of any group");
- }
- this.groups = groups;
- }
-
- /**
- * Get the user name.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Set user name.
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * Get the user password.
- */
- public String getPassword() {
- return password;
- }
-
- /**
- * Set user password.
- */
- public void setPassword(String pass) {
- password = pass;
- }
-
- public List<Authority> getAuthorities() {
- if (authorities != null) {
- return Collections.unmodifiableList(authorities);
- } else {
- return null;
- }
- }
-
- public void setAuthorities(List<Authority> authorities) {
- if (authorities != null) {
- this.authorities = Collections.unmodifiableList(authorities);
- } else {
- this.authorities = null;
- }
- }
-
- /**
- * Get the maximum idle time in second.
- */
- public int getMaxIdleTime() {
- return maxIdleTimeSec;
- }
-
- /**
- * Set the maximum idle time in second.
- */
- public void setMaxIdleTime(int idleSec) {
- maxIdleTimeSec = idleSec;
- if (maxIdleTimeSec < 0) {
- maxIdleTimeSec = 0;
- }
- }
-
- /**
- * Get the user enable status.
- */
- public boolean getEnabled() {
- return isEnabled;
- }
-
- /**
- * Set the user enable status.
- */
- public void setEnabled(boolean enb) {
- isEnabled = enb;
- }
-
- /**
- * Get the user home directory.
- */
- public String getHomeDirectory() {
- return homeDir;
- }
-
- /**
- * Set the user home directory.
- */
- public void setHomeDirectory(String home) {
- homeDir = home;
- }
-
- /**
- * String representation.
- */
- public String toString() {
- return name;
- }
-
- /**
- * {@inheritDoc}
- */
- public AuthorizationRequest authorize(AuthorizationRequest request) {
- List<Authority> authorities = getAuthorities();
-
- // check for no authorities at all
- if (authorities == null) {
- return null;
- }
-
- boolean someoneCouldAuthorize = false;
- for (Authority authority : authorities) {
- if (authority.canAuthorize(request)) {
- someoneCouldAuthorize = true;
-
- request = authority.authorize(request);
-
- // authorization failed, return null
- if (request == null) {
- return null;
- }
- }
-
- }
-
- if (someoneCouldAuthorize) {
- return request;
- } else {
- return null;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public List<Authority> getAuthorities(Class<? extends Authority> clazz) {
- List<Authority> selected = new ArrayList<Authority>();
-
- for (Authority authority : authorities) {
- if (authority.getClass().equals(clazz)) {
- selected.add(authority);
- }
- }
-
- return selected;
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUserManager.java b/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUserManager.java
deleted file mode 100644
index 7eb296160..000000000
--- a/other/java/hdfs-over-ftp/src/main/java/org/apache/hadoop/seaweed/ftp/users/HdfsUserManager.java
+++ /dev/null
@@ -1,453 +0,0 @@
-package org.apache.hadoop.seaweed.ftp.users;
-
-import org.apache.ftpserver.FtpServerConfigurationException;
-import org.apache.ftpserver.ftplet.*;
-import org.apache.ftpserver.usermanager.*;
-import org.apache.ftpserver.usermanager.impl.*;
-import org.apache.ftpserver.util.BaseProperties;
-import org.apache.ftpserver.util.IoUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.*;
-
-public class HdfsUserManager extends AbstractUserManager {
-
- private final Logger LOG = LoggerFactory
- .getLogger(HdfsUserManager.class);
-
- private final static String DEPRECATED_PREFIX = "FtpServer.user.";
-
- private final static String PREFIX = "ftpserver.user.";
-
- private static BaseProperties userDataProp;
-
- private File userDataFile = new File("users.conf");
-
- private boolean isConfigured = false;
-
- private PasswordEncryptor passwordEncryptor = new Md5PasswordEncryptor();
-
-
- /**
- * Retrieve the file used to load and store users
- *
- * @return The file
- */
- public File getFile() {
- return userDataFile;
- }
-
- /**
- * Set the file used to store and read users. Must be set before
- * {@link #configure()} is called.
- *
- * @param propFile A file containing users
- */
- public void setFile(File propFile) {
- if (isConfigured) {
- throw new IllegalStateException("Must be called before configure()");
- }
-
- this.userDataFile = propFile;
- }
-
-
- /**
- * Retrieve the password encryptor used for this user manager
- *
- * @return The password encryptor. Default to {@link Md5PasswordEncryptor}
- * if no other has been provided
- */
- public PasswordEncryptor getPasswordEncryptor() {
- return passwordEncryptor;
- }
-
-
- /**
- * Set the password encryptor to use for this user manager
- *
- * @param passwordEncryptor The password encryptor
- */
- public void setPasswordEncryptor(PasswordEncryptor passwordEncryptor) {
- this.passwordEncryptor = passwordEncryptor;
- }
-
-
- /**
- * Lazy init the user manager
- */
- private void lazyInit() {
- if (!isConfigured) {
- configure();
- }
- }
-
- /**
- * Configure user manager.
- */
- public void configure() {
- isConfigured = true;
- try {
- userDataProp = new BaseProperties();
-
- if (userDataFile != null && userDataFile.exists()) {
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(userDataFile);
- userDataProp.load(fis);
- } finally {
- IoUtils.close(fis);
- }
- }
- } catch (IOException e) {
- throw new FtpServerConfigurationException(
- "Error loading user data file : "
- + userDataFile.getAbsolutePath(), e);
- }
-
- convertDeprecatedPropertyNames();
- }
-
- private void convertDeprecatedPropertyNames() {
- Enumeration<?> keys = userDataProp.propertyNames();
-
- boolean doSave = false;
-
- while (keys.hasMoreElements()) {
- String key = (String) keys.nextElement();
-
- if (key.startsWith(DEPRECATED_PREFIX)) {
- String newKey = PREFIX
- + key.substring(DEPRECATED_PREFIX.length());
- userDataProp.setProperty(newKey, userDataProp.getProperty(key));
- userDataProp.remove(key);
-
- doSave = true;
- }
- }
-
- if (doSave) {
- try {
- saveUserData();
- } catch (FtpException e) {
- throw new FtpServerConfigurationException(
- "Failed to save updated user data", e);
- }
- }
- }
-
- public synchronized void save(User usr, boolean renamePush) throws FtpException {
- lazyInit();
- userDataProp.setProperty(PREFIX + usr.getName() + ".rename.push", renamePush);
- save(usr);
- }
-
- /**
- * Save user data. Store the properties.
- */
- public synchronized void save(User usr) throws FtpException {
- lazyInit();
-
- // null value check
- if (usr.getName() == null) {
- throw new NullPointerException("User name is null.");
- }
- String thisPrefix = PREFIX + usr.getName() + '.';
-
- // set other properties
- userDataProp.setProperty(thisPrefix + ATTR_PASSWORD, getPassword(usr));
-
- String home = usr.getHomeDirectory();
- if (home == null) {
- home = "/";
- }
- userDataProp.setProperty(thisPrefix + ATTR_HOME, home);
- userDataProp.setProperty(thisPrefix + ATTR_ENABLE, usr.getEnabled());
- userDataProp.setProperty(thisPrefix + ATTR_WRITE_PERM, usr
- .authorize(new WriteRequest()) != null);
- userDataProp.setProperty(thisPrefix + ATTR_MAX_IDLE_TIME, usr
- .getMaxIdleTime());
-
- TransferRateRequest transferRateRequest = new TransferRateRequest();
- transferRateRequest = (TransferRateRequest) usr
- .authorize(transferRateRequest);
-
- if (transferRateRequest != null) {
- userDataProp.setProperty(thisPrefix + ATTR_MAX_UPLOAD_RATE,
- transferRateRequest.getMaxUploadRate());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_DOWNLOAD_RATE,
- transferRateRequest.getMaxDownloadRate());
- } else {
- userDataProp.remove(thisPrefix + ATTR_MAX_UPLOAD_RATE);
- userDataProp.remove(thisPrefix + ATTR_MAX_DOWNLOAD_RATE);
- }
-
- // request that always will succeed
- ConcurrentLoginRequest concurrentLoginRequest = new ConcurrentLoginRequest(
- 0, 0);
- concurrentLoginRequest = (ConcurrentLoginRequest) usr
- .authorize(concurrentLoginRequest);
-
- if (concurrentLoginRequest != null) {
- userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_NUMBER,
- concurrentLoginRequest.getMaxConcurrentLogins());
- userDataProp.setProperty(thisPrefix + ATTR_MAX_LOGIN_PER_IP,
- concurrentLoginRequest.getMaxConcurrentLoginsPerIP());
- } else {
- userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_NUMBER);
- userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_PER_IP);
- }
-
- saveUserData();
- }
-
- /**
- * @throws FtpException
- */
- private void saveUserData() throws FtpException {
- File dir = userDataFile.getAbsoluteFile().getParentFile();
- if (dir != null && !dir.exists() && !dir.mkdirs()) {
- String dirName = dir.getAbsolutePath();
- throw new FtpServerConfigurationException(
- "Cannot create directory for user data file : " + dirName);
- }
-
- // save user data
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(userDataFile);
- userDataProp.store(fos, "Generated file - don't edit (please)");
- } catch (IOException ex) {
- LOG.error("Failed saving user data", ex);
- throw new FtpException("Failed saving user data", ex);
- } finally {
- IoUtils.close(fos);
- }
- }
-
-
- public synchronized void list() throws FtpException {
- lazyInit();
-
- Map dataMap = new HashMap();
- Enumeration<String> propNames = (Enumeration<String>) userDataProp.propertyNames();
- ArrayList<String> a = Collections.list(propNames);
- a.remove("i18nMap");//去除i18nMap
- for(String attrName : a){
-// dataMap.put(attrName, propNames.);
- }
-
- }
-
- /**
- * Delete an user. Removes all this user entries from the properties. After
- * removing the corresponding from the properties, save the data.
- */
- public synchronized void delete(String usrName) throws FtpException {
- lazyInit();
-
- // remove entries from properties
- String thisPrefix = PREFIX + usrName + '.';
- Enumeration<?> propNames = userDataProp.propertyNames();
- ArrayList<String> remKeys = new ArrayList<String>();
- while (propNames.hasMoreElements()) {
- String thisKey = propNames.nextElement().toString();
- if (thisKey.startsWith(thisPrefix)) {
- remKeys.add(thisKey);
- }
- }
- Iterator<String> remKeysIt = remKeys.iterator();
- while (remKeysIt.hasNext()) {
- userDataProp.remove(remKeysIt.next());
- }
-
- saveUserData();
- }
-
- /**
- * Get user password. Returns the encrypted value.
- * <p/>
- * <pre>
- * If the password value is not null
- * password = new password
- * else
- * if user does exist
- * password = old password
- * else
- * password = &quot;&quot;
- * </pre>
- */
- private String getPassword(User usr) {
- String name = usr.getName();
- String password = usr.getPassword();
-
- if (password != null) {
- password = passwordEncryptor.encrypt(password);
- } else {
- String blankPassword = passwordEncryptor.encrypt("");
-
- if (doesExist(name)) {
- String key = PREFIX + name + '.' + ATTR_PASSWORD;
- password = userDataProp.getProperty(key, blankPassword);
- } else {
- password = blankPassword;
- }
- }
- return password;
- }
-
- /**
- * Get all user names.
- */
- public synchronized String[] getAllUserNames() {
- lazyInit();
-
- // get all user names
- String suffix = '.' + ATTR_HOME;
- ArrayList<String> ulst = new ArrayList<String>();
- Enumeration<?> allKeys = userDataProp.propertyNames();
- int prefixlen = PREFIX.length();
- int suffixlen = suffix.length();
- while (allKeys.hasMoreElements()) {
- String key = (String) allKeys.nextElement();
- if (key.endsWith(suffix)) {
- String name = key.substring(prefixlen);
- int endIndex = name.length() - suffixlen;
- name = name.substring(0, endIndex);
- ulst.add(name);
- }
- }
-
- Collections.sort(ulst);
- return ulst.toArray(new String[0]);
- }
-
- private ArrayList<String> parseGroups(String groupsLine) {
- String groupsArray[] = groupsLine.split(",");
- return new ArrayList(Arrays.asList(groupsArray));
- }
-
- public static synchronized boolean getUserRenamePush(String userName) {
- return userDataProp.getBoolean(PREFIX + userName + ".rename.push", false);
- }
-
- /**
- * Load user data.
- */
- public synchronized User getUserByName(String userName) {
- lazyInit();
-
- if (!doesExist(userName)) {
- return null;
- }
-
- String baseKey = PREFIX + userName + '.';
- HdfsUser user = new HdfsUser();
- user.setName(userName);
- user.setEnabled(userDataProp.getBoolean(baseKey + ATTR_ENABLE, true));
- user.setHomeDirectory(userDataProp
- .getProperty(baseKey + ATTR_HOME, "/"));
-
-// user.setGroups(parseGroups(userDataProp
-// .getProperty(baseKey + "groups")));
-
- List<Authority> authorities = new ArrayList<Authority>();
-
- if (userDataProp.getBoolean(baseKey + ATTR_WRITE_PERM, false)) {
- authorities.add(new WritePermission());
- }
-
- int maxLogin = userDataProp.getInteger(baseKey + ATTR_MAX_LOGIN_NUMBER,
- 0);
- int maxLoginPerIP = userDataProp.getInteger(baseKey
- + ATTR_MAX_LOGIN_PER_IP, 0);
-
- authorities.add(new ConcurrentLoginPermission(maxLogin, maxLoginPerIP));
-
- int uploadRate = userDataProp.getInteger(
- baseKey + ATTR_MAX_UPLOAD_RATE, 0);
- int downloadRate = userDataProp.getInteger(baseKey
- + ATTR_MAX_DOWNLOAD_RATE, 0);
-
- authorities.add(new TransferRatePermission(downloadRate, uploadRate));
-
- user.setAuthorities(authorities);
-
- user.setMaxIdleTime(userDataProp.getInteger(baseKey
- + ATTR_MAX_IDLE_TIME, 0));
-
- return user;
- }
-
- /**
- * User existance check
- */
- public synchronized boolean doesExist(String name) {
- lazyInit();
-
- String key = PREFIX + name + '.' + ATTR_HOME;
- return userDataProp.containsKey(key);
- }
-
- /**
- * User authenticate method
- */
- public synchronized User authenticate(Authentication authentication)
- throws AuthenticationFailedException {
- lazyInit();
-
- if (authentication instanceof UsernamePasswordAuthentication) {
- UsernamePasswordAuthentication upauth = (UsernamePasswordAuthentication) authentication;
-
- String user = upauth.getUsername();
- String password = upauth.getPassword();
-
- if (user == null) {
- throw new AuthenticationFailedException("Authentication failed");
- }
-
- if (password == null) {
- password = "";
- }
-
- String storedPassword = userDataProp.getProperty(PREFIX + user + '.'
- + ATTR_PASSWORD);
-
- if (storedPassword == null) {
- // user does not exist
- throw new AuthenticationFailedException("Authentication failed");
- }
-
- if (passwordEncryptor.matches(password, storedPassword)) {
- return getUserByName(user);
- } else {
- throw new AuthenticationFailedException("Authentication failed");
- }
-
- } else if (authentication instanceof AnonymousAuthentication) {
- if (doesExist("anonymous")) {
- return getUserByName("anonymous");
- } else {
- throw new AuthenticationFailedException("Authentication failed");
- }
- } else {
- throw new IllegalArgumentException(
- "Authentication not supported by this user manager");
- }
- }
-
- /**
- * Close the user manager - remove existing entries.
- */
- public synchronized void dispose() {
- if (userDataProp != null) {
- userDataProp.clear();
- userDataProp = null;
- }
- }
-}
diff --git a/other/java/hdfs-over-ftp/src/main/resources/application.yml b/other/java/hdfs-over-ftp/src/main/resources/application.yml
deleted file mode 100644
index 128bab1f9..000000000
--- a/other/java/hdfs-over-ftp/src/main/resources/application.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-server:
- port: 8080
-
-ftp:
- port: 2222
- passive-address: localhost
- passive-ports: 30000-30999
-
-hdfs:
- uri: seaweedfs://localhost:8888
-
-seaweedFs:
- enable: true
- access: direct # direct/filerProxy/publicUrl
- replication: "000" \ No newline at end of file
diff --git a/other/java/hdfs-over-ftp/src/main/resources/assembly.xml b/other/java/hdfs-over-ftp/src/main/resources/assembly.xml
deleted file mode 100644
index 84fef56f8..000000000
--- a/other/java/hdfs-over-ftp/src/main/resources/assembly.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
-
- <id>package</id>
- <formats>
- <!-- 指定打包格式,支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式 -->
- <format>tar.gz</format>
- </formats>
- <includeBaseDirectory>false</includeBaseDirectory>
-
- <fileSets>
- <fileSet>
- <directory>src/main/resources</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>application.yml</include>
- <include>logback-spring.xml</include>
- <include>users.properties</include>
- <include>kafka-producer.properties</include>
- </includes>
- </fileSet>
- <fileSet>
- <directory>${project.build.directory}</directory>
- <outputDirectory>/</outputDirectory>
- <includes>
- <include>*.jar</include>
- </includes>
- </fileSet>
- </fileSets>
- <dependencySets>
- <dependencySet>
- <useProjectArtifact>false</useProjectArtifact>
- <outputDirectory>lib</outputDirectory>
- <scope>runtime</scope>
- <unpack>false</unpack>
- </dependencySet>
- </dependencySets>
-</assembly>
diff --git a/other/java/hdfs-over-ftp/src/main/resources/logback-spring.xml b/other/java/hdfs-over-ftp/src/main/resources/logback-spring.xml
deleted file mode 100644
index 96b4c1d71..000000000
--- a/other/java/hdfs-over-ftp/src/main/resources/logback-spring.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<configuration>
- <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
- <property name="LOG_HOME" value="${user.dir}/logs/" />
-
- <!-- 控制台输出 -->
- <appender name="Stdout" class="ch.qos.logback.core.ConsoleAppender">
- <!-- 日志输出编码 -->
- <layout class="ch.qos.logback.classic.PatternLayout">
- <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
- </pattern>
- </layout>
- </appender>
-
- <!-- 按照每天生成日志文件 -->
- <appender name="RollingFile"
- class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${LOG_HOME}/fileLog.log</File>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <fileNamePattern>${LOG_HOME}/fileLog.log.%d.%i</fileNamePattern>
- <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <maxFileSize>100 MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <encoder>
- <pattern>
- %d %p (%file:%line\)- %m%n
- </pattern>
- <charset>UTF-8</charset>
- </encoder>
- </appender>
-
- <!-- 日志输出级别 -->
- <root level="info">
- <appender-ref ref="Stdout" />
- <appender-ref ref="RollingFile" />
- </root>
-
-</configuration> \ No newline at end of file
diff --git a/other/java/hdfs-over-ftp/users.properties b/other/java/hdfs-over-ftp/users.properties
deleted file mode 100644
index aeeab8e35..000000000
--- a/other/java/hdfs-over-ftp/users.properties
+++ /dev/null
@@ -1,12 +0,0 @@
-#Generated file - don't edit (please)
-#Thu Mar 11 19:11:12 CST 2021
-ftpserver.user.test.idletime=0
-ftpserver.user.test.maxloginperip=0
-ftpserver.user.test.userpassword=44664D4D827C740293D2AA244FB60445
-ftpserver.user.test.enableflag=true
-ftpserver.user.test.maxloginnumber=0
-ftpserver.user.test.rename.push=true
-ftpserver.user.test.homedirectory=/buckets/test/
-ftpserver.user.test.downloadrate=0
-ftpserver.user.test.writepermission=true
-ftpserver.user.test.uploadrate=0