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
|
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
|
+
+
+
+
+
+
+
-
+
+
-
-
+
+
+
+
-
-
+
+
+
|
#include "json_detail.h"
#endif
/*
** Internal callback for /json/artifact handlers. rid refers to
** the rid of a given type of artifact, and each callback is
** specialized to return a JSON form of one type of artifact.
**
** Implementations may assert() that rid refers to requested artifact
** type, since mismatches in the artifact types come from
** json_page_artifact() as opposed to client data.
*/
typedef cson_value * (*artifact_f)( int rid );
/*
** Internal per-artifact-type dispatching helper.
*/
typedef struct ArtifactDispatchEntry {
/**
Artifact type name, e.g. "checkin".
Artifact type name, e.g. "checkin", "ticket", "wiki".
*/
char const * name;
/**
JSON construction callback.
*/
JSON construction callback. Creates the contents for the
payload.artifact property of /json/artifact responses.
*/
artifact_f func;
/**
Must return true if g.perm has the proper permissions to fetch
this info, else false. If it returns false, func() is skipped
(producing no extra payload output).
*/
(producing no extra payload output) and an access error is
generated.
*/
char (*permCheck)();
} ArtifactDispatchEntry;
/*
** Generates an artifact Object for the given rid/zUuid. rid
** must refer to a Checkin.
|
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
-
+
|
SET("originTime",json_new_int(omtime));
}
if(zParent){
SET("parentUuid", json_new_string(zParent));
}
tmpV = json_tags_for_rid(rid);
tmpV = json_tags_for_rid(rid,0);
if(tmpV){
SET("tags",tmpV);
}
if( showFiles ){
cson_value * fileList = json_get_changed_files(rid);
if(fileList){
|
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
+
+
+
|
/*
** Sub-impl of /json/artifact for checkins.
*/
static cson_value * json_artifact_ci( int rid ){
return json_artifact_for_ci(rid, 1);
}
/*
** Permissions callback func for ArtifactDispatchEntry.
*/
static char perms_can_read(){
return g.perm.Read ? 1 : 0;
}
static ArtifactDispatchEntry ArtifactDispatchList[] = {
{"checkin", json_artifact_ci, perms_can_read},
{"tag", NULL, perms_can_read},
|