diff --git a/keys/_private.key b/keys/_private.key new file mode 100644 index 0000000..98dfd9f Binary files /dev/null and b/keys/_private.key differ diff --git a/keys/_public.key b/keys/_public.key new file mode 100644 index 0000000..859b873 Binary files /dev/null and b/keys/_public.key differ diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/SkycrateBackendApplication.java b/src/main/java/com/skycrate/backend/skycrateBackend/SkycrateBackendApplication.java index ea53f8d..697e3e6 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/SkycrateBackendApplication.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/SkycrateBackendApplication.java @@ -1,44 +1,3 @@ -//package com.skycrate.backend.skycrateBackend; -// -//import com.skycrate.backend.skycrateBackend.services.HDFSOperations; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.boot.CommandLineRunner; -//import org.springframework.boot.SpringApplication; -//import org.springframework.boot.autoconfigure.SpringBootApplication; -// -//@SpringBootApplication -//public class SkycrateBackendApplication implements CommandLineRunner { -// -// @Autowired -// private HDFSOperations hdfsOperations; // Autowire the service, not the controller -// -// public static void main(String[] args) { -// SpringApplication.run(SkycrateBackendApplication.class, args); -// } -// -// @Override -// public void run(String... args) { -// try { -// // Example of calling the HDFS service directly -// String localPath = "/path/to/local/file"; -// String hdfsPath = "/path/in/hdfs"; -// String uploadedFileName = "example.txt"; -// String username = "user123"; -// -// // Call HDFSOperations directly -// hdfsOperations.uploadFile(localPath, hdfsPath, uploadedFileName, username); -// -// System.out.println("File upload executed successfully"); -// -// } catch (Exception e) { -// System.err.println("❌ Error running CLI: " + e.getMessage()); -// e.printStackTrace(); -// } -// } -//} - - - package com.skycrate.backend.skycrateBackend; import com.skycrate.backend.skycrateBackend.controller.HDFScontroller; diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/controller/HDFScontroller.java b/src/main/java/com/skycrate/backend/skycrateBackend/controller/HDFScontroller.java index 93c82a0..1510208 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/controller/HDFScontroller.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/controller/HDFScontroller.java @@ -33,9 +33,9 @@ public class HDFScontroller { this.hdfsOperations = hdfsOperations; } + @PostMapping("/createFolder") public ResponseDTO createFolder(@RequestParam String hdfsPath) { - System.out.println("==> Received createFolder call for: " + hdfsPath); try { hdfsOperations.createFolder(hdfsPath); return new ResponseDTO("Folder created successfully", true); @@ -45,7 +45,6 @@ public class HDFScontroller { } } - @PostMapping("/uploadFile") public ResponseDTO uploadFile( @RequestParam("file") MultipartFile file, @@ -129,280 +128,4 @@ public class HDFScontroller { .body("Failed to list files: " + e.getMessage()); } } - -// @GetMapping("/listFiles") -// public ResponseDTO listFiles(@RequestParam String hdfsPath) { -// try { -// hdfsOperations.listFilesAndFolders(hdfsPath); -// return new ResponseDTO("Listed files successfully", true); -// } catch (Exception e) { -// return new ResponseDTO("Failed to list files: " + e.getMessage(), false); -// } -// } -} - - - - - - -//package com.skycrate.backend.skycrateBackend.controller; -// -//import com.skycrate.backend.skycrateBackend.dto.User; -//import com.skycrate.backend.skycrateBackend.repository.UserManager; -//import com.skycrate.backend.skycrateBackend.services.HDFSOperations; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Component; -// -//import java.util.Scanner; -// -//@Component -//public class HDFScontroller implements Runnable { -// -// private final UserManager userManager; -// private final HDFSOperations hdfsOperations; -// -// @Autowired -// public HDFScontroller(UserManager userManager, HDFSOperations hdfsOperations) { -// this.userManager = userManager; -// this.hdfsOperations = hdfsOperations; -// } -// -// @Override -// public void run() { -// Scanner scanner = new Scanner(System.in); -// -// while (true) { -// System.out.print("Enter your username: "); -// String username = scanner.nextLine(); -// -// System.out.print("Enter your password: "); -// String password = scanner.nextLine(); -// -// if (!userManager.authenticate(username, password)) { -// System.out.println("❌ Authentication failed. Exiting..."); -// return; -// } -// -// User user; -// try { -// user = userManager.getUser(username); -// } catch (Exception e) { -// System.out.println("❌ Error creating user: " + e.getMessage()); -// return; -// } -// -// while (true) { -// System.out.println("\nChoose an option:"); -// System.out.println("1. Create a folder"); -// System.out.println("2. Upload a file (encrypted)"); -// System.out.println("3. Upload a file to a specific folder (encrypted)"); -// System.out.println("4. Download a file"); -// System.out.println("5. Delete a file"); -// System.out.println("6. Delete a folder"); -// System.out.println("7. List files and folders"); -// System.out.println("8. Exit"); -// -// int choice = scanner.nextInt(); -// scanner.nextLine(); // Consume newline -// -// try { -// switch (choice) { -// case 1: -// System.out.print("Enter folder name: "); -// hdfsOperations.createFolder(scanner.nextLine()); -// break; -// -// case 2: -// System.out.print("Enter file path to upload: "); -// String filePath = scanner.nextLine(); -// System.out.print("Enter HDFS destination path: "); -// String hdfsDestinationFolder = scanner.nextLine(); -// System.out.print("Enter the name for the uploaded file: "); -// String uploadedFileName = scanner.nextLine(); -// hdfsOperations.uploadFile(filePath, hdfsDestinationFolder, uploadedFileName, user); -// break; -// -// case 3: -// System.out.print("Enter folder name to upload to: "); -// String targetFolder = scanner.nextLine(); -// System.out.print("Enter file path to upload: "); -// String fileToUpload = scanner.nextLine(); -// System.out.print("Enter the name for the uploaded file: "); -// String uploadedFileNameSpecific = scanner.nextLine(); -// hdfsOperations.uploadFile(fileToUpload, targetFolder, uploadedFileNameSpecific, user); -// break; -// -// case 4: -// System.out.print("Enter HDFS file path to download: "); -// String hdfsFilePath = scanner.nextLine(); -// System.out.print("Enter local path to save the downloaded file: "); -// String localDownloadPath = scanner.nextLine(); -// hdfsOperations.downloadFile(hdfsFilePath, localDownloadPath, user); -// break; -// -// case 5: -// System.out.print("Enter HDFS file path to delete: "); -// hdfsOperations.deleteFile(scanner.nextLine()); -// break; -// -// case 6: -// System.out.print("Enter HDFS folder path to delete: "); -// hdfsOperations.deleteFolder(scanner.nextLine()); -// break; -// -// case 7: -// System.out.print("Enter HDFS path to list files and folders: "); -// hdfsOperations.listFilesAndFolders(scanner.nextLine()); -// break; -// -// case 8: -// System.out.println("✅ Exiting..."); -// return; -// -// default: -// System.out.println("⚠️ Invalid option. Please try again."); -// } -// } catch (Exception e) { -// System.out.println("❌ Operation failed: " + e.getMessage()); -// e.printStackTrace(); -// } -// } -// } -// } -//} - - - - - - - - - - - - - - - - - - - - - - - -//package com.skycrate.backend.skycrateBackend.controller; -// -//import com.skycrate.backend.skycrateBackend.dto.User; -//import com.skycrate.backend.skycrateBackend.repository.UserManager; -//import com.skycrate.backend.skycrateBackend.services.HDFSOperations; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Component; -// -//import java.util.Scanner; -// -//@Component -//public class HDFScontroller implements Runnable { -// -// private final UserManager userManager; -// private final HDFSOperations hdfsOperations; -// -// @Autowired -// public HDFScontroller(UserManager userManager, HDFSOperations hdfsOperations) { -// this.userManager = userManager; -// this.hdfsOperations = hdfsOperations; -// } -// -// @Override -// public void run() { -// Scanner scanner = new Scanner(System.in); -// -// while (true) { -// System.out.print("Enter your username: "); -// String username = scanner.nextLine(); -// -// System.out.print("Enter your password: "); -// String password = scanner.nextLine(); -// -// if (!userManager.authenticate(username, password)) { -// System.out.println("X Authentication failed. Exiting..."); -// return; -// } -// -// User user; -// try { -// user = userManager.getUser(username); -// } catch (Exception e) { -// System.out.println("X Error creating user: " + e.getMessage()); -// return; -// } -// -// while (true) { -// System.out.println("\nChoose an option:"); -// System.out.println("1. Create a folder"); -// System.out.println("2. Upload a file (encrypted)"); -// System.out.println("3. Upload a file to a specific folder (encrypted)"); -// System.out.println("4. Download a file"); -// System.out.println("5. Delete a file"); -// System.out.println("6. Delete a folder"); -// System.out.println("7. List files and folders"); -// System.out.println("8. Exit"); -// -// int choice = scanner.nextInt(); -// scanner.nextLine(); // Consume newline -// -// switch (choice) { -// case 1: -// System.out.print("Enter folder name: "); -// hdfsOperations.createFolder(scanner.nextLine()); -// break; -// case 2: -// System.out.print("Enter file path to upload: "); -// String filePath = scanner.nextLine(); -// System.out.print("Enter HDFS destination path: "); -// String hdfsDestinationFolder = scanner.nextLine(); -// System.out.print("Enter the name for the uploaded file: "); -// String uploadedFileName = scanner.nextLine(); -// hdfsOperations.uploadFile(filePath, hdfsDestinationFolder, uploadedFileName, user); -// break; -// case 3: -// System.out.print("Enter folder name to upload to: "); -// String targetFolder = scanner.nextLine(); -// System.out.print("Enter file path to upload: "); -// String fileToUpload = scanner.nextLine(); -// System.out.print("Enter the name for the uploaded file: "); -// String uploadedFileNameSpecific = scanner.nextLine(); -// hdfsOperations.uploadFile(fileToUpload, targetFolder, uploadedFileNameSpecific, user); -// break; -// case 4: -// System.out.print("Enter HDFS file path to download: "); -// String hdfsFilePath = scanner.nextLine(); -// System.out.print("Enter local path to save the downloaded file: "); -// String localDownloadPath = scanner.nextLine(); -// hdfsOperations.downloadFile(hdfsFilePath, localDownloadPath, user); -// break; -// case 5: -// System.out.print("Enter HDFS file path to delete: "); -// hdfsOperations.deleteFile(scanner.nextLine()); -// break; -// case 6: -// System.out.print("Enter HDFS folder path to delete: "); -// hdfsOperations.deleteFolder(scanner.nextLine()); -// break; -// case 7: -// System.out.print("Enter HDFS path to list files and folders: "); -// hdfsOperations.listFilesAndFolders(scanner.nextLine()); -// break; -// case 8: -// System.out.println("Exiting..."); -// return; -// default: -// System.out.println("Invalid option. Please try again."); -// } -// } -// } -// } -//} +} \ No newline at end of file diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/services/EncryptionUtil.java b/src/main/java/com/skycrate/backend/skycrateBackend/services/EncryptionUtil.java index dc09e89..df0bf43 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/services/EncryptionUtil.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/services/EncryptionUtil.java @@ -82,77 +82,4 @@ public class EncryptionUtil { keyGen.init(AES_KEY_SIZE); return keyGen.generateKey(); } -} -// -//import javax.crypto.Cipher; -//import javax.crypto.KeyGenerator; -//import javax.crypto.SecretKey; -//import javax.crypto.spec.SecretKeySpec; -//import java.security.*; -// -//public class EncryptionUtil { -// private static final String RSA_ALGORITHM = "RSA"; -// private static final String AES_ALGORITHM = "AES"; -// private static final int RSA_KEY_SIZE = 2048; -// private static final int AES_KEY_SIZE = 256; -// -// public static KeyPair generateKeyPair() throws NoSuchAlgorithmException { -// KeyPairGenerator keyGen = KeyPairGenerator.getInstance(RSA_ALGORITHM); -// keyGen.initialize(RSA_KEY_SIZE); -// return keyGen.generateKeyPair(); -// } -// -// public static byte[] encrypt(byte[] data, PublicKey publicKey) throws Exception { -// // Generate a random AES key -// KeyGenerator keyGen = KeyGenerator.getInstance(AES_ALGORITHM); -// keyGen.init(AES_KEY_SIZE); -// SecretKey aesKey = keyGen.generateKey(); -// -// // Encrypt the data with the AES key -// Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM); -// aesCipher.init(Cipher.ENCRYPT_MODE, aesKey); -// byte[] encryptedData = aesCipher.doFinal(data); -// -// // Encrypt the AES key with the RSA public key -// Cipher rsaCipher = Cipher.getInstance(RSA_ALGORITHM); -// rsaCipher.init(Cipher.ENCRYPT_MODE, publicKey); -// byte[] encryptedAesKey = rsaCipher.doFinal(aesKey.getEncoded()); -// -// // Combine the encrypted AES key and the encrypted data -// byte[] combined = new byte[encryptedAesKey.length + encryptedData.length + 4]; -// System.arraycopy(encryptedAesKey, 0, combined, 0, encryptedAesKey.length); -// System.arraycopy(encryptedData, 0, combined, encryptedAesKey.length, encryptedData.length); -// // Store the length of the encrypted AES key at the beginning -// combined[encryptedAesKey.length + encryptedData.length] = (byte) (encryptedAesKey.length >> 24); -// combined[encryptedAesKey.length + encryptedData.length + 1] = (byte) (encryptedAesKey.length >> 16); -// combined[encryptedAesKey.length + encryptedData.length + 2] = (byte) (encryptedAesKey.length >> 8); -// combined[encryptedAesKey.length + encryptedData.length + 3] = (byte) (encryptedAesKey.length); -// -// return combined; -// } -// -// public static byte[] decrypt(byte[] encryptedData, PrivateKey privateKey) throws Exception { -// // Read the length of the encrypted AES key -// int aesKeyLength = ((encryptedData[encryptedData.length - 4] & 0xFF) << 24) | -// ((encryptedData[encryptedData.length - 3] & 0xFF) << 16) | -// ((encryptedData[encryptedData.length - 2] & 0xFF) << 8) | -// (encryptedData[encryptedData.length - 1] & 0xFF); -// -// // Extract the encrypted AES key and the encrypted data -// byte[] encryptedAesKey = new byte[aesKeyLength]; -// byte[] encryptedDataBytes = new byte[encryptedData.length - aesKeyLength - 4]; -// System.arraycopy(encryptedData, 0, encryptedAesKey, 0, aesKeyLength); -// System.arraycopy(encryptedData, aesKeyLength, encryptedDataBytes, 0, encryptedDataBytes.length); -// -// // Decrypt the AES key with the RSA private key -// Cipher rsaCipher = Cipher.getInstance(RSA_ALGORITHM); -// rsaCipher.init(Cipher.DECRYPT_MODE, privateKey); -// byte[] aesKeyBytes = rsaCipher.doFinal(encryptedAesKey); -// SecretKey aesKey = new SecretKeySpec(aesKeyBytes, AES_ALGORITHM); -// -// // Decrypt the data with the AES key -// Cipher aesCipher = Cipher.getInstance(AES_ALGORITHM); -// aesCipher.init(Cipher.DECRYPT_MODE, aesKey); -// return aesCipher.doFinal(encryptedDataBytes); -// } -//} +} \ No newline at end of file diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/services/HDFSOperations.java b/src/main/java/com/skycrate/backend/skycrateBackend/services/HDFSOperations.java index bd82cc9..073556e 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/services/HDFSOperations.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/services/HDFSOperations.java @@ -1,16 +1,24 @@ package com.skycrate.backend.skycrateBackend.services; import com.skycrate.backend.skycrateBackend.config.HDFSConfig; +import com.skycrate.backend.skycrateBackend.utils.KeyUtil; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.springframework.stereotype.Service; +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.security.KeyFactory; +import java.security.KeyPair; import java.security.PrivateKey; +import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import java.util.ArrayList; import java.util.List; @@ -142,142 +150,4 @@ public class HDFSOperations { } } } - - -// public void listFilesAndFolders(String hdfsPath) { -// try { -// FileSystem fs = HDFSConfig.getHDFS(); -// Path path = new Path(hdfsPath); -// -// if (fs.exists(path)) { -// listFilesAndFoldersRecursively(fs, path, ""); -// } -// } catch (IOException e) { -// // Handle I/O exception and log the error -// throw new RuntimeException("Failed to list files and folders due to I/O issue: " + e.getMessage(), e); -// } catch (Exception e) { -// // Catch any other exceptions -// throw new RuntimeException("Failed to list files and folders: " + e.getMessage(), e); -// } -// } -// -// private void listFilesAndFoldersRecursively(FileSystem fs, Path path, String indent) throws IOException { -// FileStatus[] fileStatuses = fs.listStatus(path); -// for (FileStatus fileStatus : fileStatuses) { -// System.out.println(indent + (fileStatus.isDirectory() ? "📁 " : "📄 ") + fileStatus.getPath().getName()); -// if (fileStatus.isDirectory()) { -// listFilesAndFoldersRecursively(fs, fileStatus.getPath(), indent + " "); -// } -// } -// } -} - - - - -//package com.skycrate.backend.skycrateBackend.services; -// -// -//import com.skycrate.backend.skycrateBackend.config.HDFSConfig; -//import com.skycrate.backend.skycrateBackend.dto.User; -//import org.apache.hadoop.fs.*; -//import org.springframework.stereotype.Service; -// -//import java.io.IOException; -//import java.nio.file.Files; -//import java.nio.file.Paths; -// -//@Service -//public class HDFSOperations { -// public static void uploadFile(String localPath, String hdfsPath, String uploadedFileName, User user) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// byte[] data = Files.readAllBytes(Paths.get(localPath)); // Read file as bytes -// byte[] encryptedData = EncryptionUtil.encrypt(data, user.getKeyPair().getPublic()); -// -// // Save encryptedData to a temporary file and upload it -// String tempFilePath = localPath + ".enc"; -// Files.write(Paths.get(tempFilePath), encryptedData); // Write bytes to temp file -// -// // Construct the final HDFS path using the provided uploaded file name -// String finalHdfsPath = hdfsPath.endsWith("/") ? hdfsPath + uploadedFileName : hdfsPath + "/" + uploadedFileName; -// -// fs.copyFromLocalFile(new Path(tempFilePath), new Path(finalHdfsPath)); -// System.out.println("✅ File uploaded: " + finalHdfsPath); -// -// // Clean up temporary file -// Files.delete(Paths.get(tempFilePath)); -// } -// -// public static void downloadFile(String hdfsPath, String localPath, User user) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// String tempFilePath = localPath + ".enc"; -// -// fs.copyToLocalFile(new Path(hdfsPath), new Path(tempFilePath)); -// -// // Read the encrypted file as bytes -// byte[] encryptedData = Files.readAllBytes(Paths.get(tempFilePath)); -// byte[] decryptedData = EncryptionUtil.decrypt(encryptedData, user.getKeyPair().getPrivate()); -// -// Files.write(Paths.get(localPath), decryptedData); // Write decrypted bytes to local file -// System.out.println("✅ File downloaded: " + localPath); -// -// // Clean up temporary file -// Files.delete(Paths.get(tempFilePath)); -// } -// -// public static void createFolder(String hdfsPath) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// Path path = new Path(hdfsPath); -// if (!fs.exists(path)) { -// fs.mkdirs(path); -// System.out.println("✅ Folder created: " + hdfsPath); -// } else { -// System.out.println("⚠️ Folder already exists: " + hdfsPath); -// } -// } -// -// public static void deleteFile(String hdfsFilePath) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// Path path = new Path(hdfsFilePath); -// if (fs.exists(path)) { -// fs.delete(path, false); // false means do not recursively delete -// System.out.println("✅ File deleted: " + hdfsFilePath); -// } else { -// System.out.println("⚠️ File does not exist: " + hdfsFilePath); -// } -// } -// -// public static void deleteFolder(String hdfsFolderPath) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// Path path = new Path(hdfsFolderPath); -// if (fs.exists(path)) { -// fs.delete(path, true); // true means recursively delete -// System.out.println("✅ Folder deleted: " + hdfsFolderPath); -// } else { -// System.out.println("⚠️ Folder does not exist: " + hdfsFolderPath); -// } -// } -// -// public static void listFilesAndFolders(String hdfsPath) throws Exception { -// FileSystem fs = HDFSConfig.getHDFS(); -// Path path = new Path(hdfsPath); -// -// if (!fs.exists(path)) { -// System.out.println("⚠️ Path does not exist: " + hdfsPath); -// return; -// } -// -// System.out.println("Listing files and folders in: " + hdfsPath); -// listFilesAndFoldersRecursively(fs, path, ""); -// } -// -// private static void listFilesAndFoldersRecursively(FileSystem fs, Path path, String indent) throws IOException { -// FileStatus[] fileStatuses = fs.listStatus(path); -// for (FileStatus fileStatus : fileStatuses) { -// System.out.println(indent + (fileStatus.isDirectory() ? "📁 " : "📄 ") + fileStatus.getPath().getName()); -// if (fileStatus.isDirectory()) { -// listFilesAndFoldersRecursively(fs, fileStatus.getPath(), indent + " "); // Indent for subdirectories -// } -// } -// } -//} +} \ No newline at end of file diff --git a/src/main/java/com/skycrate/backend/skycrateBackend/utils/KeyUtil.java b/src/main/java/com/skycrate/backend/skycrateBackend/utils/KeyUtil.java index c4bef78..8f8694b 100644 --- a/src/main/java/com/skycrate/backend/skycrateBackend/utils/KeyUtil.java +++ b/src/main/java/com/skycrate/backend/skycrateBackend/utils/KeyUtil.java @@ -23,4 +23,4 @@ public class KeyUtil { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes); return KeyFactory.getInstance("RSA").generatePublic(keySpec); } -} +} \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 5418dd0..258749b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,7 @@ spring.application.name=skycrateBackend -spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB +spring.servlet.multipart.max-file-size=1000MB +spring.servlet.multipart.max-request-size=1000MB spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect diff --git a/tmp/Handout-A6.pdf b/tmp/Handout-A6.pdf new file mode 100644 index 0000000..939b1de Binary files /dev/null and b/tmp/Handout-A6.pdf differ diff --git a/tmp/Handout-B4.pdf b/tmp/Handout-B4.pdf new file mode 100644 index 0000000..a00bf41 Binary files /dev/null and b/tmp/Handout-B4.pdf differ diff --git a/tmp/Hello.txt b/tmp/Hello.txt new file mode 100644 index 0000000..f584548 --- /dev/null +++ b/tmp/Hello.txt @@ -0,0 +1 @@ +Hello World!!! \ No newline at end of file diff --git a/tmp/Rect1.png b/tmp/Rect1.png new file mode 100644 index 0000000..edfedfc Binary files /dev/null and b/tmp/Rect1.png differ diff --git a/tmp/test.pptx b/tmp/test.pptx new file mode 100644 index 0000000..d4099ab Binary files /dev/null and b/tmp/test.pptx differ