|
2 | 2 |
|
3 | 3 | namespace Laravel\Passport;
|
4 | 4 |
|
| 5 | +use Illuminate\Contracts\Auth\Authenticatable; |
5 | 6 | use Illuminate\Support\Str;
|
6 | 7 |
|
7 | 8 | class ClientRepository
|
@@ -78,75 +79,110 @@ public function activeForUser($userId)
|
78 | 79 | /**
|
79 | 80 | * Store a new client.
|
80 | 81 | *
|
81 |
| - * @param int|null $userId |
82 |
| - * @param string $name |
83 |
| - * @param string $redirect |
84 |
| - * @param string|null $provider |
85 |
| - * @param bool $personalAccess |
86 |
| - * @param bool $password |
87 |
| - * @param bool $confidential |
88 |
| - * @return \Laravel\Passport\Client |
| 82 | + * @param string[] $redirectUris |
| 83 | + * @param string[] $grantTypes |
89 | 84 | */
|
90 |
| - public function create($userId, $name, $redirect, $provider = null, $personalAccess = false, $password = false, $confidential = true) |
91 |
| - { |
92 |
| - $client = Passport::client()->forceFill([ |
93 |
| - 'user_id' => $userId, |
| 85 | + protected function create( |
| 86 | + string $name, |
| 87 | + array $grantTypes, |
| 88 | + array $redirectUris = [], |
| 89 | + ?string $provider = null, |
| 90 | + bool $confidential = true, |
| 91 | + ?Authenticatable $user = null |
| 92 | + ): Client { |
| 93 | + $client = Passport::client(); |
| 94 | + $columns = $client->getConnection()->getSchemaBuilder()->getColumnListing($client->getTable()); |
| 95 | + |
| 96 | + $attributes = [ |
94 | 97 | 'name' => $name,
|
95 |
| - 'secret' => ($confidential || $personalAccess) ? Str::random(40) : null, |
| 98 | + 'secret' => $confidential ? Str::random(40) : null, |
96 | 99 | 'provider' => $provider,
|
97 |
| - 'redirect' => $redirect, |
98 |
| - 'personal_access_client' => $personalAccess, |
99 |
| - 'password_client' => $password, |
100 | 100 | 'revoked' => false,
|
101 |
| - ]); |
102 |
| - |
103 |
| - $client->save(); |
104 |
| - |
105 |
| - return $client; |
| 101 | + ...(in_array('redirect_uris', $columns) ? [ |
| 102 | + 'redirect_uris' => $redirectUris, |
| 103 | + ] : [ |
| 104 | + 'redirect' => implode(',', $redirectUris), |
| 105 | + ]), |
| 106 | + ...(in_array('grant_types', $columns) ? [ |
| 107 | + 'grant_types' => $grantTypes, |
| 108 | + ] : [ |
| 109 | + 'personal_access_client' => in_array('personal_access', $grantTypes), |
| 110 | + 'password_client' => in_array('password', $grantTypes), |
| 111 | + ]), |
| 112 | + ]; |
| 113 | + |
| 114 | + return $user |
| 115 | + ? $user->clients()->forceCreate($attributes) |
| 116 | + : $client->forceCreate($attributes); |
106 | 117 | }
|
107 | 118 |
|
108 | 119 | /**
|
109 | 120 | * Store a new personal access token client.
|
110 |
| - * |
111 |
| - * @param int|null $userId |
112 |
| - * @param string $name |
113 |
| - * @param string $redirect |
114 |
| - * @return \Laravel\Passport\Client |
115 | 121 | */
|
116 |
| - public function createPersonalAccessClient($userId, $name, $redirect) |
| 122 | + public function createPersonalAccessGrantClient(string $name, ?string $provider = null): Client |
117 | 123 | {
|
118 |
| - return $this->create($userId, $name, $redirect, null, true); |
| 124 | + return $this->create($name, ['personal_access'], [], $provider); |
119 | 125 | }
|
120 | 126 |
|
121 | 127 | /**
|
122 | 128 | * Store a new password grant client.
|
| 129 | + */ |
| 130 | + public function createPasswordGrantClient(string $name, ?string $provider = null): Client |
| 131 | + { |
| 132 | + return $this->create($name, ['password', 'refresh_token'], [], $provider); |
| 133 | + } |
| 134 | + |
| 135 | + /** |
| 136 | + * Store a new client credentials grant client. |
| 137 | + */ |
| 138 | + public function createClientCredentialsGrantClient(string $name): Client |
| 139 | + { |
| 140 | + return $this->create($name, ['client_credentials']); |
| 141 | + } |
| 142 | + |
| 143 | + /** |
| 144 | + * Store a new implicit grant client. |
123 | 145 | *
|
124 |
| - * @param int|null $userId |
125 |
| - * @param string $name |
126 |
| - * @param string $redirect |
127 |
| - * @param string|null $provider |
128 |
| - * @return \Laravel\Passport\Client |
| 146 | + * @param string[] $redirectUris |
129 | 147 | */
|
130 |
| - public function createPasswordGrantClient($userId, $name, $redirect, $provider = null) |
| 148 | + public function createImplicitGrantClient(string $name, array $redirectUris): Client |
131 | 149 | {
|
132 |
| - return $this->create($userId, $name, $redirect, $provider, false, true); |
| 150 | + return $this->create($name, ['implicit'], $redirectUris); |
| 151 | + } |
| 152 | + |
| 153 | + /** |
| 154 | + * Store a new authorization code grant client. |
| 155 | + * |
| 156 | + * @param string[] $redirectUris |
| 157 | + */ |
| 158 | + public function createAuthorizationCodeGrantClient( |
| 159 | + string $name, |
| 160 | + array $redirectUris, |
| 161 | + bool $confidential = true, |
| 162 | + ?Authenticatable $user = null |
| 163 | + ): Client { |
| 164 | + return $this->create( |
| 165 | + $name, ['authorization_code', 'refresh_token'], $redirectUris, null, $confidential, $user |
| 166 | + ); |
133 | 167 | }
|
134 | 168 |
|
135 | 169 | /**
|
136 | 170 | * Update the given client.
|
137 | 171 | *
|
138 |
| - * @param \Laravel\Passport\Client $client |
139 |
| - * @param string $name |
140 |
| - * @param string $redirect |
141 |
| - * @return \Laravel\Passport\Client |
| 172 | + * @param string[] $redirectUris |
142 | 173 | */
|
143 |
| - public function update(Client $client, $name, $redirect) |
| 174 | + public function update(Client $client, string $name, array $redirectUris): bool |
144 | 175 | {
|
145 |
| - $client->forceFill([ |
146 |
| - 'name' => $name, 'redirect' => $redirect, |
147 |
| - ])->save(); |
| 176 | + $columns = $client->getConnection()->getSchemaBuilder()->getColumnListing($client->getTable()); |
148 | 177 |
|
149 |
| - return $client; |
| 178 | + return $client->forceFill([ |
| 179 | + 'name' => $name, |
| 180 | + ...(in_array('redirect_uris', $columns) ? [ |
| 181 | + 'redirect_uris' => $redirectUris, |
| 182 | + ] : [ |
| 183 | + 'redirect' => implode(',', $redirectUris), |
| 184 | + ]), |
| 185 | + ])->save(); |
150 | 186 | }
|
151 | 187 |
|
152 | 188 | /**
|
|
0 commit comments