Virtuoso Open-Source Edition

VOS.VirtuosoOdsControllersClientApi

  • Topic
  • Discussion
  • VOS.VirtuosoOdsControllersClientApi(Last) -- DAVWikiAdmin? , 2017-06-29 07:43:20 Edit WebDAV System Administrator 2017-06-29 07:43:20

    Simple Client Written in VSP

    <html>
    <?vsp
        declare consumer_key, consumer_secret, oauth_token, oauth_secret, signature, timest, nonce varchar;
        declare srv, res, signature_base, ret_url, url, tmp, sid varchar;
        declare meth, pars any;
        consumer_key := {?'key'};
        srv := sprintf ('http://localhost:%s/OAuth/', server_http_port ());
        sid := null;
        res := '';
    
        sid :=  {?'sid'};
        if (sid = '')
          sid := null;  
        else
          {
            -- if selected token is not same as one from the session we need to get new authentication token
            if (consumer_key <> OAUTH..get_consumer_key (sid))
         {
           OAUTH..session_terminate (sid);
                sid := null;
         }
          }
    
        meth := get_keyword ('meth', params, 'weblog.post.new');;
        pars := get_keyword ('pars', params, 'inst_id=15&title=testing&description=Some test post');;
    
        if ({?'rt'} is not null and sid is null) -- request new token for the session
          {
       url := srv||'request_token';
       url := OAUTH..sign_request ('GET', url, '', consumer_key, sid);
            res := http_get (url);
       sid := OAUTH..parse_response (sid, consumer_key, res);
       OAUTH..set_session_data (sid, params);
       ret_url := sprintf ('http://localhost:%s/oauth/oauth_client.vsp?ready=%U', server_http_port (), sid);
       -- call authorize
            url := sprintf ('%sauthorize?oauth_token=%U&oauth_callback=%U', srv, OAUTH..get_auth_token (sid), ret_url);
       http_status_set (301);
            http_header (sprintf ('Location: %s\r\n', url));
            return;
          }
        else if ({?'ready'} is not null) -- get access token
          {
       -- we go here when token above is authorized
            sid := {?'ready'};
       url := srv||'access_token';
       consumer_key := OAUTH..get_consumer_key (sid);
       url := OAUTH..sign_request ('GET', url, '', consumer_key, sid);
            res := http_get (url);
       sid := OAUTH..parse_response (sid, consumer_key, res);
    
          }
        if (sid is not null) -- access token is ready, and we can call API
          {
            -- here we are ready to call service
       if ({?'rt'} is null)
              {
                tmp := OAUTH..get_session_data (sid);
                pars := get_keyword ('pars', tmp, pars);
           meth := get_keyword ('meth', tmp, meth);
         }
       url := sprintf ('http://localhost:%s/ods/api/%s', server_http_port (), meth);
       tmp := split_and_decode (pars);
       params := '';
       for (declare i,l int, l:=length (tmp); i < l; i := i + 2)
          {
            params := params || sprintf ('%U=%U&', tmp[i], tmp[i+1]);
          }
       --params := sprintf ('inst_id=%d&description=%U&title=%U', 15, 'Some test post', 'testing');
       consumer_key := OAUTH..get_consumer_key (sid);
       url := OAUTH..sign_request ('GET', url, params, consumer_key, sid);
            res := http_get (url);
            --dbg_obj_print (res);
          }
    ?>
        <head><title>OAuth Client</title></head>
        <body>
       <h1>OAuth client for ODS Controllers</h1>
       <form method="POST" action="oauth_client.vsp">
       <input type="hidden" name="sid" value="<?V sid ?>"/>
       APPLICATION : <br/> <select name="key">
       <?vsp for select a_name, a_key from OAUTH..APP_REG do { ?>
                <option value="<?V a_key ?>" <?vsp if (consumer_key = a_key) http ('selected'); ?>><?V a_name ?></option>
       <?vsp } ?>
                  </select>
       <?vsp
       if (sid is not null) http (sprintf (' TOKEN: %s', OAUTH..get_auth_token (sid)));
       ?>
       <br/>
       ODS API: <br/><input type="text" name="meth" value="<?V meth ?>" size=50/> <br/>
       PARAMETERS: <br/> <textarea name="pars" rows="5" cols="50"><?V pars ?></textarea> <br/>
            <input type="submit" value="Execute" name="rt"/><br/>
       </form>
       RESULT:
       <hr/>
       <pre><?V res ?></pre>
        </body>
    </html>