@@ -135,7 +135,7 @@ Validator validator_create() {
135135 return new Validator ();
136136}
137137
138- int validator_add (Validator validator, const char *claim, ValidatorFunction validator_func, char **err_msg) {
138+ int validator_add (Validator validator, const char *claim, StringValidatorFunction validator_func, char **err_msg) {
139139 if (validator == nullptr ) {
140140 if (err_msg) {*err_msg = strdup (" Validator may not be a null pointer" );}
141141 return -1 ;
@@ -172,21 +172,82 @@ int validator_add_critical_claims(Validator validator, const char **claims, char
172172}
173173
174174
175- int validator_validate (Validator validator, SciToken scitoken, char **err_msg);
175+ int validator_validate (Validator validator, SciToken scitoken, char **err_msg) {
176+ if (validator == nullptr ) {
177+ if (err_msg) {*err_msg = strdup (" Validator may not be a null pointer" );}
178+ return -1 ;
179+ }
180+ auto real_validator = reinterpret_cast <scitokens::Validator*>(validator);
181+ if (scitoken == nullptr ) {
182+ if (err_msg) {*err_msg = strdup (" SciToken may not be a null pointer" );}
183+ return -1 ;
184+ }
185+ auto real_scitoken = reinterpret_cast <scitokens::SciToken*>(scitoken);
186+
187+ try {
188+ real_validator->verify (*real_scitoken);
189+ } catch (std::exception exc) {
190+ if (err_msg) {*err_msg = strdup (exc.what ());}
191+ return -1 ;
192+ }
193+ return 0 ;
194+ }
176195
177196
178- Enforcer enforcer (const char *issuer, const char **audience) {
179- return nullptr ;
197+ Enforcer enforcer_create (const char *issuer, const char **audience_list, char **err_msg) {
198+ if (issuer == nullptr ) {
199+ if (err_msg) {*err_msg = strdup (" Issuer may not be a null pointer" );}
200+ return nullptr ;
201+ }
202+ std::vector<std::string> aud_list;
203+ if (audience_list != nullptr ) {
204+ for (int idx=0 ; audience_list[idx]; idx++) {
205+ aud_list.push_back (audience_list[idx]);
206+ }
207+ }
208+
209+ return new scitokens::Enforcer (issuer, aud_list);
180210}
181211
212+
213+ void enforcer_destroy (Enforcer enf) {
214+ if (enf == nullptr ) {
215+ return ;
216+ }
217+ auto real_enf = reinterpret_cast <scitokens::Enforcer*>(enf);
218+ delete real_enf;
219+ }
220+
221+
182222int enforcer_generate_acls (const Enforcer enf, const SciToken sci, char **Acl, char **err_msg) {
183223 if (err_msg) {
184224 *err_msg = strdup (" This function is not implemented" );
185225 }
186226 return -1 ;
187227}
188228
189- int enforcer_test (const Enforcer enf, const SciToken sci, const Acl *acl) {
190- return -1 ;
191- }
192229
230+ int enforcer_test (const Enforcer enf, const SciToken scitoken, const Acl *acl, char **err_msg) {
231+ if (enf == nullptr ) {
232+ if (err_msg) {*err_msg = strdup (" Enforcer may not be a null pointer" );}
233+ return -1 ;
234+ }
235+ auto real_enf = reinterpret_cast <scitokens::Enforcer*>(enf);
236+ if (scitoken == nullptr ) {
237+ if (err_msg) {*err_msg = strdup (" SciToken may not be a null pointer" );}
238+ return -1 ;
239+ }
240+ auto real_scitoken = reinterpret_cast <scitokens::SciToken*>(scitoken);
241+ if (acl == nullptr ) {
242+ if (err_msg) {*err_msg = strdup (" ACL may not be a null pointer" );}
243+ return -1 ;
244+ }
245+
246+ try {
247+ return real_enf->test (*real_scitoken, acl->authz , acl->resource ) == true ? 0 : -1 ;
248+ } catch (std::exception exc) {
249+ if (err_msg) {*err_msg = strdup (exc.what ());}
250+ return -1 ;
251+ }
252+ return 0 ;
253+ }
0 commit comments