Oauth::getOauthParams()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 11
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 8
nc 1
nop 0
crap 1
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: tamaskovacs
5
 * Date: 2017. 01. 22.
6
 * Time: 17:14
7
 */
8
9
namespace Callisto;
10
11
12
class Oauth
13
{
14
	/**
15
	 * OAuth2 access token.
16
	 *
17
	 * @var string
18
	 */
19
	private $accessToken;
20
21
	/**
22
	 * OAuth2 access token secret.
23
	 *
24
	 * @var string
25
	 */
26
	private $accessTokenSecret;
27
28
	/**
29
	 * Twitter app consumer key.
30
	 *
31
	 * @var string
32
	 */
33
	private $consumerKey;
34
35
	/**
36
	 * Twitter app consumer secret.
37
	 *
38
	 * @var string
39
	 */
40
	private $consumerSecret;
41
42
43
	/**
44
	 * Oauth constructor.
45
	 *
46
	 * @param string $consumerKey
47
	 * @param string $consumerSecret
48
	 * @param string $accessToken
49
	 * @param string $accessTokenSecret
50
	 */
51 19
	public function __construct(string $consumerKey, string $consumerSecret, string $accessToken, string $accessTokenSecret)
52
	{
53 19
		$this->consumerKey = $consumerKey;
54 19
		$this->consumerSecret = $consumerSecret;
55 19
		$this->accessToken = $accessToken;
56 19
		$this->accessTokenSecret = $accessTokenSecret;
57 19
	}
58
59
	/**
60
	 * Returns the parameters for an OAuth request.
61
	 *
62
	 * @return array
63
	 */
64 1
	private function getOauthParams() : array
65
	{
66
		return [
67 1
			'oauth_consumer_key' => $this->consumerKey,
68 1
			'oauth_nonce' => md5(time() . rand()),
69 1
			'oauth_signature_method' => 'HMAC-SHA1',
70 1
			'oauth_timestamp' => time(),
71 1
			'oauth_token' => $this->accessToken,
72 1
			'oauth_version' => '1.0',
73
		];
74
	}
75
76
	/**
77
	 * Generates the HTTP request string.
78
	 *
79
	 * @param array $params
80
	 * @param $httpMethod
81
	 * @param $baseUrl
82
	 * @param $endPoint
83
	 * @return string
84
	 */
85 1
	public function getOauthRequest(array $params, $httpMethod, $baseUrl, $endPoint) : string
86
	{
87 1
		$signatureParams = array_merge($params, $this->getOauthParams());
88 1
		$signatureParams['oauth_signature'] = $this->getOauthSignature($signatureParams, $httpMethod, $baseUrl . $endPoint);
89
90 1
		$contentParams = [];
91 1
		foreach ($params as $key => $param) {
92 1
			$contentParams[] = $key . '=' . rawurlencode($param);
93
		}
94
95 1
		$content = implode('&', $contentParams);
96
97 1
		return $httpMethod . " " . $endPoint . " HTTP/1.1\r\n"
98 1
		."Accept: */*\r\n"
99 1
		."Connection: close\r\n"
100 1
		."User-Agent: Callisto API\r\n"
101 1
		."Content-Type: application/x-www-form-urlencoded\r\n"
102 1
		."Authorization: OAuth realm=\"\",oauth_consumer_key=\"" . $signatureParams['oauth_consumer_key'] . "\","
103 1
		."oauth_nonce=\"" . $signatureParams['oauth_nonce'] . "\","
104 1
		."oauth_signature_method=\"" . $signatureParams['oauth_signature_method'] . "\","
105 1
		."oauth_timestamp=\"" . $signatureParams['oauth_timestamp'] . "\","
106 1
		."oauth_version=\"" . $signatureParams['oauth_version'] . "\","
107 1
		."oauth_token=\"" . $signatureParams['oauth_token'] . "\","
108 1
		."oauth_signature=\"" . rawurlencode($signatureParams['oauth_signature']) . "\"\r\n"
109 1
		."Content-Length: " . strlen($content) . "\r\n"
110 1
		."Host: stream.twitter.com:443\r\n\r\n"
111 1
		.$content;
112
	}
113
114
	/**
115
	 * Generates an OAuth signature.
116
	 *
117
	 * @param array $params
118
	 * @param $httpMethod
119
	 * @param $url
120
	 * @return string
121
	 */
122 1
	private function getOauthSignature(array $params, $httpMethod, $url) : string
123
	{
124 1
		$urlParams = [];
125 1
		foreach ($params as $key => $value) {
126 1
			$params[$key] = rawurlencode($value);
127 1
			$urlParams[$key] = $key . '=' . $params[$key];
128
		}
129
130 1
		ksort($urlParams);
131 1
		$parameterString = implode('&', $urlParams);
132 1
		$signatureBaseString = strtoupper($httpMethod) .
133 1
			'&' . rawurlencode($url) .
134 1
			'&' . rawurlencode($parameterString);
135
136 1
		$signingKey = rawurlencode($this->consumerSecret) . '&' . rawurlencode($this->accessTokenSecret);
137 1
		$oauthSignature = base64_encode(hash_hmac('sha1', $signatureBaseString, $signingKey, true));
138
139 1
		return $oauthSignature;
140
	}
141
}