srctree

Gregory Mullen parent 7ac3227c dceb293d
convert gist to endpoints

src/endpoints/gist.zig added: 40, removed: 37, total 3
@@ -1,32 +1,20 @@
const std = @import("std");
const allocPrint = std.fmt.allocPrint;
pub const verse_name = .gist;
 
const Verse = @import("verse");
const Template = Verse.template;
const S = Template.Structs;
const RequestData = Verse.RequestData.RequestData;
const Bleach = @import("../bleach.zig");
const Allocator = std.mem.Allocator;
pub const verse_router = &router;
 
const Gist = @import("../types.zig").Gist;
 
const Router = Verse.Router;
const Error = Router.Error;
const POST = Router.POST;
const GET = Router.GET;
 
const GistPage = Template.PageData("gist.html");
const GistNewPage = Template.PageData("gist_new.html");
 
const endpoints = [_]Router.Match{
GET("", new),
const routes = [_]Router.Match{
GET("gist", view),
GET("new", new),
POST("new", post),
POST("post", post),
};
 
pub fn router(ctx: *Verse.Frame) Router.RoutingError!Router.BuildFn {
pub const index = new;
 
const GistPage = template.PageData("gist.html");
const GistNewPage = template.PageData("gist_new.html");
 
pub fn router(ctx: *Frame) Router.RoutingError!Router.BuildFn {
if (!std.mem.eql(u8, ctx.uri.next() orelse "", "gist")) return error.Unrouteable;
 
if (ctx.uri.peek()) |peek| {
@@ -42,7 +30,7 @@ pub fn router(ctx: *Verse.Frame) Router.RoutingError!Router.BuildFn {
}
} else return new;
 
return Router.router(ctx, &endpoints);
return Router.router(ctx, &routes);
}
 
const GistPost = struct {
@@ -51,7 +39,7 @@ const GistPost = struct {
new_file: ?[]const u8,
};
 
fn post(ctx: *Verse.Frame) Error!void {
fn post(ctx: *Frame) Error!void {
//try ctx.auth.requireValid();
 
const udata = RequestData(GistPost).initMap(ctx.alloc, ctx.request.data) catch return error.BadData;
@@ -60,7 +48,7 @@ fn post(ctx: *Verse.Frame) Error!void {
const username = if (ctx.user) |usr| usr.username.? else "public";
 
if (udata.new_file != null) {
const files = try ctx.alloc.alloc(Template.Structs.GistFiles, udata.file_name.len + 1);
const files = try ctx.alloc.alloc(S.GistFiles, udata.file_name.len + 1);
for (files[0 .. files.len - 1], udata.file_name, udata.file_blob) |*file, name, blob| {
file.* = .{
.name = name,
@@ -88,12 +76,12 @@ fn post(ctx: *Verse.Frame) Error!void {
return ctx.redirect("/gist/" ++ hash_str, .see_other) catch unreachable;
}
 
fn new(ctx: *Verse.Frame) Error!void {
const files = [1]Template.Structs.GistFiles{.{}};
fn new(ctx: *Frame) Error!void {
const files = [1]S.GistFiles{.{}};
return edit(ctx, &files);
}
 
fn edit(vrs: *Verse.Frame, files: []const Template.Structs.GistFiles) Error!void {
fn edit(vrs: *Frame, files: []const S.GistFiles) Error!void {
var page = GistNewPage.init(.{
.meta_head = .{
.open_graph = .{
@@ -107,8 +95,8 @@ fn edit(vrs: *Verse.Frame, files: []const Template.Structs.GistFiles) Error!void
return vrs.sendPage(&page);
}
 
fn toTemplate(a: Allocator, files: []const Gist.File) ![]Template.Structs.GistFiles {
const out = try a.alloc(Template.Structs.GistFiles, files.len);
fn toTemplate(a: Allocator, files: []const Gist.File) ![]S.GistFiles {
const out = try a.alloc(S.GistFiles, files.len);
for (files, out) |file, *o| {
o.* = .{
.file_name = try Bleach.Html.sanitizeAlloc(a, file.name),
@@ -118,9 +106,9 @@ fn toTemplate(a: Allocator, files: []const Gist.File) ![]Template.Structs.GistFi
return out;
}
 
fn view(vrs: *Verse.Frame) Error!void {
fn view(vrs: *Frame) Error!void {
// TODO move this back into context somehow
var btns = [1]Template.Structs.NavButtons{.{ .name = "inbox", .extra = 0, .url = "/inbox" }};
var btns = [1]S.NavButtons{.{ .name = "inbox", .extra = 0, .url = "/inbox" }};
 
if (vrs.uri.next()) |hash| {
if (hash.len != 64) return error.BadData;
@@ -146,3 +134,21 @@ fn view(vrs: *Verse.Frame) Error!void {
return vrs.sendPage(&page);
} else return error.Unrouteable;
}
 
const std = @import("std");
const allocPrint = std.fmt.allocPrint;
 
const verse = @import("verse");
const Frame = verse.Frame;
const template = verse.template;
const S = template.Structs;
const RequestData = verse.RequestData.RequestData;
const Bleach = @import("../bleach.zig");
const Allocator = std.mem.Allocator;
 
const Gist = @import("../types.zig").Gist;
 
const Router = verse.Router;
const Error = Router.Error;
const POST = Router.POST;
const GET = Router.GET;
 
src/srctree.zig added: 40, removed: 37, total 3
@@ -17,14 +17,10 @@ const BuildFn = Router.BuildFn;
const commitFlex = @import("endpoints/commit-flex.zig").commitFlex;
 
const Repo = @import("endpoints/repos.zig");
const Search = @import("endpoints/search.zig");
const Settings = @import("endpoints/settings.zig");
const Gist = @import("endpoints/gist.zig");
 
pub const routes = [_]Match{
ROUTE("api", Api.router),
GET("debug", debug),
ROUTE("gist", Gist.router),
//TODO add alias support
//ROUTE("inbox", Search.router),
ROUTE("repo", Repo.router),
@@ -44,6 +40,7 @@ const endpoints = verse.Endpoints(.{
@import("endpoints/network.zig"),
@import("endpoints/search.zig"),
@import("endpoints/settings.zig"),
@import("endpoints/gist.zig"),
});
 
const E404Page = Template.PageData("4XX.html");