Compare commits

..

8 Commits

Author SHA1 Message Date
903fcefc2a feat(ci): use git tea action instead of Jenkins
All checks were successful
Autotools pipeline / build-amd64 (push) Successful in 39s
Autotools pipeline / build-arm64 (push) Successful in 40s
Autotools pipeline / build-arm (push) Successful in 37s
2024-07-27 00:41:11 +02:00
0fcf2fc2ab feat(ulib): sqlite database file is created with mode 0600 by default 2024-07-27 00:15:40 +02:00
824769dee2 feat: AssetController shall denies access to files in folder that has a .DENIED file
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2024-03-17 19:02:14 +01:00
14e20cf41e fix(CI): use cross toolchain
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2024-03-14 00:04:48 +01:00
6380787d7e fix: Change default silk db path to /var/silk
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2024-03-13 18:21:18 +01:00
bf5284e66f fix: reading mime of file without extension crashes the request
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2024-01-18 10:55:16 +01:00
eeea893d92 fix: ignore case when checking file type
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2023-10-24 16:34:55 +02:00
adb81580a3 Update Jenkinsfile
All checks were successful
gitea-sync/silk/pipeline/head This commit looks good
2023-07-22 23:52:24 +02:00
8 changed files with 544 additions and 550 deletions

17
.gitea/workflows/ci.yml Normal file
View File

@ -0,0 +1,17 @@
name: Autotools pipeline
run-name: Building multi-platform autotools project
on: [push]
jobs:
build-amd64:
uses: dany/actions/.gitea/workflows/autotools-cross.yml@master
with:
platform: amd64
build-arm64:
uses: dany/actions/.gitea/workflows/autotools-cross.yml@master
with:
platform: arm64
build-arm:
uses: dany/actions/.gitea/workflows/autotools-cross.yml@master
with:
platform: arm

106
Jenkinsfile vendored
View File

@ -1,106 +0,0 @@
def build_plugin()
{
sh '''
set -e
cd $WORKSPACE
mkdir -p build/$arch/opt/www
[ -f Makefile ] && make clean
libtoolize
aclocal
autoconf
automake --add-missing
./configure --prefix=/opt/www
make
DESTDIR=$WORKSPACE/build/$arch make install
'''
}
pipeline{
agent { node{ label'master' }}
options {
// Limit build history with buildDiscarder option:
// daysToKeepStr: history is only kept up to this many days.
// numToKeepStr: only this many build logs are kept.
// artifactDaysToKeepStr: artifacts are only kept up to this many days.
// artifactNumToKeepStr: only this many builds have their artifacts kept.
buildDiscarder(logRotator(numToKeepStr: "1"))
// Enable timestamps in build log console
timestamps()
// Maximum time to run the whole pipeline before canceling it
timeout(time: 3, unit: 'HOURS')
// Use Jenkins ANSI Color Plugin for log console
ansiColor('xterm')
// Limit build concurrency to 1 per branch
disableConcurrentBuilds()
}
stages
{
stage('Prepare dependencies')
{
steps {
copyArtifacts(projectName: 'gitea-sync/ant-http/master', target: 'antd');
}
}
stage('Build AMD64') {
agent {
docker {
image 'xsangle/ci-tools:bionic-amd64'
// Run the container on the node specified at the
// top-level of the Pipeline, in the same workspace,
// rather than on a new node entirely:
reuseNode true
registryUrl 'http://workstation:5000/'
}
}
steps {
script{
env.arch = "amd64"
}
build_plugin()
}
}
stage('Build ARM64') {
agent {
docker {
image 'xsangle/ci-tools:bionic-arm64'
// Run the container on the node specified at the
// top-level of the Pipeline, in the same workspace,
// rather than on a new node entirely:
reuseNode true
registryUrl 'http://workstation:5000/'
}
}
steps {
script{
env.arch = "arm64"
}
build_plugin()
}
}
stage('Build ARM') {
agent {
docker {
image 'xsangle/ci-tools:bionic-arm'
// Run the container on the node specified at the
// top-level of the Pipeline, in the same workspace,
// rather than on a new node entirely:
reuseNode true
registryUrl 'http://workstation:5000/'
}
}
steps {
script{
env.arch = "arm"
}
build_plugin()
}
}
stage('Archive') {
steps {
script {
archiveArtifacts artifacts: 'build/', fingerprint: true
}
}
}
}
}

View File

