Compare commits
8 Commits
release/v1
...
fix/arm64-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a672b9ad2e | ||
|
|
56a9693767 | ||
|
|
447f1c31aa | ||
|
|
a51ce6f4ac | ||
|
|
cec51f11f0 | ||
|
|
b1be2081eb | ||
|
|
203a2091a0 | ||
|
|
7fa7cc313f |
@@ -1,5 +1,14 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.6.4
|
||||||
|
### Fixed
|
||||||
|
* Fixes a bug causing CPU limiting to not be properly applied to servers.
|
||||||
|
* Fixes a bug causing zip archives to decompress without taking into account nested folder structures.
|
||||||
|
|
||||||
|
## v1.6.3
|
||||||
|
### Fixed
|
||||||
|
* Fixes SFTP authentication failing for administrative users due to a permissions adjustment on the Panel.
|
||||||
|
|
||||||
## v1.6.2
|
## v1.6.2
|
||||||
### Fixed
|
### Fixed
|
||||||
* Fixes file upload size not being properly enforced.
|
* Fixes file upload size not being properly enforced.
|
||||||
|
|||||||
@@ -1,19 +1,18 @@
|
|||||||
# Stage 1 (Build)
|
# Stage 1 (Build)
|
||||||
FROM --platform=$BUILDPLATFORM golang:1.17-alpine AS builder
|
FROM golang:1.17-alpine AS builder
|
||||||
|
|
||||||
ARG VERSION
|
ARG VERSION
|
||||||
RUN apk add --update --no-cache git make upx
|
RUN apk add --update --no-cache git make
|
||||||
WORKDIR /app/
|
WORKDIR /app/
|
||||||
COPY go.mod go.sum /app/
|
COPY go.mod go.sum /app/
|
||||||
RUN go mod download
|
RUN go mod download
|
||||||
COPY . /app/
|
COPY . /app/
|
||||||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
|
RUN CGO_ENABLED=0 go build \
|
||||||
-ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=$VERSION" \
|
-ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=$VERSION" \
|
||||||
-v \
|
-v \
|
||||||
-trimpath \
|
-trimpath \
|
||||||
-o wings \
|
-o wings \
|
||||||
wings.go
|
wings.go
|
||||||
RUN upx wings
|
|
||||||
RUN echo "ID=\"distroless\"" > /etc/os-release
|
RUN echo "ID=\"distroless\"" > /etc/os-release
|
||||||
|
|
||||||
# Stage 2 (Final)
|
# Stage 2 (Final)
|
||||||
|
|||||||
12
README.md
12
README.md
@@ -19,22 +19,16 @@ I would like to extend my sincere thanks to the following sponsors for helping f
|
|||||||
| Company | About |
|
| Company | About |
|
||||||
| ------- | ----- |
|
| ------- | ----- |
|
||||||
| [**WISP**](https://wisp.gg) | Extra features. |
|
| [**WISP**](https://wisp.gg) | Extra features. |
|
||||||
| [**MixmlHosting**](https://mixmlhosting.com) | MixmlHosting provides high quality Virtual Private Servers along with game servers, all at a affordable price. |
|
|
||||||
| [**BisectHosting**](https://www.bisecthosting.com/) | BisectHosting provides Minecraft, Valheim and other server hosting services with the highest reliability and lightning fast support since 2012. |
|
| [**BisectHosting**](https://www.bisecthosting.com/) | BisectHosting provides Minecraft, Valheim and other server hosting services with the highest reliability and lightning fast support since 2012. |
|
||||||
|
| [**Tempest**](https://tempest.net/) | Tempest Hosting is a subsidiary of Path Network, Inc. offering unmetered DDoS protected 10Gbps dedicated servers, starting at just $80/month. Full anycast, tons of filters. |
|
||||||
| [**Bloom.host**](https://bloom.host) | Bloom.host offers dedicated core VPS and Minecraft hosting with Ryzen 9 processors. With owned-hardware, we offer truly unbeatable prices on high-performance hosting. |
|
| [**Bloom.host**](https://bloom.host) | Bloom.host offers dedicated core VPS and Minecraft hosting with Ryzen 9 processors. With owned-hardware, we offer truly unbeatable prices on high-performance hosting. |
|
||||||
| [**MineStrator**](https://minestrator.com/) | Looking for a French highend hosting company for you minecraft server? More than 14,000 members on our discord, trust us. |
|
| [**MineStrator**](https://minestrator.com/) | Looking for a French highend hosting company for you minecraft server? More than 14,000 members on our discord, trust us. |
|
||||||
| [**DedicatedMC**](https://dedicatedmc.io/) | DedicatedMC provides Raw Power hosting at affordable pricing, making sure to never compromise on your performance and giving you the best performance money can buy. |
|
|
||||||
| [**Skynode**](https://www.skynode.pro/) | Skynode provides blazing fast game servers along with a top-notch user experience. Whatever our clients are looking for, we're able to provide it! |
|
| [**Skynode**](https://www.skynode.pro/) | Skynode provides blazing fast game servers along with a top-notch user experience. Whatever our clients are looking for, we're able to provide it! |
|
||||||
| [**XCORE**](https://xcore-server.de/) | XCORE offers High-End Servers for hosting and gaming since 2012. Fast, excellent and well-known for eSports Gaming. |
|
|
||||||
| [**RoyaleHosting**](https://royalehosting.net/) | Build your dreams and deploy them with RoyaleHosting’s reliable servers and network. Easy to use, provisioned in a couple of minutes. |
|
|
||||||
| [**Spill Hosting**](https://spillhosting.no/) | Spill Hosting is a Norwegian hosting service, which aims for inexpensive services on quality servers. Premium i9-9900K processors will run your game like a dream. |
|
|
||||||
| [**DeinServerHost**](https://deinserverhost.de/) | DeinServerHost offers Dedicated, vps and Gameservers for many popular Games like Minecraft and Rust in Germany since 2013. |
|
| [**DeinServerHost**](https://deinserverhost.de/) | DeinServerHost offers Dedicated, vps and Gameservers for many popular Games like Minecraft and Rust in Germany since 2013. |
|
||||||
| [**HostBend**](https://hostbend.com/) | HostBend offers a variety of solutions for developers, students, and others who have a tight budget but don't want to compromise quality and support. |
|
|
||||||
| [**Capitol Hosting Solutions**](https://chs.gg/) | CHS is *the* budget friendly hosting company for Australian and American gamers, offering a variety of plans from Web Hosting to Game Servers; Custom Solutions too! |
|
|
||||||
| [**ByteAnia**](https://byteania.com/?utm_source=pterodactyl) | ByteAnia offers the best performing and most affordable **Ryzen 5000 Series hosting** on the market for *unbeatable prices*! |
|
|
||||||
| [**Aussie Server Hosts**](https://aussieserverhosts.com/) | No frills Australian Owned and operated High Performance Server hosting for some of the most demanding games serving Australia and New Zealand. |
|
| [**Aussie Server Hosts**](https://aussieserverhosts.com/) | No frills Australian Owned and operated High Performance Server hosting for some of the most demanding games serving Australia and New Zealand. |
|
||||||
|
| [**HostEZ**](https://hostez.io) | Providing North America Valheim, Minecraft and other popular games with low latency, high uptime and maximum availability. EZ! |
|
||||||
| [**VibeGAMES**](https://vibegames.net/) | VibeGAMES is a game server provider that specializes in DDOS protection for the games we offer. We have multiple locations in the US, Brazil, France, Germany, Singapore, Australia and South Africa.|
|
| [**VibeGAMES**](https://vibegames.net/) | VibeGAMES is a game server provider that specializes in DDOS protection for the games we offer. We have multiple locations in the US, Brazil, France, Germany, Singapore, Australia and South Africa.|
|
||||||
| [**RocketNode**](https://rocketnode.net) | RocketNode is a VPS and Game Server provider that offers the best performing VPS and Game hosting Solutions at affordable prices! |
|
| [**Gamenodes**](https://gamenodes.nl) | Gamenodes love quality. For Minecraft, Discord Bots and other services, among others. With our own programmers, we provide just that little bit of extra service! |
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
* [Panel Documentation](https://pterodactyl.io/panel/1.0/getting_started.html)
|
* [Panel Documentation](https://pterodactyl.io/panel/1.0/getting_started.html)
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ func (l Limits) AsContainerResources() container.Resources {
|
|||||||
// @see https://github.com/pterodactyl/panel/issues/3988
|
// @see https://github.com/pterodactyl/panel/issues/3988
|
||||||
if l.CpuLimit > 0 {
|
if l.CpuLimit > 0 {
|
||||||
resources.CPUQuota = l.CpuLimit * 1_000
|
resources.CPUQuota = l.CpuLimit * 1_000
|
||||||
resources.CPUPeriod = 100_00
|
resources.CPUPeriod = 100_000
|
||||||
resources.CPUShares = 1024
|
resources.CPUShares = 1024
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,12 @@ import (
|
|||||||
"archive/zip"
|
"archive/zip"
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
gzip2 "github.com/klauspost/compress/gzip"
|
||||||
|
zip2 "github.com/klauspost/compress/zip"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
@@ -172,13 +175,26 @@ func ExtractNameFromArchive(f archiver.File) string {
|
|||||||
return f.Name()
|
return f.Name()
|
||||||
}
|
}
|
||||||
switch s := sys.(type) {
|
switch s := sys.(type) {
|
||||||
|
case *zip.FileHeader:
|
||||||
|
return s.Name
|
||||||
|
case *zip2.FileHeader:
|
||||||
|
return s.Name
|
||||||
case *tar.Header:
|
case *tar.Header:
|
||||||
return s.Name
|
return s.Name
|
||||||
case *gzip.Header:
|
case *gzip.Header:
|
||||||
return s.Name
|
return s.Name
|
||||||
case *zip.FileHeader:
|
case *gzip2.Header:
|
||||||
return s.Name
|
return s.Name
|
||||||
default:
|
default:
|
||||||
|
// At this point we cannot figure out what type of archive this might be so
|
||||||
|
// just try to find the name field in the struct. If it is found return it.
|
||||||
|
field := reflect.Indirect(reflect.ValueOf(sys)).FieldByName("Name")
|
||||||
|
if field.IsValid() {
|
||||||
|
return field.String()
|
||||||
|
}
|
||||||
|
// Fallback to the basename of the file at this point. There is nothing we can really
|
||||||
|
// do to try and figure out what the underlying directory of the file is supposed to
|
||||||
|
// be since it didn't implement a name field.
|
||||||
return f.Name()
|
return f.Name()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -288,14 +288,10 @@ func (h *Handler) can(permission string) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// SFTPServer owners and super admins have their permissions returned as '[*]' via the Panel
|
|
||||||
// API, so for the sake of speed do an initial check for that before iterating over the
|
|
||||||
// entire array of permissions.
|
|
||||||
if len(h.permissions) == 1 && h.permissions[0] == "*" {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
for _, p := range h.permissions {
|
for _, p := range h.permissions {
|
||||||
if p == permission {
|
// If we match the permission specifically, or the user has been granted the "*"
|
||||||
|
// permission because they're an admin, let them through.
|
||||||
|
if p == permission || p == "*" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
package system
|
package system
|
||||||
|
|
||||||
var Version = "1.6.2"
|
var Version = "develop"
|
||||||
|
|||||||
Reference in New Issue
Block a user