-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOLD.html
108 lines (108 loc) · 5.03 KB
/
COLD.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>COLD (Controlled Object List and Datum (Concept))</title>
<link rel="stylesheet" href="/css/site.css">
</head>
<body>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="index.html">README</a></li>
<li><a href="LICENSE">LICENSE</a></li>
<li><a href="INSTALL.html">INSTALL</a></li>
<li><a href="user_manual.html">User Manual</a></li>
<li><a href="about.html">About</a></li>
<li><a href="search.html">Search</a></li>
<li><a href="https://github.com/caltechlibrary/cold">GitHub</a></li>
</ul>
</nav>
<section>
<h1 id="cold---controlled-object-lists-with-dataset">cold - (c)ontrolled
(o)bject (l)ists with (D)ataset</h1>
<h2 id="overview">Overview</h2>
<p>Caltech Library maintains a list of people, groups and funders and
their related identifiers. For many years these were managed using a
spreadsheets. That has become cumbersome. <strong>COLD</strong> manages
data as JSON objects in <a
href="https://github.com/caltechlibrary/dataset">dataset</a>
collections. TypeScript provides a middleware for the user interface
with datasetd providing object management. The front end web server
provides access control (e.g. via Shibboleth).</p>
<p>COLD is no longer limited to rows and columns so data models can
evolve as needed.</p>
<h2 id="implementation">Implementation</h2>
<p>This repository implements COLD, a web application for curating
object lists. It is built using TypeScript and Deno. It requires the
JSON API provided by <a
href="https://github.com/caltechlibrary/dataset">datasetd</a>.</p>
<p>Your front end web server (e.g. Apache 2 + Shibboleth) must to be
configure to reverse proxy the cold services. <strong>The front end web
server is responsible for access control.</strong> Ideally your front
end web server software (e.g. Apache2, NginX , Lighttpd) is configured
with a a single sign-on implementation like Shibboleth. For development
services you can just use basic auth for access control testing.</p>
<p>In development TypeScript based services can be run via Deno tasks.
In a <a href="deployment.html">deployed setting</a> you should run the
Deno tasks <code>cold_api</code>, <code>cold</code>,
<code>cold_reports</code> and run it along with <code>datasetd</code>
under systemd or other daemon manage system (e.g. macOS launchd).</p>
<h2 id="details">Details</h2>
<ul>
<li><p><strong>cold_api</strong> is Deno tasks that runs the localhost
JSON API service. It is implemented as a Datasetd API using
[cold_api.yaml].</p></li>
<li><p><strong>cold</strong> is a localhost web service implemented with
Deno. It provides some proxing to Dataset collections via
<code>datasetd</code>. <code>datasetd</code>. It provided both static
file services, access to dataset collections as well as the ability to
query the collections. Dynamic pages use <a
href="https://handlerbarsjs.com">handlerbars</a> templates, each with
their own “view” template hierarchies.</p></li>
<li><p><strong>cold_reports</strong> is a Deno task,
<code>cold_reports</code>. It is to workwith the
<strong>cold_api</strong> and <strong>cold</strong> tasks. It runs as
it’s own daemon.</p></li>
<li><p><strong>datasetd</strong> is part of the <a
href="https://github.com/caltechlibrary/dataset">Dataset</a> project. It
provides the JSON API needed to curate the objects in a dataset
collection.</p></li>
<li><p><strong>directory_sync</strong> is build as TypeScript command
line program suitable to be run from a cronjob. It is responsible for
updating Caltech People data from the Caltech directory.</p></li>
</ul>
<p>Public content access is through files exported to our <a
href="https://feeds.library.caltech.edu">Feeds</a> system. Deno is used
to managed tasks that export content to it.</p>
<p><strong>An important point COLD’s access control is deferred to the
front end web server (e.g. Apache2+Shibboleth).</strong></p>
<h2 id="build-requirements">Build Requirements</h2>
<ul>
<li>Dataset >= 2.1.23 (using SQL JSON storage)</li>
<li>The following are required to build the UI and compile the assets
needed by <strong>COLD</strong>
<ul>
<li>Deno >= 2.2.2</li>
<li>GNU Make</li>
<li>CMTools >= 0.0.18</li>
<li><a href="https://pandoc.org">Pandoc</a> >= 3.1 (to build
documentation and man page)</li>
<li>A text editor (e.g. Zed, VSCode, micro, nano, vi, emacs …)</li>
</ul></li>
<li>A front end web server with SSO or Basic Auth (e.g. during
development) support</li>
<li>A web browser with JavaScript support enabled</li>
</ul>
<p>For development purposes the required software is enough, when
deployed to the public internet you <strong>MUST</strong> use a front
end web server to enforce access controls.</p>
<p>See <a href="user_manual.html">user manual</a> for more details.</p>
</section>
<footer>
<span>© 2025 <a href="https://www.library.caltech.edu/copyright">Caltech Library</a></span>
<address>1200 E California Blvd, Mail Code 1-32, Pasadena, CA 91125-3200</address>
<span><a href="mailto:[email protected]">Email Us</a></span>
<span>Phone: <a href="tel:+1-626-395-3405">(626)395-3405</a></span>
</footer>
</body>
</html>