@@ -52,6 +52,15 @@ XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
52
52
</Routes >
53
53
}
54
54
55
+ ClassMethod OnPreDispatch (pUrl As %String , pMethod As %String , ByRef pContinue As %Boolean ) As %Status
56
+ {
57
+ If ($$$lcase(pMethod )=" options" ),(1 =$MATCH (pUrl ," ^/packages/[^/]+/[^/]+/?$" )) {
58
+ Set pContinue = 0
59
+ Return ..OptionsPackageVersion ($PIECE (pUrl ," /" ,3 ),$PIECE (pUrl ," /" ,4 ))
60
+ }
61
+ Return ##super (pUrl , pMethod , .pContinue )
62
+ }
63
+
55
64
/// Package Manager general information
56
65
ClassMethod GetInfo () As %Status
57
66
{
@@ -169,6 +178,21 @@ ClassMethod PackageInstaller(pkg As %String = "", version As %String = "") As %S
169
178
Return ..ReportHttpStatusCode (..#HTTP404NOTFOUND)
170
179
}
171
180
181
+ /// get available HTTP methods for /packages/:package/:version request
182
+ ClassMethod OptionsPackageVersion (pkg As %String = " " , version As %String = " " ) As %Status
183
+ {
184
+ Set options = " OPTIONS,GET"
185
+ Set settingsFile = ##class (ZPM.Settings ).%New ()
186
+ Set tSCAuth = ##class (ZPM.Owner ).IsAuth ()
187
+ Set pkg = $$$lcase(pkg )
188
+ Set tSCOwner = ##class (ZPM.Owner ).IsOwner (pkg )
189
+ If $$$ISOK(tSCAuth ),$$$ISOK(tSCOwner ),settingsFile .GetDeleteEnable () {
190
+ Set options = options _" ,DELETE"
191
+ }
192
+ Do %response .SetHeader (" ALLOW" ,options )
193
+ Return $$$OK
194
+ }
195
+
172
196
/// Unpublish (delete) directly published package version
173
197
ClassMethod UnPublishPackageVersion (pkg As %String = " " , version As %String = " " ) As %Status
174
198
{
0 commit comments