Skip to content

Commit 71daeb2

Browse files
Merge pull request #1 from PythonHacker24/development-v1
Vortex Backend Component Version 1 - Final GSoC 2025 Evaluation
2 parents a4227a3 + 63b1ace commit 71daeb2

File tree

1,472 files changed

+596496
-35
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,472 files changed

+596496
-35
lines changed

.github/workflows/format.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# .github/workflows/gofmt.yml
2+
# .github/workflows/lint.yml
3+
name: Lint Check
4+
5+
on:
6+
push:
7+
branches:
8+
- '**'
9+
10+
jobs:
11+
lint:
12+
name: Run make lint
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v3
18+
19+
- name: Set up Go
20+
uses: actions/setup-go@v4
21+
with:
22+
go-version: '1.24.2'
23+
24+
- name: Run lint
25+
run: make lint

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# Binary files
2-
/bin/
1+
# Debug logs
2+
/logs/
33

44
# for macOS dev environments
55
.DS_Store

Dockerfile

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# --- Build stage ---
2+
FROM golang:latest AS builder
3+
4+
WORKDIR /app
5+
6+
COPY go.mod go.sum ./
7+
RUN go mod download
8+
9+
COPY . .
10+
11+
RUN make
12+
13+
# --- Final image ---
14+
FROM debian:latest
15+
16+
WORKDIR /app
17+
18+
# Copy only the built binary
19+
COPY --from=builder /app/bin/laclm ./bin/laclm
20+
21+
# Install bash in case needed
22+
# RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/*
23+
24+
RUN apt-get update && apt-get install -y bash acl && rm -rf /var/lib/apt/lists/*
25+
26+
EXPOSE 8080
27+
28+
# Default command to run your Go app
29+
CMD ["./bin/laclm", "--config", "config.yaml"]

Makefile

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,47 @@
1-
APP_NAME = laclm
2-
CMD_DIR = ./cmd/$(APP_NAME)
3-
BIN_DIR = ./bin
4-
BIN_PATH = $(BIN_DIR)/$(APP_NAME)
1+
APP_NAME := laclm
2+
CMD_DIR := ./cmd/$(APP_NAME)
3+
BIN_DIR := ./bin
4+
BUILD_DIR := ./build
55

66
GOFILES := $(shell find . -name '*.go' -type f)
77

8-
.PHONY: all build clean run test lint build-linux build-mac build-win
8+
# Target platforms: OS_ARCH
9+
TARGETS := \
10+
linux_amd64 \
11+
linux_arm64
912

13+
.PHONY: all build build-cross clean run test lint vendor package
14+
15+
## Default target
1016
all: build
1117

12-
## Build the app
13-
build: $(GOFILES)
18+
## Build for local OS/arch using vendored deps
19+
build: vendor $(GOFILES)
1420
@echo "Building $(APP_NAME)..."
1521
@mkdir -p $(BIN_DIR)
16-
go build -o $(BIN_PATH) $(CMD_DIR)
22+
GOOS="" GOARCH="" go build -mod=vendor -o $(BIN_DIR)/$(APP_NAME) $(CMD_DIR)
23+
24+
## Build cross-compiled binaries for all Linux targets
25+
build-cross: vendor $(GOFILES)
26+
@echo "Cross building for targets: $(TARGETS)"
27+
@mkdir -p $(BIN_DIR)
28+
@for target in $(TARGETS); do \
29+
OS=$${target%_*}; \
30+
ARCH=$${target#*_}; \
31+
OUT=$(BIN_DIR)/$(APP_NAME)-$$OS-$$ARCH; \
32+
echo "Building $$OUT..."; \
33+
GOOS=$$OS GOARCH=$$ARCH go build -mod=vendor -o $$OUT $(CMD_DIR); \
34+
done
1735

1836
## Run the app
1937
run: build
2038
@echo "Running $(APP_NAME)..."
21-
@$(BIN_PATH)
39+
@$(BIN_DIR)/$(APP_NAME)
2240

23-
## Clean build artifacts
41+
## Clean build and package directories
2442
clean:
2543
@echo "Cleaning..."
26-
@rm -rf $(BIN_DIR)
44+
@rm -rf $(BIN_DIR) $(BUILD_DIR) vendor
2745

2846
## Run tests
2947
test:
@@ -32,9 +50,32 @@ test:
3250

3351
## Lint (requires golangci-lint)
3452
lint:
53+
@if ! command -v golangci-lint >/dev/null 2>&1; then \
54+
echo "Installing golangci-lint..."; \
55+
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest; \
56+
fi
3557
@echo "Linting..."
3658
@golangci-lint run
3759

38-
## Cross-build for Linux
39-
build-linux:
40-
GOOS=linux GOARCH=amd64 go build -o $(BIN_DIR)/$(APP_NAME)-linux $(CMD_DIR)
60+
## Vendor dependencies
61+
vendor:
62+
@echo "Vendoring dependencies..."
63+
go mod vendor
64+
65+
## Package full project source (with vendor) for each target
66+
package: clean vendor
67+
@echo "Packaging full source tarballs for: $(TARGETS)"
68+
@mkdir -p $(BUILD_DIR)
69+
@for target in $(TARGETS); do \
70+
OS=$${target%_*}; \
71+
ARCH=$${target#*_}; \
72+
NAME=$(APP_NAME)-$$OS-$$ARCH; \
73+
TARBALL=$$NAME-source.tar.gz; \
74+
echo "Creating $$TARBALL..."; \
75+
mkdir -p tmp/$$NAME; \
76+
cp -r * tmp/$$NAME; \
77+
rm -rf tmp/$$NAME/$(BUILD_DIR) tmp/$$NAME/$(BIN_DIR); \
78+
gtar -czf $(BUILD_DIR)/$$TARBALL -C tmp $$NAME; \
79+
rm -rf tmp/$$NAME; \
80+
done
81+
@rm -rf tmp

README.md

Lines changed: 136 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,152 @@
1-
# Backend Component - Linux ACL Management Interface
1+
<div align="center">
22

3-
Securing Linux Storage with ACLs: An Open-Source Web Management Interface for Enhanced Data Protection.
3+
# Linux ACL Management Interface - Backend Component
44

5-
Progress Docs: https://pythonhacker24.github.io/linux-acl-management/
5+
<img width="600" hegith="600" src="https://github.com/user-attachments/assets/a1625f58-0cd8-4df9-babc-31547b18d55a">
66

7-
## Documentation
7+
A robust web-based management interface for Linux Access Control Lists (ACLs), designed to enhance data protection and simplify ACL administration. This project provides a modern, user-friendly solution for managing file system permissions in Linux environments.
88

9-
To be written ...
9+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
1010

11+
[View Documentation](https://pythonhacker24.github.io/linux-acl-management/)
1112

12-
## Progress Report
13+
</div>
1314

14-
To be written ...
15+
## Project Summary
16+
17+
Institutional departments, such as the Biomedical Informatics (BMI) Department of Emory University School of Medicine, manage vast amounts of data, often reaching petabyte scales across multiple Linux-based storage servers. Researchers storing data in these systems need a streamlined way to modify ACLs to grant or revoke access for collaborators. Currently, the IT team at BMI is responsible for manually handling these ACL modifications, which is time-consuming, error-prone, and inefficient, especially as data volume and user demands grow. To address this challenge at BMI and similar institutions worldwide, a Web Management Interface is needed to allow users to modify ACLs securely. This solution would eliminate the burden on IT teams by enabling on-demand permission management while ensuring security and reliability. The proposed system will feature a robust and highly configurable backend, high-speed databases, orchestration daemons for file storage servers, and an intuitive frontend. The proposal includes an in-depth analysis of required components, high-level and low-level design considerations, technology selection, and the demonstration of a functional prototype as proof of concept. The goal is to deliver a production-ready, secure, scalable, and reliable system for managing ACLs across multiple servers hosting filesystems such as NFS, BeeGFS, and others. This solution will streamline access control management and prepare it for deployment at BMI and other institutions worldwide, significantly reducing the manual workload for IT teams.
18+
19+
## Features
20+
21+
- Intuitive web interface for ACL management
22+
- High-performance backend written in Go
23+
- Real-time ACL updates
24+
- Comprehensive ACL reporting and visualization
25+
- Integration with OpenLDAP for authentication
26+
27+
## Quick Start
28+
29+
### Prerequisites
30+
31+
- Go 1.20 or higher
32+
- Docker (optional)
33+
- Redis
34+
- OpenLDAP server
35+
36+
### Local Installation
37+
38+
1. Clone the repository:
39+
```bash
40+
git clone https://github.com/PythonHacker24/linux-acl-management.git
41+
cd linux-acl-management
42+
```
43+
44+
2. Install dependencies:
45+
```bash
46+
go mod download
47+
```
48+
49+
3. Build the application:
50+
```bash
51+
go build -o acl-manager
52+
```
53+
54+
### Production Build
55+
56+
For production build, it is recommended to use the Makefile. This allows you to build the complete binary on locally for security purposes. Since the project is in development mode, complete local build is not possible since dependencies are managed via GitHub and external vendors. Tarball based complete local builds will be developed in later stages.
57+
58+
1. Clone the repository:
59+
```bash
60+
git clone https://github.com/yourusername/linux-acl-management.git
61+
cd linux-acl-management
62+
```
63+
64+
2. Use make:
65+
```bash
66+
make build
67+
```
68+
69+
3. Execute the binary
70+
```bash
71+
./bin/laclm --config config.yaml
72+
```
73+
74+
### Docker Testbench Deployment
75+
76+
A simulated environment has been developed on docker-compose for testing and experimenting purposes. It's not a production level build but a training ground for testing your config.yaml file for specific scenario.
77+
78+
```bash
79+
docker-compose up -d
80+
```
81+
82+
A complete optional Docker based deployment option will be developed in later stages of development
83+
84+
## Usage
85+
86+
1. Configure your settings in `config.yaml`
87+
88+
2. Start the server:
89+
```bash
90+
./laclm --config <config.yaml>
91+
```
92+
93+
3. Access the api at `http://<ip-address>:<port>`
94+
95+
For detailed usage instructions, please refer to our [documentation](https://pythonhacker24.github.io/linux-acl-management/).
96+
97+
## Project Structure
98+
99+
```
100+
.
101+
├── cmd/ # Application entry points
102+
├── internal/ # Private application code
103+
├── pkg/ # Public library code
104+
├── api/ # API definitions and handlers
105+
├── docs/ # Documentation
106+
└── deployments/ # Deployment configurations
107+
```
108+
109+
## Development
110+
111+
### Branches
112+
113+
- `main`: Production-ready code
114+
- `development-v<version>`: Development branches for specific versions
115+
116+
### Contributing
117+
118+
1. Fork the repository
119+
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
120+
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
121+
4. Push to the branch (`git push origin feature/amazing-feature`)
122+
5. Open a Pull Request
123+
124+
Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct and development process.
15125
16126
## About
17127
18-
- **Organization:** Department of Biomedical Informatics, Emory University
19-
- **Program:** Google Summer of Code 2025
20-
- **Contributor:** Aditya Patil
21-
- **Mentors:** Robert Tweedy, Mahmoud Zeydabadinezhad, PhD
128+
This project is developed as part of Google Summer of Code 2025, in collaboration with the Department of Biomedical Informatics at Emory University.
22129
23-
This project is part of Google Summer of Code 2025, undertaken with the Department of Biomedical Informatics at Emory University.
130+
### Team
24131
25-
## Technologies Used
132+
- **Contributor:** Aditya Patil
133+
- **Mentors:**
134+
- Robert Tweedy
135+
- Mahmoud Zeydabadinezhad, PhD
136+
137+
### Technologies
26138
27-
- **Programming Languages:** Golang
28-
- **Frameworks/Libraries:** net/http
29-
- **Standards/Protocols:** gRPC, REST
30-
- **Tools:** Tarball, Redis, Docker, OpenLDAP
139+
- **Backend:** Golang, net/http
140+
- **API:** gRPC, REST
141+
- **Infrastructure:** Docker, Redis, OpenLDAP
142+
- **Packaging:** Tarball
31143
32144
## License
33145
34-
This project is licensed under the MIT License - see the LICENSE file for details.
146+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
147+
148+
## Acknowledgments
149+
150+
- Department of Biomedical Informatics, Emory University
151+
- Google Summer of Code Program
152+
- Open Source Community

0 commit comments

Comments
 (0)