From 47d6db8cbe043d2c524af68831d236080b1127f4 Mon Sep 17 00:00:00 2001 From: Carlo Landmeter Date: Tue, 17 Mar 2015 09:30:06 +0000 Subject: initial import --- .gitignore | 1 + aports.lua | 134 +++++++++++++++++++++++++++++++++++ assets/alpinelinux-logo.svg | 167 ++++++++++++++++++++++++++++++++++++++++++++ assets/favicon.ico | Bin 0 -> 4286 bytes assets/style.css | 81 +++++++++++++++++++++ tpl/contents.tpl | 45 ++++++++++++ tpl/footer.tpl | 3 + tpl/header.tpl | 50 +++++++++++++ tpl/package.tpl | 56 +++++++++++++++ tpl/packages.tpl | 51 ++++++++++++++ 10 files changed, 588 insertions(+) create mode 100644 .gitignore create mode 100755 aports.lua create mode 100644 assets/alpinelinux-logo.svg create mode 100644 assets/favicon.ico create mode 100644 assets/style.css create mode 100644 tpl/contents.tpl create mode 100644 tpl/footer.tpl create mode 100644 tpl/header.tpl create mode 100644 tpl/package.tpl create mode 100644 tpl/packages.tpl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c39416 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +db/* diff --git a/aports.lua b/aports.lua new file mode 100755 index 0000000..7a3a7d9 --- /dev/null +++ b/aports.lua @@ -0,0 +1,134 @@ +#!/usr/bin/env luajit + +-- lua turbo application + +local turbo = require "turbo" +local inspect = require "inspect" + +local tpl = turbo.web.Mustache.TemplateHelper("./tpl") + +local ContentsRenderer = class("ContentsRenderer", turbo.web.RequestHandler) + +function ContentsRenderer:get() + local table = {} + local args = { + filename = self:get_argument("filename","", true), + arch = self:get_argument("arch", "x86", true), + } + if args.filename ~= "" then + local result = QueryContents(args) + if next(result) ~= nil then + table.rows = result + end + end + table.contents = true + table.filename = args.filename + table.header = tpl:render("header.tpl", table) + table.footer = tpl:render("footer.tpl", table) + local page = tpl:render(self.options, table) + self:write(page) +end + +local PackagesRenderer = class("PackagesRenderer", turbo.web.RequestHandler) + +function PackagesRenderer:get() + local table = {} + local args = { + package = self:get_argument("package","", true) + } + if args.package == "" then + args.package = "%" + end + local result = QueryPackages(args) + if next(result) ~= nil then + table.rows = result + end + table.packages = true + table.header = tpl:render("header.tpl", table) + table.footer = tpl:render("footer.tpl", table) + local page = tpl:render(self.options, table) + self:write(page) + print(inspect(table)) +end + +local PackageRenderer = class("PackageRenderer", turbo.web.RequestHandler) + +function PackageRenderer:get(arch, pkgname) + local fields = {} + local table = {} + fields.arch = arch + fields.pkgname = pkgname + result = QueryPackage(fields) + + if result ~= nil then + table = result + for k in pairs (table) do + if table[k] == "" then + table[k] = nil + end + end + end + table.header = tpl:render("header.tpl") + table.footer = tpl:render("footer.tpl") + local page = tpl:render(self.options, table) + self:write(page) +end + +function QueryContents(terms) + require('DBI') + local dbh = assert(DBI.Connect('SQLite3', 'db/filelist.db')) + local sth = assert(dbh:prepare('select * from filelist where file like ? and arch like ? limit 100')) + sth:execute(terms.filename, terms.arch) + local r = {} + for row in sth:rows(true) do + r[#r + 1] = { + file = "/" .. row.path .. "/" .. row.file, + pkgname = row.pkgname, + repo = row.repo, + arch = row.arch, + } + end + return r + +end +function QueryPackages(terms) + require('DBI') + local dbh = assert(DBI.Connect('SQLite3', 'db/apkindex.db')) + local sth = assert(dbh:prepare('select name, version, url, lic, desc, arch, maintainer, datetime(build_time, \'unixepoch\') as build_time from apkindex where name like ? ORDER BY build_time DESC limit 100')) + sth:execute(terms.package) + local r = {} + for row in sth:rows(true) do + r[#r + 1] = { + package = row.name, + version = row.version, + project = row.url, + license = row.lic, + desc = row.desc, + arch = row.arch, + repo = "unk", + maintainer = string.gsub(row.maintainer, '<.*>', ''), + bdate = row.build_time + } + end + return r +end + +function QueryPackage(fields) + require('DBI') + local dbh = assert(DBI.Connect('SQLite3', 'db/apkindex.db')) + local sth = assert(dbh:prepare('select *, datetime(build_time, \'unixepoch\') as build_time from apkindex where name like ? and arch like ? limit 1')) + sth:execute(fields.pkgname, fields.arch) + local r = {} + r = sth:fetch(true) + print(inspect(r)) + return r +end + +turbo.web.Application({ + {"^/$", turbo.web.RedirectHandler, "/packages"}, + {"^/contents$", ContentsRenderer, "contents.tpl"}, + {"^/packages$", PackagesRenderer, "packages.tpl"}, + {"^/package/(.*)/(.*)$", PackageRenderer, "package.tpl"}, + {"/assets/(.*)$", turbo.web.StaticFileHandler, "assets/"}, +}):listen(8888) +turbo.ioloop.instance():start() diff --git a/assets/alpinelinux-logo.svg b/assets/alpinelinux-logo.svg new file mode 100644 index 0000000..70f2f60 --- /dev/null +++ b/assets/alpinelinux-logo.svg @@ -0,0 +1,167 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/assets/favicon.ico b/assets/favicon.ico new file mode 100644 index 0000000..471bba3 Binary files /dev/null and b/assets/favicon.ico differ diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 0000000..f525dba --- /dev/null +++ b/assets/style.css @@ -0,0 +1,81 @@ +html { + height: 100%; +} + +html, body { + overflow-x: hidden; + margin: 0; + padding: 0; +} + +body { + position: relative; + min-height: 100%; + background: #eee; + margin:auto; + width:80%; +} + + + +header { + border-bottom: 2px solid #17a; + display: inline-block; + width: 100%; + /* fix inline-block auto margin */ + margin-bottom: -4px; +} + +#main { + background: #fff; + padding: 10px; + margin:0px; +} + +form#search { + margin: 10px; +} + +footer { + margin: 10px; + text-align: center; + font-size: 0.8em +} + +img#logo { + width:300px; + float: left; + margin: 1em; + margin-right: 2em; +} + +#sitenav { + float: right; + margin-top: 5em; +} + +#pagenav { + float: left; + margin-top: 3em; + font-weight: bold; +} + +nav a { + padding:3.2em 1em 3.2em; +} + +nav a.active { + background-color: #17a; + color: white; +} + +table { + font-size: 90%; + white-space: nowrap; +} + +/* package */ + +table#package { + width: 60%; + } \ No newline at end of file diff --git a/tpl/contents.tpl b/tpl/contents.tpl new file mode 100644 index 0000000..dc4fe92 --- /dev/null +++ b/tpl/contents.tpl @@ -0,0 +1,45 @@ +{{{header}}} +
+
+
Search the contents of packages
+
+ +
+
+ + + + + + + {{#rows}} + + + + + + {{/rows}} + {{{^rows}}} + + + + {{{/rows}}} +
FilePackage nameRepositoryArchitecture
{{{file}}}{{{pkgname}}}{{{repo}}}{{{arch}}}
No item found...
+
+
+
+{{{footer}}} diff --git a/tpl/footer.tpl b/tpl/footer.tpl new file mode 100644 index 0000000..60e689e --- /dev/null +++ b/tpl/footer.tpl @@ -0,0 +1,3 @@ + + + diff --git a/tpl/header.tpl b/tpl/header.tpl new file mode 100644 index 0000000..fdfdb67 --- /dev/null +++ b/tpl/header.tpl @@ -0,0 +1,50 @@ + + + + + + + Alpine aports fileindex + + + + + + + + + + + + + +
+ + + +
diff --git a/tpl/package.tpl b/tpl/package.tpl new file mode 100644 index 0000000..e25110f --- /dev/null +++ b/tpl/package.tpl @@ -0,0 +1,56 @@ +{{{header}}} +
+
+
Package details
+
+
+ + {{#name}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{#install_if}} + + + + + {{/install_if}} + {{/name}} + {{^name}} + + + + {{/name}} +
Name{{{name}}}
Version{{{version}}}
ProjectURL
Licence{{{lic}}}
Architecture{{{arch}}}
RepositoryRepository
Maintainer{{{maintainer}}}
Build date{{{build_time}}}
Install if{{{install_if}}}
This package does not exist!
+
+
+{{{footer}}} diff --git a/tpl/packages.tpl b/tpl/packages.tpl new file mode 100644 index 0000000..9027858 --- /dev/null +++ b/tpl/packages.tpl @@ -0,0 +1,51 @@ +{{{header}}} +
+
+
Search for packages
+
+ +
+ + + + + + + + + + + {{#rows}} + + + + + + + + + + {{/rows}} + {{{^rows}}} + + + + {{{/rows}}} +
PackageVersionProjectLicenceArchitectureRepositoryMaintainerBuild date
{{{package}}}{{{version}}}URL{{{license}}}{{{arch}}}{{{repo}}}{{{maintainer}}}{{{bdate}}}
No item found...
+
+
+{{{footer}}} -- cgit v1.2.3