@ -1,5 +1,5 @@
# initialise autoconf and set up some basic information about the program were packaging # initialise autoconf and set up some basic information about the program were packaging
AC_INIT([silk], [0.1.0], [xsang.le@gmail.com]) AC_INIT([silk], [1.0.0], [xsang.le@gmail.com])
# Were going to use automake for this project # Were going to use automake for this project
# [subdir-objects] if needed # [subdir-objects] if needed

File diff suppressed because it is too large Load Diff

View File

@ -93,8 +93,19 @@ function AssetController:index(...)
end end
function AssetController:get(...) function AssetController:get(...)
local path = WWW_ROOT..DIR_SEP..implode({...}, DIR_SEP) -- check for access in all parent DIR
local DENIEDF = ".DENIED"
local curr_dir = WWW_ROOT
local args = {...}
for i, v in ipairs(explode(args[1], "/")) do
LOG_DEBUG("Checking acess for %s", curr_dir)
if ulib.exists(curr_dir..DIR_SEP..DENIEDF) then
self:error("Access forbidden: "..curr_dir)
return false
end
curr_dir = curr_dir..DIR_SEP..v
end
local path = WWW_ROOT..DIR_SEP..implode(args, DIR_SEP)
if self.registry.fileaccess and ulib.exists(path) then if self.registry.fileaccess and ulib.exists(path) then
local mime = std.mimeOf(path) local mime = std.mimeOf(path)
if POLICY.mimes[mime] then if POLICY.mimes[mime] then

View File

@ -4,7 +4,7 @@ math.randomseed(os.time())
__api__ = { __api__ = {
apiroot = string.format("%s/lua", _SERVER["LIB_DIR"]), apiroot = string.format("%s/lua", _SERVER["LIB_DIR"]),
tmpdir = _SERVER["TMP_DIR"], tmpdir = _SERVER["TMP_DIR"],
dbpath = _SERVER["DB_DIR"] dbpath = "/var/silk"
} }
-- root dir -- root dir
__ROOT__ = _SERVER["DOCUMENT_ROOT"] __ROOT__ = _SERVER["DOCUMENT_ROOT"]

View File

@ -37,10 +37,13 @@ setmetatable(default_mimes, {
end end
}) })
function std.mime(ext) function std.mime(ext)
return default_mimes[ext] return default_mimes[ext:lower()]
end end
function std.extra_mime(name) function std.extra_mime(name)
local ext = utils.ext(name) local ext = utils.ext(name)
if ext then
ext = ext:lower()
end
local mpath = __ROOT__ .. "/" .. "mimes.json" local mpath = __ROOT__ .. "/" .. "mimes.json"
if WWW_ROOT and not ulib.exists(mpath) then if WWW_ROOT and not ulib.exists(mpath) then
LOG_DEBUG("No extra mimes found in %s", mpath) LOG_DEBUG("No extra mimes found in %s", mpath)
@ -79,7 +82,11 @@ function std.mimeOf(name)
if ulib.is_dir(name) then if ulib.is_dir(name) then
return "dir" return "dir"
end end
local mime = std.mime(utils.ext(name)) local ext = utils.ext(name)
if not ext then
return "application/octet-stream", true
end
local mime = std.mime(ext)
if mime ~= "application/octet-stream" then if mime ~= "application/octet-stream" then
return mime return mime
else else

View File

@ -1,5 +1,5 @@
sqlite = require("sqlitedb") sqlite = require("sqlitedb")
ulib = require("ulib")
if sqlite == nil then if sqlite == nil then
return 0 return 0
end end
@ -8,12 +8,34 @@ require("silk.core.OOP")
sqlite.getdb = function(name) sqlite.getdb = function(name)
if name:find("%.db$") then if name:find("%.db$") then
return sqlite.db(name) local db = sqlite.db(name)
if db then
ret,err = ulib.chmod(name,"0600")
if not ret then
LOG_WARN("Unable to change mode of database file %s: %s", name, err)
end
end
return db
elseif name:find("/") then elseif name:find("/") then
LOG_ERROR("Invalid database name %s", name) LOG_ERROR("Invalid database name %s", name)
return nil return nil
else else
return sqlite.db(__api__.dbpath .. "/" .. name .. ".db") -- default db path is /var/silk/
if not ulib.exists(__api__.dbpath) then
if not ulib.mkdir(__api__.dbpath) then
LOG_ERROR("Unable to create DB path: %s", __api__.dbpath)
return nil
end
end
local path = __api__.dbpath .. "/" .. name .. ".db"
local db = sqlite.db(path)
if db then
local ret,err = ulib.chmod(path,"0600")
if not ret then
LOG_WARN("Unable to change mode of database file %s: %s", path)
end
end
return db
end end
end end