<commit_before><!--
Copyright 2015 realglobe, Inc.

Licensed 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.
-->


# edo-idp-selector

IdP 一覧を選択するための UI バックエンド。


## 1. 起動


UI 用の HTML 等を ui ディレクトリの下に置く。

```
<任意のディレクトリ>/
├── edo-idp-selector
└── html
     ├── index.html
     ...
```

|オプション|値の意味・選択肢|
|:--|:--|
|-uiPath|UI 用 HTML 等を置くディレクトリパス|
|-uiUri|UI 用 HTML 等を提供する URI|


## 2. URI

|URI|機能|
|:--|:--|
|/list|IdP を列挙する API|
|/redirect|IdP を受け取り、リダイレクト処理をする|
|/html|UI 用の HTML を提供する|
|/|IdP の選択処理をする|

エラー時、リクエストに redirect_uri クエリが含まれている場合は、
OpenID Connect 式に redirect_uri へのリダイレクトに error クエリ等を付けてエラーを通知する。

### 2.1. GET /

prompt クエリが select_account の場合、クエリを維持したまま /html/index.html にリダイレクトする。

そうでなく、cookie の X-Edo-Idp-Id、または、idp クエリに有効な IdP が設定されている場合、
それを選択された IdP とみなして /redirect と同じ処理をする。
優先度は、

    idp クエリ > cookie の X-Edo-Idp-Id

そうでない場合、クエリを維持したまま /html/index.html にリダイレクトする。


### 2.2. GET /list

IdP 一覧を返す。
クエリで絞り込める。
クエリの形式は

    <タグ名>=<該当する値の正規表現>

レスポンスは JSON で、

```
[
    {
        "id"="https://example.com",
        "name"="どっかの IdP",
        ...
    },
    ...
]
```


### 2.3. GET /html/...

UI 用の HTML を提供する。

対応するディレクトリ内に、少なくとも index.html だけは置く必要がある。

UI の役目は、最終的に、/redirect に現在のクエリ及び選択した IdP を idp クエリとして付けた
以下のようなリンクを踏ませること。

    <a href="/redirect?client_id=...&idp=https%3A%2F%2Fexample.com">どっかの IdP</a>


### 2.4. GET /redirect

選択された IdP を受け取り、その認証 URI にクエリを維持したままリダイレクトさせる。
IdP の受け取りは、idp クエリ、または、idp フォームパラメータ。
レスポンス時に、Set-Cookie で X-Edo-Idp-Id を設定する。

/ を代わりに使うこともできるが、バグで無限ループしたら嫌なので、UI からは /redirect を踏ませる。


## 3. ライセンス

Apache License, Version 2.0
<commit_msg>GoDoc へのリンクを追加<commit_after><!--
Copyright 2015 realglobe, Inc.

Licensed 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.
-->


# edo-idp-selector

IdP 一覧を選択するための UI バックエンド。


## 1. 起動


UI 用の HTML 等を ui ディレクトリの下に置く。

```
<任意のディレクトリ>/
├── edo-idp-selector
└── html
     ├── index.html
     ...
```

|オプション|値の意味・選択肢|
|:--|:--|
|-uiPath|UI 用 HTML 等を置くディレクトリパス|
|-uiUri|UI 用 HTML 等を提供する URI|


## 2. URI

|URI|機能|
|:--|:--|
|/list|IdP を列挙する API|
|/redirect|IdP を受け取り、リダイレクト処理をする|
|/html|UI 用の HTML を提供する|
|/|IdP の選択処理をする|

エラー時、リクエストに redirect_uri クエリが含まれている場合は、
OpenID Connect 式に redirect_uri へのリダイレクトに error クエリ等を付けてエラーを通知する。

### 2.1. GET /

prompt クエリが select_account の場合、クエリを維持したまま /html/index.html にリダイレクトする。

そうでなく、cookie の X-Edo-Idp-Id、または、idp クエリに有効な IdP が設定されている場合、
それを選択された IdP とみなして /redirect と同じ処理をする。
優先度は、

    idp クエリ > cookie の X-Edo-Idp-Id

そうでない場合、クエリを維持したまま /html/index.html にリダイレクトする。


### 2.2. GET /list

IdP 一覧を返す。
クエリで絞り込める。
クエリの形式は

    <タグ名>=<該当する値の正規表現>

レスポンスは JSON で、

```
[
    {
        "id"="https://example.com",
        "name"="どっかの IdP",
        ...
    },
    ...
]
```


### 2.3. GET /html/...

UI 用の HTML を提供する。

対応するディレクトリ内に、少なくとも index.html だけは置く必要がある。

UI の役目は、最終的に、/redirect に現在のクエリ及び選択した IdP を idp クエリとして付けた
以下のようなリンクを踏ませること。

    <a href="/redirect?client_id=...&idp=https%3A%2F%2Fexample.com">どっかの IdP</a>


### 2.4. GET /redirect

選択された IdP を受け取り、その認証 URI にクエリを維持したままリダイレクトさせる。
IdP の受け取りは、idp クエリ、または、idp フォームパラメータ。
レスポンス時に、Set-Cookie で X-Edo-Idp-Id を設定する。

/ を代わりに使うこともできるが、バグで無限ループしたら嫌なので、UI からは /redirect を踏ませる。


## 3. API

[GoDoc](http://godoc.org/github.com/realglobe-Inc/edo-idp-selector)


## 4. ライセンス

Apache License, Version 2.0

{'fraction_non_alphanumeric': 0.13086770981507823, 'fraction_numerical': 0.011616880037932669, 'mean_word_length': 3.5958605664488017, 'pattern_counts': {'":': 0, '<': 15, '<?xml version=': 0, '>': 17, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1479210', 'n_tokens_mistral': 2454, 'n_tokens_neox': 2350, 'n_words': 456}