You are viewing a plain text version of this content. The canonical link for it is here.
Posted to legal-discuss@apache.org by "seba.wagner@gmail.com" <se...@gmail.com> on 2012/05/18 09:22:34 UTC

OAuth2 license compatible with Apache License

Dear Legal team,

could you check if the License of OAuth2 (see attached conversation) is
compatible with Apache License? It seems to be however as it does directly
refer to any of the licenses from category-a (
http://www.apache.org/legal/resolved.html#category-a ), could you review it?

Thanks!
Sebastian


2012/5/18 German Grekhov <ge...@gmail.com>

> Here is the OAuth2 library license:
>
> =================================================
>
> Copyright (c) 2010 VZnet Netzwerke Ltd.
>
> Permission is hereby granted, free of charge, to any person obtaining a
> copy of this software and associated documentation files (the "Software"),
> to deal in the Software without restriction, including without limitation
> the rights to use, copy, modify, merge, publish, distribute, sublicense,
> and/or sell copies of the Software, and to permit persons to whom the
> Software is furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> DEALINGS IN THE SOFTWARE.
> =================================================
>
> I think that is it compatible with any other licenses. Am I right?
>
> German.
>
> 2012/5/18 Maxim Solodovnik <so...@gmail.com>
>
> > hi,
> >
> > you need to check if "Copyright (c) 2010 VZnet Netzwerke" is compatible
> > with Apache license and add Apache license to other source files
> >
> > On Fri, May 18, 2012 at 11:13 AM, <gg...@apache.org> wrote:
> >
> > > Author: ggrekhov
> > > Date: Fri May 18 04:13:44 2012
> > > New Revision: 1339968
> > >
> > > URL: http://svn.apache.org/viewvc?rev=1339968&view=rev
> > > Log:
> > > TeamBox plugin
> > >
> > > Added:
> > >    incubator/openmeetings/trunk/plugins/teambox/
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/Client.php
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore.php
> > >
> > >
> >
>  incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/Session.php
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/Exception.php
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/HttpClient.php
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service.php
> > >
> > >
> >
>  incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/Configuration.php
> > >    incubator/openmeetings/trunk/plugins/teambox/OAuth2/Token.php
> > >    incubator/openmeetings/trunk/plugins/teambox/Readme.txt   (with
> props)
> > >    incubator/openmeetings/trunk/plugins/teambox/config/
> > >    incubator/openmeetings/trunk/plugins/teambox/config/.htaccess
> (with
> > > props)
> > >    incubator/openmeetings/trunk/plugins/teambox/config/settings.ini
> > >    incubator/openmeetings/trunk/plugins/teambox/css/
> > >    incubator/openmeetings/trunk/plugins/teambox/css/index.css   (with
> > > props)
> > >    incubator/openmeetings/trunk/plugins/teambox/index.php
> > >    incubator/openmeetings/trunk/plugins/teambox/oauthLogin.php
> > >    incubator/openmeetings/trunk/plugins/teambox/openmeetings.js   (with
> > > props)
> > >    incubator/openmeetings/trunk/plugins/teambox/rest_lib/
> > >
> > >
> >
>  incubator/openmeetings/trunk/plugins/teambox/rest_lib/OpenMeetingsRestService.php
> > >
>  incubator/openmeetings/trunk/plugins/teambox/rest_lib/RestService.php
> > >
> > >
> >
>  incubator/openmeetings/trunk/plugins/teambox/rest_lib/TeamBoxRestService.php
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/OAuth2/Client.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/Client.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/Client.php
> > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/Client.php Fri
> > May
> > > 18 04:13:44 2012
> > > @@ -0,0 +1,80 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +class Client
> > > +{
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_clientKey;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_clientSecret;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_callbackUrl;
> > > +
> > > +    /**
> > > +     *
> > > +     * @param string $clientKey
> > > +     * @param string $clientSecret
> > > +     * @param string $callbackUrl
> > > +     */
> > > +    public function __construct($clientKey, $clientSecret,
> > $callbackUrl) {
> > > +        $this->_clientKey = $clientKey;
> > > +        $this->_clientSecret = $clientSecret;
> > > +        $this->_callbackUrl = $callbackUrl;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getClientKey() {
> > > +        return $this->_clientKey;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getClientSecret() {
> > > +        return $this->_clientSecret;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getCallbackUrl() {
> > > +        return $this->_callbackUrl;
> > > +    }
> > > +}
> > >
> > > Added:
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore.php
> > > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore.php
> Fri
> > > May 18 04:13:44 2012
> > > @@ -0,0 +1,42 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +interface DataStore
> > > +{
> > > +    /**
> > > +     * @param \OAuth2\Token $token
> > > +     */
> > > +    function storeAccessToken(Token $token);
> > > +
> > > +    /**
> > > +     * @return \OAuth2\Token
> > > +     */
> > > +    function retrieveAccessToken();
> > > +}
> > >
> > > Added:
> > >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/Session.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/Session.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/Session.php
> > > (added)
> > > +++
> > >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/DataStore/Session.php
> > > Fri May 18 04:13:44 2012
> > > @@ -0,0 +1,58 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2\DataStore;
> > > +
> > > +use OAuth2\DataStore;
> > > +use OAuth2\Token;
> > > +
> > > +class Session implements DataStore
> > > +{
> > > +    public function __construct() {
> > > +        session_start();
> > > +    }
> > > +
> > > +    /**
> > > +     *
> > > +     * @return \OAuth2\Token
> > > +     */
> > > +    public function retrieveAccessToken() {
> > > +        return isset($_SESSION['oauth2_token']) ?
> > > $_SESSION['oauth2_token'] : new Token();
> > > +    }
> > > +
> > > +    /**
> > > +     * @param \OAuth2\Token $token
> > > +     */
> > > +    public function storeAccessToken(Token $token) {
> > > +        $_SESSION['oauth2_token'] = $token;
> > > +    }
> > > +
> > > +    public function  __destruct() {
> > > +        session_write_close();
> > > +    }
> > > +}
> > >
> > > Added:
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/Exception.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/Exception.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/Exception.php
> > > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/Exception.php
> Fri
> > > May 18 04:13:44 2012
> > > @@ -0,0 +1,31 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +class Exception extends \Exception {}
> > >
> > > Added:
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/HttpClient.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/HttpClient.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/HttpClient.php
> > > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/HttpClient.php
> > Fri
> > > May 18 04:13:44 2012
> > > @@ -0,0 +1,180 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +class HttpClient
> > > +{
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_url;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_method;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_parameters;
> > > +
> > > +    /**
> > > +     * @var array
> > > +     */
> > > +    private $_requestHeader;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_response;
> > > +
> > > +    /**
> > > +     * @var array
> > > +     */
> > > +    private $_headers;
> > > +
> > > +    /**
> > > +     * @var array
> > > +     */
> > > +    private $_info;
> > > +
> > > +    /**
> > > +     * @var boolean
> > > +     */
> > > +    private $_debug = false;
> > > +
> > > +    /**
> > > +     * @param string $url
> > > +     * @param string $method
> > > +     * @param string $parameters
> > > +     * @param array $header  any additional header which should be set
> > > +     */
> > > +    public function __construct($url, $method, $parameters = null,
> array
> > > $header = array()) {
> > > +        $this->_url = $url;
> > > +        $this->_method = $method;
> > > +        $this->_parameters = $parameters;
> > > +        $this->_requestHeader = $header;
> > > +    }
> > > +
> > > +    /**
> > > +     * parses a string with two delimiters to an array
> > > +     *
> > > +     * example:
> > > +     *
> > > +     * param1=value1&param2=value2
> > > +     *
> > > +     * will result with delimiters & and = to
> > > +     *
> > > +     * array(
> > > +     *   'param1' => 'value1',
> > > +     *   'param2' => 'value2',
> > > +     * )
> > > +     *
> > > +     * @param string $string
> > > +     * @param string $firstDelimiter
> > > +     * @param string $secondDelimiter
> > > +     * @return array
> > > +     */
> > > +    public static function parseStringToArray($string,
> $firstDelimiter,
> > > $secondDelimiter) {
> > > +        $resultArray = array();
> > > +        $parts = explode($firstDelimiter, $string);
> > > +        foreach ($parts as $part) {
> > > +            $partsPart = explode($secondDelimiter, $part);
> > > +            $resultArray[$partsPart[0]] = isset($partsPart[1]) ?
> > > trim($partsPart[1]) : '';
> > > +        }
> > > +        return $resultArray;
> > > +    }
> > > +
> > > +    /**
> > > +     * executes the curl request
> > > +     */
> > > +    public function execute() {
> > > +        $ch = curl_init();
> > > +
> > > +        if ($this->_method === 'POST') {
> > > +            curl_setopt($ch, CURLOPT_URL, $this->_url);
> > > +            curl_setopt($ch, CURLOPT_POST, 1);
> > > +            curl_setopt($ch, CURLOPT_POSTFIELDS, $this->_parameters);
> > > +        } else {
> > > +            curl_setopt($ch, CURLOPT_URL, $this->_url .
> > > ($this->_parameters ? '?' . $this->_parameters : ''));
> > > +        }
> > > +
> > > +        curl_setopt($ch, CURLOPT_HEADER, 1);
> > > +        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
> > > +
> > > +        if (! empty($this->_requestHeader)) {
> > > +            curl_setopt($ch, CURLOPT_HTTPHEADER,
> $this->_requestHeader);
> > > +        }
> > > +
> > > +        $fullResponse = curl_exec($ch);
> > > +        $this->_info = curl_getinfo($ch);
> > > +
> > > +        $this->_response = substr($fullResponse,
> > > $this->_info['header_size'], strlen($fullResponse));
> > > +        if ($this->_response === false) {
> > > +            $this->_response = '';
> > > +        }
> > > +        $headers = rtrim(substr($fullResponse, 0,
> > > $this->_info['header_size']));
> > > +
> > > +        $this->_headers = static::parseStringToArray($headers,
> PHP_EOL,
> > > ':');
> > > +
> > > +        if ($this->_debug) {
> > > +            echo "<pre>";
> > > +            print_r($this->_url);
> > > +            echo PHP_EOL;
> > > +            print_r($this->_headers);
> > > +            echo PHP_EOL;
> > > +            print_r($this->_response);
> > > +            echo "</pre>";
> > > +        }
> > > +
> > > +        curl_close($ch);
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getResponse() {
> > > +        return $this->_response;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return array
> > > +     */
> > > +    public function getHeaders() {
> > > +        return $this->_headers;
> > > +    }
> > > +
> > > +    /**
> > > +     * @param boolean $debug
> > > +     */
> > > +    public function setDebug($debug) {
> > > +        $this->_debug = $debug;
> > > +    }
> > > +}
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service.php
> > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service.php Fri
> > > May 18 04:13:44 2012
> > > @@ -0,0 +1,257 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +class Service
> > > +{
> > > +    /**
> > > +     * @var \OAuth2\Client
> > > +     */
> > > +    private $_client;
> > > +
> > > +    /**
> > > +     * @var \OAuth2\Service\Configuration
> > > +     */
> > > +    private $_configuration;
> > > +
> > > +    /**
> > > +     * @var \OAuth2\DataStore
> > > +     */
> > > +    private $_dataStore;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_scope;
> > > +
> > > +    /**
> > > +     * @param \OAuth2\Client $client
> > > +     * @param \OAuth2\Service\Configuration $configuration
> > > +     * @param \OAuth2\DataStore $dataStore
> > > +     * @param string $scope optional
> > > +     */
> > > +    public function  __construct(Client $client,
> > > +            Service\Configuration $configuration,
> > > +            DataStore $dataStore,
> > > +            $scope = null) {
> > > +        $this->_client = $client;
> > > +        $this->_configuration = $configuration;
> > > +        $this->_dataStore = $dataStore;
> > > +        $this->_scope = $scope;
> > > +    }
> > > +
> > > +    /**
> > > +     * redirect to authorize endpoint of service
> > > +     */
> > > +    public function authorize() {
> > > +        $parameters = array(
> > > +            'type' => 'web_server',
> > > +            'client_id' => $this->_client->getClientKey(),
> > > +            'redirect_uri' => $this->_client->getCallbackUrl(),
> > > +            'response_type' => 'code',
> > > +        );
> > > +        if ($this->_scope) {
> > > +            $parameters['scope'] = $this->_scope;
> > > +        }
> > > +
> > > +        $url = $this->_configuration->getAuthorizeEndpoint();
> > > +        $url .= (strpos($url, '?') !== false ? '&' : '?') .
> > > http_build_query($parameters);
> > > +
> > > +        header('Location: ' . $url);
> > > +        die();
> > > +    }
> > > +
> > > +    /**
> > > +     * get access token of from service, has to be called after
> > > successful authorization
> > > +     *
> > > +     * @param string $code optional, if no code given method tries to
> > get
> > > it out of $_GET
> > > +     */
> > > +    public function getAccessToken($code = null) {
> > > +        if (! $code) {
> > > +            if (! isset($_GET['code'])) {
> > > +                throw new Exception('could not retrieve code out of
> > > callback request and no code given');
> > > +            }
> > > +            $code = $_GET['code'];
> > > +        }
> > > +
> > > +        $parameters = array(
> > > +            'grant_type' => 'authorization_code',
> > > +            'type' => 'web_server',
> > > +            'client_id' => $this->_client->getClientKey(),
> > > +            'client_secret' => $this->_client->getClientSecret(),
> > > +            'redirect_uri' => $this->_client->getCallbackUrl(),
> > > +            'code' => $code,
> > > +        );
> > > +
> > > +        if ($this->_scope) {
> > > +            $parameters['scope'] = $this->_scope;
> > > +        }
> > > +
> > > +        $http = new
> > > HttpClient($this->_configuration->getAccessTokenEndpoint(), 'POST',
> > > http_build_query($parameters));
> > > +        //$http->setDebug(true);
> > > +        $http->execute();
> > > +
> > > +        $this->_parseAccessTokenResponse($http);
> > > +    }
> > > +
> > > +    /**
> > > +     * refresh access token
> > > +     *
> > > +     * @param \OAuth2\Token $token
> > > +     * @return \OAuth2\Token new token object
> > > +     */
> > > +    public function refreshAccessToken(Token $token) {
> > > +        if (! $token->getRefreshToken()) {
> > > +            throw new Exception('could not refresh access token, no
> > > refresh token available');
> > > +        }
> > > +
> > > +        $parameters = array(
> > > +            'grant_type' => 'refresh_token',
> > > +            'type' => 'web_server',
> > > +            'client_id' => $this->_client->getClientKey(),
> > > +            'client_secret' => $this->_client->getClientSecret(),
> > > +            'refresh_token' => $token->getRefreshToken(),
> > > +        );
> > > +
> > > +        $http = new
> > > HttpClient($this->_configuration->getAccessTokenEndpoint(), 'POST',
> > > http_build_query($parameters));
> > > +        $http->execute();
> > > +
> > > +        return $this->_parseAccessTokenResponse($http,
> > > $token->getRefreshToken());
> > > +    }
> > > +
> > > +    /**
> > > +     * parse the response of an access token request and store it in
> > > dataStore
> > > +     *
> > > +     * @param \OAuth2\HttpClient $http
> > > +     * @param string $oldRefreshToken
> > > +     * @return \OAuth2\Token
> > > +     */
> > > +    private function _parseAccessTokenResponse(HttpClient $http,
> > > $oldRefreshToken = null) {
> > > +        $headers = $http->getHeaders();
> > > +        $type = 'text';
> > > +        if (isset($headers['Content-Type']) &&
> > > strpos($headers['Content-Type'], 'application/json') !== false) {
> > > +            $type = 'json';
> > > +        }
> > > +
> > > +        switch ($type) {
> > > +            case 'json':
> > > +                $response = json_decode($http->getResponse(), true);
> > > +                break;
> > > +            case 'text':
> > > +            default:
> > > +                $response =
> > > HttpClient::parseStringToArray($http->getResponse(), '&', '=');
> > > +                break;
> > > +        }
> > > +
> > > +        if (isset($response['error'])) {
> > > +            throw new Exception('got error while requesting access
> > token:
> > > ' . $response['error']);
> > > +        }
> > > +        if (! isset($response['access_token'])) {
> > > +            throw new Exception('no access_token found');
> > > +        }
> > > +
> > > +        $token = new Token($response['access_token'],
> > > +                isset($response['refresh_token']) ?
> > > $response['refresh_token'] : $oldRefreshToken,
> > > +                isset($response['expires_in']) ?
> $response['expires_in']
> > > : null);
> > > +
> > > +        unset($response['access_token']);
> > > +        unset($response['refresh_token']);
> > > +        unset($response['expires_in']);
> > > +
> > > +        // add additional parameters which may be returned depending
> on
> > > service and scope
> > > +        foreach ($response as $key => $value) {
> > > +            $token->{'set' . $key}($value);
> > > +        }
> > > +
> > > +        $this->_dataStore->storeAccessToken($token);
> > > +
> > > +        return $token;
> > > +    }
> > > +
> > > +    /**
> > > +     * call an api endpoint. automatically adds needed authorization
> > > headers with access token or parameters
> > > +     *
> > > +     * @param string $endpoint
> > > +     * @param string $method default 'GET'
> > > +     * @param array $uriParameters optional
> > > +     * @param mixed $postBody optional, can be string or array
> > > +     * @param array $additionalHeaders
> > > +     * @return string
> > > +     */
> > > +    public function callApiEndpoint($endpoint, $method = 'GET', array
> > > $uriParameters = array(), $postBody = null, array $additionalHeaders =
> > > array()) {
> > > +        $token = $this->_dataStore->retrieveAccessToken();
> > > +
> > > +        //check if token is invalid
> > > +        if ($token->getLifeTime() && $token->getLifeTime() < time()) {
> > > +            $token = $this->refreshAccessToken($token);
> > > +        }
> > > +
> > > +        $parameters = null;
> > > +
> > > +        $authorizationMethod =
> > > $this->_configuration->getAuthorizationMethod();
> > > +
> > > +        switch ($authorizationMethod) {
> > > +            case Service\Configuration::AUTHORIZATION_METHOD_HEADER:
> > > +                $additionalHeaders = array_merge(array('Authorization:
> > > OAuth ' . $token->getAccessToken()), $additionalHeaders);
> > > +                break;
> > > +            case
> > Service\Configuration::AUTHORIZATION_METHOD_ALTERNATIVE:
> > > +                if ($method !== 'GET') {
> > > +                    if (is_array($postBody)) {
> > > +                        $postBody['oauth_token'] =
> > > $token->getAccessToken();
> > > +                    } else {
> > > +                        $postBody .= '&oauth_token=' .
> > > urlencode($token->getAccessToken());
> > > +                    }
> > > +                } else {
> > > +                    $uriParameters['oauth_token'] =
> > > $token->getAccessToken();
> > > +                }
> > > +                break;
> > > +            default:
> > > +                throw new Exception("Invalid authorization method
> > > specified");
> > > +                break;
> > > +        }
> > > +
> > > +        if ($method !== 'GET') {
> > > +            if (is_array($postBody)) {
> > > +                $parameters = http_build_query($postBody);
> > > +            } else {
> > > +                $parameters = $postBody;
> > > +            }
> > > +        }
> > > +
> > > +        if (! empty($uriParameters)) {
> > > +            $endpoint .= (strpos($endpoint, '?') !== false ? '&' :
> '?')
> > .
> > > http_build_query($uriParameters);
> > > +        }
> > > +
> > > +
> > > +        $http = new HttpClient($endpoint, $method, $parameters,
> > > $additionalHeaders);
> > > +        $http->execute();
> > > +
> > > +        return $http->getResponse();
> > > +    }
> > > +}
> > >
> > > Added:
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/Configuration.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/Configuration.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/Configuration.php
> > > (added)
> > > +++
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/OAuth2/Service/Configuration.php
> > > Fri May 18 04:13:44 2012
> > > @@ -0,0 +1,88 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2\Service;
> > > +
> > > +class Configuration
> > > +{
> > > +    const AUTHORIZATION_METHOD_HEADER = 1;
> > > +    const AUTHORIZATION_METHOD_ALTERNATIVE = 2;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_authorizeEndpoint;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_accessTokenEndpoint;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_authorizationMethod = self::AUTHORIZATION_METHOD_HEADER;
> > > +
> > > +    /**
> > > +     * @param string $authorizeEndpoint
> > > +     * @param string $accessTokenEndpoint
> > > +     */
> > > +    public function __construct($authorizeEndpoint,
> > $accessTokenEndpoint)
> > > {
> > > +        $this->_authorizeEndpoint = $authorizeEndpoint;
> > > +        $this->_accessTokenEndpoint = $accessTokenEndpoint;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getAuthorizeEndpoint() {
> > > +        return $this->_authorizeEndpoint;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getAccessTokenEndpoint() {
> > > +        return $this->_accessTokenEndpoint;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function setAuthorizationMethod($authorizationMethod) {
> > > +         $this->_authorizationMethod = $authorizationMethod;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getAuthorizationMethod() {
> > > +        return $this->_authorizationMethod;
> > > +    }
> > > +
> > > +}
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/OAuth2/Token.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/OAuth2/Token.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/OAuth2/Token.php
> (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/OAuth2/Token.php Fri
> May
> > > 18 04:13:44 2012
> > > @@ -0,0 +1,119 @@
> > > +<?php
> > > +/**
> > > + * Copyright (c) 2010 VZnet Netzwerke Ltd.
> > > + *
> > > + * Permission is hereby granted, free of charge, to any person
> obtaining
> > > a copy
> > > + * of this software and associated documentation files (the
> "Software"),
> > > to deal
> > > + * in the Software without restriction, including without limitation
> the
> > > rights
> > > + * to use, copy, modify, merge, publish, distribute, sublicense,
> and/or
> > > sell
> > > + * copies of the Software, and to permit persons to whom the Software
> is
> > > + * furnished to do so, subject to the following conditions:
> > > + *
> > > + * The above copyright notice and this permission notice shall be
> > > included in
> > > + * all copies or substantial portions of the Software.
> > > + *
> > > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > > EXPRESS OR
> > > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > > MERCHANTABILITY,
> > > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
> > > SHALL THE
> > > + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
> > OTHER
> > > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> > > ARISING FROM,
> > > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> > DEALINGS
> > > IN
> > > + * THE SOFTWARE.
> > > + *
> > > + * @author    Bastian Hofmann <bh...@vz.net>
> > > + * @author    Vyacheslav Slinko <vy...@gmail.com>
> > > + * @copyright 2010 VZnet Netzwerke Ltd.
> > > + * @license   http://www.opensource.org/licenses/mit-license.html MIT
> > > License
> > > + */
> > > +
> > > +namespace OAuth2;
> > > +
> > > +class Token
> > > +{
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_accessToken;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_refreshToken;
> > > +
> > > +    /**
> > > +     * @var string
> > > +     */
> > > +    private $_lifeTime;
> > > +
> > > +    /**
> > > +     * @var array
> > > +     */
> > > +    private $_additionalParams = array();
> > > +    /**
> > > +     *
> > > +     * @param string $accessToken
> > > +     * @param string $refreshToken
> > > +     * @param int $lifeTime
> > > +     */
> > > +    public function __construct($accessToken = null, $refreshToken =
> > > null, $lifeTime = null) {
> > > +        $this->_accessToken = $accessToken;
> > > +        $this->_refreshToken = $refreshToken;
> > > +        if ($lifeTime) {
> > > +            $this->_lifeTime = ((int)$lifeTime) + time();
> > > +        }
> > > +    }
> > > +
> > > +    /**
> > > +     * magic method for setting and getting additional parameters
> > > returned from
> > > +     * service
> > > +     *
> > > +     * e.g. user_id parameter with scope openid
> > > +     *
> > > +     * @param string $name
> > > +     * @param array $arguments
> > > +     * @return mixed
> > > +     */
> > > +    public function __call($name, $arguments) {
> > > +        if (strlen($name) < 4) {
> > > +            throw new Exception('undefined magic method called');
> > > +        }
> > > +        $method = substr($name, 0, 3);
> > > +        $param  = substr($name, 3);
> > > +        switch ($method) {
> > > +            case 'get':
> > > +                if (! isset($this->_additionalParams[$param])) {
> > > +                    throw new Exception($param . ' was not returned by
> > > service');
> > > +                }
> > > +                return $this->_additionalParams[$param];
> > > +            case 'set':
> > > +                if (! array_key_exists(0, $arguments)) {
> > > +                    throw new Exception('magic setter has no
> argument');
> > > +                }
> > > +                $this->_additionalParams[$param] = $arguments[0];
> > > +                break;
> > > +            default:
> > > +                throw new Exception('undefined magic method called');
> > > +        }
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getAccessToken() {
> > > +        return $this->_accessToken;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return string
> > > +     */
> > > +    public function getRefreshToken() {
> > > +        return $this->_refreshToken;
> > > +    }
> > > +
> > > +    /**
> > > +     * @return int
> > > +     */
> > > +    public function getLifeTime() {
> > > +        return $this->_lifeTime;
> > > +    }
> > > +}
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/Readme.txt
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/Readme.txt?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/Readme.txt (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/Readme.txt Fri May 18
> > > 04:13:44 2012
> > > @@ -0,0 +1,12 @@
> > > +If you want to set up the TeamBox plugin then you need:
> > > +1) Register you application at TeamBox site here:
> > > +    https://teambox.com/oauth_clients/
> > > +2) Edit the file ./config/settings.ini. Here you need to:
> > > +    _ choose a protocol (https or http);
> > > +    _ set up TeamBox acceess (app key and secret from the first step);
> > > +    _ set up OpenMeetings reas api acceess;
> > > +    _ set up OpenMeetings mysql access.
> > > +3) Edit the file openmeetings.js:
> > > +    replace the string
> > > "protocol://host/teambox/index.php?action=authorize" with you protocol
> > and
> > > host
> > > +4) Visit the TeamBox site enter javascript console if you browser
> there
> > > and enter the string:
> > > +    Teambox.models.user.saveSetting('custom_apps',
> > > ["protocol://host/teambox_js/openmeetings.js"]);
> > >
> > > Propchange: incubator/openmeetings/trunk/plugins/teambox/Readme.txt
> > >
> > >
> >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/config/.htaccess
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/config/.htaccess?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/config/.htaccess
> (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/config/.htaccess Fri
> May
> > > 18 04:13:44 2012
> > > @@ -0,0 +1,2 @@
> > > +Order Deny,Allow
> > > +Deny from all
> > >
> > > Propchange:
> incubator/openmeetings/trunk/plugins/teambox/config/.htaccess
> > >
> > >
> >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/config/settings.ini
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/config/settings.ini?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/config/settings.ini
> > > (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/config/settings.ini
> Fri
> > > May 18 04:13:44 2012
> > > @@ -0,0 +1,27 @@
> > > +; Set up "host" where OpenMeetings is installed.
> > > +; Choose http or https
> > > +; Set up TeamBox, OpenMeetings and mysql access
> > > +
> > > +[OpenMeetings protocol]
> > > +https = false;
> > > +
> > > +[TeamBox access]
> > > +app_key = "";
> > > +app_secret = "";
> > > +callback_url_http = "http://host/teambox/index.php";
> > > +callback_url_https = "https://host/teambox/index.php";
> > > +authorize_end = "https://teambox.com/oauth/authorize";
> > > +token_end = "https://teambox.com/oauth/token";
> > > +teambox_api_url = "https://teambox.com/api/2/";
> > > +
> > > +[OpenMeetings access]
> > > +cookie_domain = "host";
> > > +om_api_url = "http://host/openmeetings/services/";
> > > +om_hash_url = "http://host/openmeetings/?secureHash=";
> > > +admin_login = "";
> > > +admin_password = "";
> > > +
> > > +[OpenMeetings mysql access]
> > > +mysql_login = "";
> > > +mysql_password = "";
> > > +mysql_databse = "teambox";
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/css/index.css
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/css/index.css?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/css/index.css (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/css/index.css Fri May
> 18
> > > 04:13:44 2012
> > > @@ -0,0 +1,6 @@
> > > +.button-primary {
> > > +       width: 200px;
> > > +       white-space: nowrap;
> > > +       overflow: hidden;
> > > +       text-overflow: ellipsis;
> > > +}
> > >
> > > Propchange: incubator/openmeetings/trunk/plugins/teambox/css/index.css
> > >
> > >
> >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/index.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/index.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/index.php (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/index.php Fri May 18
> > > 04:13:44 2012
> > > @@ -0,0 +1,51 @@
> > > +<?php
> > > +
> > > +global $CFG;
> > > +$CFG = parse_ini_file('config/settings.ini');
> > > +
> > > +require_once('rest_lib/TeamBoxRestService.php');
> > > +require_once('rest_lib/OpenMeetingsRestService.php');
> > > +require_once('oauthLogin.php');
> > > +
> > > +$token = getTeamBoxAccessToken();
> > > +
> > > +$tbService = new TeamBoxRestService($token);
> > > +$account = $tbService->getAccountInfo();
> > > +$projects = $tbService->getUserProjects();
> > > +
> > > +$omService = new OpenMeetingsRestService();
> > > +$logged = $omService->loginAdmin();
> > > +if (!$logged) {
> > > +    print 'OpenMeetings internal error. Ask your system
> administrator.';
> > > +    exit(0);
> > > +}
> > > +
> > > +$invitationsMap = $omService->getInvitationsMap($projects, $account);
> > > +
> > > +?>
> > > +
> > > +<html>
> > > +<head>
> > > +    <meta http-equiv="Content-Type" content="text/html;
> charset=utf-8">
> > > +</head>
> > > +<body>
> > > +<link rel="stylesheet" type="text/css" href="
> > >
> >
> https://d238xsvyykqg39.cloudfront.net/assets/public-9083c95676119d2654a02c3057084689.css
> > "
> > > media="screen" />
> > > +<link rel="stylesheet" type="text/css" href="css/index.css"
> > > media="screen" />
> > > +
> > > +<div style="text-align: center;">
> > > +<?php
> > > +
> > > +if (0 == count($invitationsMap)) {
> > > +    echo '<p>You do not participate in any project, so you can not
> enter
> > > any project conference room</p>';
> > > +} else {
> > > +    echo '<p>Please, choose the project which conference room you want
> > to
> > > enter:</p>';
> > > +    foreach ($invitationsMap as $project => $url) {
> > > +        echo '<p><a class="button button-primary"
> > > href="'.$url.'"><span>'.$project.'</span></a></p>';
> > > +    }
> > > +}
> > > +
> > > +?>
> > > +</div>
> > > +
> > > +</body>
> > > +</html>
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/oauthLogin.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/oauthLogin.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/oauthLogin.php (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/oauthLogin.php Fri May
> > 18
> > > 04:13:44 2012
> > > @@ -0,0 +1,69 @@
> > > +<?php
> > > +
> > > +require_once('rest_lib/TeamBoxRestService.php');
> > > +
> > > +function validateAccessToken($token) {
> > > +    $tbService = new TeamBoxRestService($token);
> > > +    return $tbService->isValidAccessToken();
> > > +}
> > > +
> > > +function getTeamBoxAccessToken() {
> > > +    global $CFG;
> > > +    $appKey = $CFG[app_key];
> > > +    $appSecret = $CFG[app_secret];
> > > +    if ($CFG[https]) {
> > > +        $callbackUrl = $CFG[callback_url_https];
> > > +    } else {
> > > +        $callbackUrl = $CFG[callback_url_http];
> > > +    }
> > > +    $authorizeEnd = $CFG[authorize_end];
> > > +    $tokenEnd = $CFG[token_end];
> > > +    $cookieDomain = $CFG[cookie_domain];
> > > +    $tokenCookieId = 'access_token';
> > > +
> > > +    spl_autoload_register(function ($class) {
> > > +        require str_replace('\\', DIRECTORY_SEPARATOR, $class) .
> '.php';
> > > +    });
> > > +
> > > +    $client = new OAuth2\Client($appKey, $appSecret, $callbackUrl);
> > > +    $configuration = new OAuth2\Service\Configuration($authorizeEnd,
> > > $tokenEnd);
> > > +    $dataStore = new OAuth2\DataStore\Session();
> > > +    $scope = 'read_projects';
> > > +
> > > +    $service = new OAuth2\Service($client, $configuration, $dataStore,
> > > $scope);
> > > +
> > > +    if (isset($_GET['action'])) {
> > > +        if ('authorize' == $_GET['action']) {
> > > +            if (isset($_COOKIE[$tokenCookieId])) {
> > > +                $tokenString = $_COOKIE[$tokenCookieId];
> > > +                $valid = validateAccessToken($tokenString);
> > > +                if ($valid) {
> > > +                    return $tokenString;
> > > +                }
> > > +            }
> > > +
> > > +            // redirects to authorize endpoint
> > > +            $service->authorize();
> > > +        } else {
> > > +            exit(0);
> > > +        }
> > > +    }
> > > +
> > > +    if (isset($_GET['code'])) {
> > > +        // retrieve access token from endpoint
> > > +        $service->getAccessToken();
> > > +        $token = $dataStore->retrieveAccessToken();
> > > +        $dataStore->storeAccessToken($token);
> > > +    }
> > > +
> > > +    $token = $dataStore->retrieveAccessToken();
> > > +    if ($CFG[https]) {
> > > +        setcookie($tokenCookieId, $token->getAccessToken(),
> > > $token->getLifeTime(), '/teambox/', $cookieDomain, true);
> > > +    } else {
> > > +        setcookie($tokenCookieId, $token->getAccessToken(),
> > > $token->getLifeTime());
> > > +    }
> > > +
> > > +    return $token->getAccessToken();
> > > +}
> > > +
> > > +?>
> > >
> > > Added: incubator/openmeetings/trunk/plugins/teambox/openmeetings.js
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/openmeetings.js?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > --- incubator/openmeetings/trunk/plugins/teambox/openmeetings.js
> (added)
> > > +++ incubator/openmeetings/trunk/plugins/teambox/openmeetings.js Fri
> May
> > > 18 04:13:44 2012
> > > @@ -0,0 +1,36 @@
> > > +(function () {
> > > +    // Initialize a basic Teambox app
> > > +    Teambox.Apps.Openmeetings = Teambox.BaseApp.extend({});
> > > +
> > > +    // Router to handle paths (in this case, /#!/openmeetings) with
> > > regular links
> > > +    Teambox.Apps.Openmeetings.Controller =
> > > Teambox.Controllers.BaseController.extend({
> > > +        routes: { '!/openmeetings'  : 'index' },
> > > +        index: function () {
> > > +            // Helper Teambox function to highlight the sidebar
> > > +
>  Teambox.Views.Sidebar.highlightSidebar('openmeetings_link');
> > > +
> > > +            // Helper Teambox function to render content to the main
> > area
> > > +            Teambox.helpers.views.renderContent(
> > > +                "<iframe
> > > src='protocol://host/teambox/index.php?action=authorize'
> > > style='width:100%;height:100%'></iframe>",
> > > +                "Openmeetings",
> > > +                "openmeetings_content",
> > > +                false,
> > > +                true
> > > +            );
> > > +        }
> > > +    });
> > > +
> > > +    // Init app. Will be executed once on pageload when apps are
> > > instantiated.
> > > +    Teambox.Apps.Openmeetings = Teambox.Apps.Openmeetings.extend({
> > > +        initialize: function () {
> > > +            // Instantiate the controller
> > > +            this.controller = new
> > Teambox.Apps.Openmeetings.Controller();
> > > +            // Add an element to the Apps section in the sidebar
> > > +            $(".more_section .separator")
> > > +                .after("<div class='el' id='openmeetings_link'>"+
> > > +                "<a href='#!/openmeetings'><span class='icon
> > > star'></span>Openmeetings</a>"+
> > > +                "</div>");
> > > +        }
> > > +    });
> > > +
> > > +}());
> > >
> > > Propchange:
> incubator/openmeetings/trunk/plugins/teambox/openmeetings.js
> > >
> > >
> >
> ------------------------------------------------------------------------------
> > >    svn:eol-style = native
> > >
> > > Added:
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/OpenMeetingsRestService.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/rest_lib/OpenMeetingsRestService.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/OpenMeetingsRestService.php
> > > (added)
> > > +++
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/OpenMeetingsRestService.php
> > > Fri May 18 04:13:44 2012
> > > @@ -0,0 +1,139 @@
> > > +<?php
> > > +
> > > +require_once('RestService.php');
> > > +
> > > +class OpenMeetingsRestService extends RestService {
> > > +
> > > +    private $mysqlLogin;
> > > +    private $mysqlPassword;
> > > +    private $mysqlDatabse;
> > > +
> > > +    private $adminLogin;
> > > +    private $adminPassword;
> > > +
> > > +    private $restApiUrl;
> > > +    private $omHashUrl;
> > > +
> > > +    private $sessionId;
> > > +
> > > +    public function OpenMeetingsRestService() {
> > > +        parent::RestService('OpenMeetings');
> > > +
> > > +        global $CFG;
> > > +        $this->restApiUrl = $CFG[om_api_url];
> > > +        $this->omHashUrl = $CFG[om_hash_url];
> > > +        $this->adminLogin = $CFG[admin_login];
> > > +        $this->adminPassword = $CFG[admin_password];
> > > +
> > > +        $this->mysqlLogin = $CFG[mysql_login];
> > > +        $this->mysqlPassword = $CFG[mysql_password];
> > > +        $this->mysqlDatabse = $CFG[mysql_databse];
> > > +    }
> > > +
> > > +    public function loginAdmin() {
> > > +        $request = $this->restApiUrl . 'UserService/getSession';
> > > +        $response = $this->call($request);
> > > +        $xml = $this->getXmlContent($response);
> > > +        $this->sessionId = $xml->children('ns',
> > > true)->return->children('ax23', true)->session_id;
> > > +
> > > +        $request = $this->restApiUrl.'UserService/loginUser?'
> > > +                .'SID='.$this->sessionId
> > > +                .'&username=' . $this->adminLogin
> > > +                .'&userpass=' . $this->adminPassword;
> > > +        $response = $this->call($request);
> > > +        $xml = $this->getXmlContent($response);
> > > +        $returnValue = $xml->children('ns', true)->return[0];
> > > +
> > > +        return ($returnValue>0);
> > > +    }
> > > +
> > > +    public function getInvitationsMap($projects, $account) {
> > > +        $link = mysql_connect('localhost', $this->mysqlLogin,
> > > $this->mysqlPassword);
> > > +        if (!$link) {
> > > +            die("Can't create a connection to the teambox databse");
> > > +        }
> > > +
> > > +        $ret = array();
> > > +
> > > +        foreach ($projects as $proj) {
> > > +            $projectId = $proj->id;
> > > +            $query = 'select roomId from
> > > '.$this->mysqlDatabse.'.ProjectRooms where projectId = '.$projectId;
> > > +            $result = mysql_query($query);
> > > +
> > > +            $createRoom = true;
> > > +            if ($row = mysql_fetch_assoc($result)) {
> > > +                $roomId = $row['roomId'];
> > > +                $createRoom = false;
> > > +            }
> > > +            mysql_free_result($result);
> > > +
> > > +            if ($createRoom) {
> > > +                $roomId = $this->createRoom($proj->name);
> > > +                if ($roomId < 0) {
> > > +                    die("Can't create a room: ".$proj->name);
> > > +                }
> > > +                $query = 'insert into
> > > '.$this->mysqlDatabse.'.ProjectRooms values('.$projectId.',
> > '.$roomId.')';
> > > +                mysql_query($query);
> > > +            }
> > > +
> > > +            $hash = $this->getRoomHash($roomId, $account);
> > > +            if ($hash < 0) {
> > > +                die("Can't create a secure hash: ".$proj->name);
> > > +            }
> > > +
> > > +            $url = $this->omHashUrl.$hash;
> > > +            $ret[$proj->name] = $url;
> > > +        }
> > > +
> > > +        mysql_close($link);
> > > +        return $ret;
> > > +    }
> > > +
> > > +    public function createRoom($name) {
> > > +        $request =
> > $this->restApiUrl."RoomService/addRoomWithModeration?"
> > > +            ."SID=".$this->sessionId
> > > +            ."&name=".$name
> > > +            ."&roomtypes_id=3"
> > > +            ."&numberOfPartizipants=10"
> > > +            ."&ispublic=false"
> > > +            ."&isModeratedRoom=false";
> > > +
> > > +        $request = str_replace(' ', '_', $request);
> > > +        $response = $this->call($request);
> > > +        $xml = $this->getXmlContent($response);
> > > +        $roomId = $xml->children('ns', true)->return[0];
> > > +
> > > +        return $roomId;
> > > +    }
> > > +
> > > +    public function getRoomHash($roomId, $account) {
> > > +        $request =
> > > $this->restApiUrl."UserService/setUserObjectAndGenerateRoomHash?"
> > > +            ."SID=".$this->sessionId
> > > +            ."&username=".$account->last_name
> > > +            ."&firstname=".$account->first_name
> > > +            ."&lastname=".$account->last_name
> > > +            ."&email=".$account->email
> > > +            ."&room_id=".$roomId
> > > +            ."&becomeModeratorAsInt=1"
> > > +            ."&showAudioVideoTestAsInt=0";
> > > +        $request = str_replace(' ', '_', $request);
> > > +        $response = $this->call($request);
> > > +        $xml = $this->getXmlContent($response);
> > > +        $hash = $xml->children('ns', true)->return[0];
> > > +
> > > +        return $hash;
> > > +    }
> > > +
> > > +    private function getXmlContent($response) {
> > > +        if (!($xml = strstr($response, '<ns'))) {
> > > +            $xml = null;
> > > +        }
> > > +
> > > +        // Create a SimpleXML object with XML response
> > > +        $simple_xml = simplexml_load_string($xml, "SimpleXMLElement",
> > 0,"
> > > http://services.axis.openmeetings.org", true);
> > > +
> > > +        return $simple_xml;
> > > +    }
> > > +}
> > > +
> > > +?>
> > >
> > > Added:
> > > incubator/openmeetings/trunk/plugins/teambox/rest_lib/RestService.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/rest_lib/RestService.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > ---
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/RestService.php
> > > (added)
> > > +++
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/RestService.php
> > > Fri May 18 04:13:44 2012
> > > @@ -0,0 +1,126 @@
> > > +<?php
> > > +/*
> > > + * Licensed to the Apache Software Foundation (ASF) under one
> > > +* or more contributor license agreements.  See the NOTICE file
> > > +* distributed with this work for additional information
> > > +* regarding copyright ownership.  The ASF licenses this file
> > > +* to you under the Apache License, Version 2.0 (the
> > > +        * "License") +  you may not use this file except in compliance
> > > +* with the License.  You may obtain a copy of the License at
> > > +*
> > > +*   http://www.apache.org/licenses/LICENSE-2.0
> > > +*
> > > +* Unless required by applicable law or agreed to in writing,
> > > +* software distributed under the License is distributed on an
> > > +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> > > +* KIND, either express or implied.  See the License for the
> > > +* specific language governing permissions and limitations
> > > +* under the License.
> > > +*/
> > > +/*
> > > + * Created on 03.01.2012 by eugen.schwert@gmail.com
> > > +*
> > > +*
> > > +*/
> > > +
> > > +class RestService {
> > > +
> > > +    protected $serviceName;
> > > +
> > > +    public function RestService($serviceName) {
> > > +        $this->serviceName = $serviceName;
> > > +    }
> > > +
> > > +    public function call($url, $parameters = null, $method = 'GET',
> > > $dieOnError = true){
> > > +        // This will allow you to view errors in the browser
> > > +        // Note: set "display_errors" to 0 in production
> > > +        //ini_set('display_errors',1);
> > > +
> > > +        // Report all PHP errors (notices, errors, warnings, etc.)
> > > +        //error_reporting(E_ALL);
> > > +
> > > +        // URI used for making REST call. Each Web Service uses a
> unique
> > > URL.
> > > +        //$request
> > > +
> > > +        // Initialize the session by passing the request as a
> parameter
> > > +        $session = curl_init();
> > > +
> > > +        if ($method === 'POST') {
> > > +            curl_setopt($session, CURLOPT_URL, $url);
> > > +            curl_setopt($session, CURLOPT_POST, true);
> > > +            curl_setopt($session, CURLOPT_POSTFIELDS, $parameters);
> > > +        } else {
> > > +            $request = $url . ($parameters ? '?' . $parameters : '');
> > > +            curl_setopt($session, CURLOPT_URL, $request);
> > > +        }
> > > +
> > > +        // Set curl options by passing session and flags
> > > +        // CURLOPT_HEADER allows us to receive the HTTP header
> > > +        curl_setopt($session, CURLOPT_HEADER, true);
> > > +
> > > +        // CURLOPT_RETURNTRANSFER will return the response
> > > +        curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
> > > +
> > > +        // Make the request
> > > +        $response = curl_exec($session);
> > > +
> > > +        // Close the curl session
> > > +        curl_close($session);
> > > +
> > > +        // Confirm that the request was transmitted to the service!
> > Image
> > > Search Service
> > > +        if(!$response) {
> > > +            die("Request ".$this->serviceName."!
> ".$this->serviceName."
> > > Service failed and no response was returned.");
> > > +        }
> > > +
> > > +        // Create an array to store the HTTP response codes
> > > +        $status_code = array();
> > > +
> > > +        // Use regular expressions to extract the code from the header
> > > +        preg_match('/\d\d\d/', $response, $status_code);
> > > +
> > > +        // Check the HTTP Response code and display message if status
> > > code is not 200 (OK)
> > > +        switch( $status_code[0] ) {
> > > +            case 200:
> > > +                // Success
> > > +                break;
> > > +            case 503:
> > > +                if ($dieOnError) {
> > > +                    die('Your call to '.$this->serviceName.' Web
> > Services
> > > failed and returned an HTTP status of 503.
> > > +                    That means: Service unavailable. An internal
> problem
> > > prevented us from returning'.
> > > +                    ' data to you.');
> > > +                } else {
> > > +                    return false;
> > > +                }
> > > +                break;
> > > +            case 403:
> > > +                if ($dieOnError) {
> > > +                    die('Your call to '.$this->serviceName.' Web
> > Services
> > > failed and returned an HTTP status of 403.
> > > +                    That means: Forbidden. You do not have permission
> to
> > > access this resource, or are over'.
> > > +                    ' your rate limit.');
> > > +                } else {
> > > +                    return false;
> > > +                }
> > > +                break;
> > > +            case 400:
> > > +                // You may want to fall through here and read the
> > > specific XML error
> > > +                if ($dieOnError) {
> > > +                    die('Your call to '.$this->serviceName.' Web
> > Services
> > > failed and returned an HTTP status of 400.
> > > +                    That means:  Bad request. The parameters passed to
> > > the service did not match as expected.
> > > +                    The exact error is returned in the XML
> response.');
> > > +                } else {
> > > +                    return false;
> > > +                }
> > > +                break;
> > > +            default:
> > > +                if ($dieOnError) {
> > > +                    die('Your call to '.$this->serviceName.' Web
> > Services
> > > returned an unexpected HTTP status of: ' . $status_code[0]);
> > > +                } else {
> > > +                    return false;
> > > +                }
> > > +        }
> > > +
> > > +        return $response;
> > > +    }
> > > +}
> > > +
> > > +?>
> > >
> > > Added:
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/TeamBoxRestService.php
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/incubator/openmeetings/trunk/plugins/teambox/rest_lib/TeamBoxRestService.php?rev=1339968&view=auto
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/TeamBoxRestService.php
> > > (added)
> > > +++
> > >
> >
> incubator/openmeetings/trunk/plugins/teambox/rest_lib/TeamBoxRestService.php
> > > Fri May 18 04:13:44 2012
> > > @@ -0,0 +1,90 @@
> > > +<?php
> > > +
> > > +require_once('RestService.php');
> > > +
> > > +class TeamBoxRestService extends RestService {
> > > +
> > > +    private $restApiUrl;
> > > +    private $accessToken;
> > > +
> > > +    public function TeamBoxRestService($accessToken) {
> > > +        parent::RestService('TeamBox');
> > > +
> > > +        global $CFG;
> > > +        $this->restApiUrl = $CFG[teambox_api_url];
> > > +        $this->accessToken = $accessToken;
> > > +    }
> > > +
> > > +    public function isValidAccessToken() {
> > > +        $url = $this->restApiUrl . 'account';
> > > +        $parameters = 'access_token=' . $this->accessToken;
> > > +        $response = $this->call($url, $parameters, 'GET', false);
> > > +        if (false == $response) {
> > > +            return false;
> > > +        }
> > > +
> > > +        return true;
> > > +    }
> > > +
> > > +    public function getAccountInfo() {
> > > +        $url = $this->restApiUrl . 'account';
> > > +        $parameters = 'access_token=' . $this->accessToken;
> > > +        $response = $this->call($url, $parameters, 'GET');
> > > +        $data = $this->getJsonSingleData($response);
> > > +
> > > +        return $data;
> > > +    }
> > > +
> > > +    public function getUserProjects() {
> > > +        $url = $this->restApiUrl . 'projects';
> > > +        $parameters = 'access_token=' . $this->accessToken;
> > > +        $response = $this->call($url, $parameters, 'GET');
> > > +        $data = $this->getJsonMultiData($response);
> > > +
> > > +        return $data;
> > > +    }
> > > +
> > > +    private function getJsonSingleData($response) {
> > > +        if (!($content = strstr($response, '{'))) {
> > > +            $content = null;
> > > +        }
> > > +
> > > +        $data = json_decode($content);
> > > +
> > > +        return $data;
> > > +    }
> > > +
> > > +    private function getJsonMultiData($response) {
> > > +        $singlePos = stripos($response, '{');
> > > +        $multiPos = stripos($response, '[');
> > > +
> > > +        $multy = false;
> > > +        if (-1 != $multiPos) {
> > > +            if (-1 != $singlePos) {
> > > +                $multy = ($multiPos < $singlePos);
> > > +            } else {
> > > +                $multy = true;
> > > +            }
> > > +        }
> > > +
> > > +        if ($multy) {
> > > +            $content = strstr($response, '[');
> > > +        } else {
> > > +            $content = strstr($response, '{');
> > > +        }
> > > +
> > > +        if (!$content) {
> > > +            return null;
> > > +        }
> > > +
> > > +        $data = json_decode($content);
> > > +        if (!$multy) {
> > > +            $data = array(0 => $data);
> > > +        }
> > > +
> > > +        return $data;
> > > +    }
> > > +
> > > +}
> > > +
> > > +?>
> > >
> > >
> > >
> >
> >
> > --
> > WBR
> > Maxim aka solomax
> >
>



-- 
Sebastian Wagner
https://twitter.com/#!/dead_lock
http://www.openmeetings.de
http://www.webbase-design.de
http://www.wagner-sebastian.com
seba.wagner@gmail.com

Re: OAuth2 license compatible with Apache License

Posted by "seba.wagner@gmail.com" <se...@gmail.com>.
Thanks again!
Am 18.05.2012 14:00 schrieb "Kevan Miller" <ke...@gmail.com>:

>
> On May 18, 2012, at 3:22 AM, seba.wagner@gmail.com wrote:
>
> > Dear Legal team,
> >
> > could you check if the License of OAuth2 (see attached conversation) is
> compatible with Apache License? It seems to be however as it does directly
> refer to any of the licenses from category-a (
> http://www.apache.org/legal/resolved.html#category-a ), could you review
> it?
>
> That's an MIT license (http://opensource.org/licenses/mit-license.php)
> and is Category A.
>
> --kevan
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: legal-discuss-unsubscribe@apache.org
> For additional commands, e-mail: legal-discuss-help@apache.org
>
>

Fwd: Re: OAuth2 license compatible with Apache License

Posted by "seba.wagner@gmail.com" <se...@gmail.com>.
See attached the answer from the legals team
---------- Weitergeleitete Nachricht ----------
Von: "Kevan Miller" <ke...@gmail.com>
Datum: 18.05.2012 14:00
Betreff: Re: OAuth2 license compatible with Apache License
An: <le...@apache.org>


On May 18, 2012, at 3:22 AM, seba.wagner@gmail.com wrote:

> Dear Legal team,
>
> could you check if the License of OAuth2 (see attached conversation) is
compatible with Apache License? It seems to be however as it does directly
refer to any of the licenses from category-a (
http://www.apache.org/legal/resolved.html#category-a ), could you review it?

That's an MIT license (http://opensource.org/licenses/mit-license.php) and
is Category A.

--kevan
---------------------------------------------------------------------
To unsubscribe, e-mail: legal-discuss-unsubscribe@apache.org
For additional commands, e-mail: legal-discuss-help@apache.org

Re: OAuth2 license compatible with Apache License

Posted by Kevan Miller <ke...@gmail.com>.
On May 18, 2012, at 3:22 AM, seba.wagner@gmail.com wrote:

> Dear Legal team,
> 
> could you check if the License of OAuth2 (see attached conversation) is compatible with Apache License? It seems to be however as it does directly refer to any of the licenses from category-a ( http://www.apache.org/legal/resolved.html#category-a ), could you review it?

That's an MIT license (http://opensource.org/licenses/mit-license.php) and is Category A.

--kevan
---------------------------------------------------------------------
To unsubscribe, e-mail: legal-discuss-unsubscribe@apache.org
For additional commands, e-mail: legal-discuss-help@apache.org