Files
791b4bc769 feat: Switch to monorepo (#21)
* feat: first commit

* feat: import wallet, fctl sdk and some stuff

* fix: make hooks enabled only if changes in the code

* feat: refine scripts

* chore: disable pre commit hooks

* chore: update payments

* feat: make all hooks pass

this has required modifications on almost each project

* git subrepo push services/webhooks

subrepo:
  subdir:   "services/webhooks"
  merged:   "ca5d19c5"
upstream:
  origin:   "webhooks"
  branch:   "main"
  commit:   "ca5d19c5"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* chore: push backport

* chore: backports

* chore: backports

* chore: backports

* chore: backports

* chore: backports

* chore: remove test code

* chore: backports

* fix: branch

* git subrepo push --branch=chore/backports --force services/fctl

subrepo:
  subdir:   "services/fctl"
  merged:   "0d98fdaa"
upstream:
  origin:   "fctl"
  branch:   "chore/backports"
  commit:   "0d98fdaa"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* feat(fctl): fix argument

* git subrepo push --branch=chore/backports --force services/fctl

subrepo:
  subdir:   "services/fctl"
  merged:   "5a7a41f9"
upstream:
  origin:   "fctl"
  branch:   "chore/backports"
  commit:   "5a7a41f9"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* feat: remove ledger

* git subrepo clone ledger services/ledger

subrepo:
  subdir:   "services/ledger"
  merged:   "ad57138a"
upstream:
  origin:   "ledger"
  branch:   "main"
  commit:   "ad57138a"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* feat(auth): fix dependencies

* chore: backports

* feat: remove ledger

* feat: add ledger

* feat: remove auth

* feat: fetch auth main

* feat: remove search

* feat: add search

* feat: remove submodules

* feat: reomve payments

* feat: add payments from main

* feat: add 'yarn install' before generate sdk

* feat: Update CI

* feat: remove fctl

* feat: add fctl

* chore: go mod tidy

* git subrepo push services/fctl

subrepo:
  subdir:   "services/fctl"
  merged:   "5d4c919"
upstream:
  origin:   "fctl"
  branch:   "main"
  commit:   "5d4c919"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* feat: add go-project-template

* feat: update go-project-template under new go libs

* git subrepo push libs/go-project-template

subrepo:
  subdir:   "libs/go-project-template"
  merged:   "40e49f0"
upstream:
  origin:   "go-project-template"
  branch:   "main"
  commit:   "40e49f0"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* fix: sdk hook

* feat: Update CI

* feat: Update CI

* feat: Update CI

* feat: Update CI

* feat: Update

* feat: CI Update

* feat: Clear CI

* feat: CI clear

* fee

* feat: CI

* feat: Update CI

* feat: Update CI

* feat: Desactivate release mode

* feat: Update CI

* feat: Update CI

* ci: upgrade

* feat: update go-libs

* feat(orchetration): init project

* git subrepo push libs/go-project-template

subrepo:
  subdir:   "libs/go-project-template"
  merged:   "cbead19"
upstream:
  origin:   "go-project-template"
  branch:   "main"
  commit:   "cbead19"
git-subrepo:
  version:  "0.4.5"
  origin:   "ssh://[email protected]/ingydotnet/git-subrepo"
  commit:   "dbb99be"

* fix: commitlint

* feat: little clean & fix pre-commit

* fix: for pre-commit

* ci: Improvement

* ci: Improvement

* ci: Improvement

* ci: Improvement

* ci: Improvement

* chore: add machine

* ci: Improvement

* ci: Improvement

* ci: Improvement

* ci: Improvement

* feat: Add all SDK

* ci: Improvement

* feat: Update taskfile & CI

* feat: Update taskfile & CI

* feat: List foliders in find

* feat: List foliders in find

* feat: List foliders in find

* feat: List foliders in find

* feat: List foliders in find

* feat: List foliders in find

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* chore: Empty-Commit

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: Add GoBuild

* feat: big bang

* feat: big bang

* feat: big bang

* ci: Update

* ci: Add release

* ci: Update .goreleaser.yml

* feat(orchestration): first working version

* feat(operator): simplify

* feat(operator): factorize ingress, services, auth clients...

* feat(operator): remove resources

* fix: auth configuration causing pods reboot

* feat: Update gitpod configuration

* feat(gitpod): Add Garden

* feat(gitpod): Add rsync

* feat(gitpod): Add packages

* feat(gitpod): Add packages

* feat(gitpod): Optimize configuration

* feat(gitpod): restore default config

* feat(gitpod): Add port 80 & 443 on qemu

* feat(gitpod): Ignore .garden fodler

* feat(gitpod): Upgrade qemu

* feat: add 'stack' label on created objects

* feat: add taskfile operator to root taskfile

* feat(operator): add lint to taskfile

* feat(operator): add build.Dockerfile

* fix(operator): fix build.Dockerfile

* fix(operator): restore service names

* fix(operator): ingresses

* fix(operator): fix middlewares

* fix(operator): duplicate middlewares entries

* fix(operator): control ingress path prefix

* feat(operator): disable ingress on service if not specified in configuration

* fix(fctl): membership uri

* fix(orchestration): application/json content-type

* feat: wip

* fix: orchestration run ids

* fix: catch panic on workflow executions

Co-authored-by: Ragot Geoffrey <[email protected]>
Co-authored-by: Antoine Gelloz <[email protected]>
2023-01-25 13:41:59 +01:00

100 lines
2.2 KiB
Go

package oauth2introspect
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
"net/url"
"time"
"github.com/dgraph-io/ristretto"
"github.com/pkg/errors"
)
type IntrospecterOption interface {
apply(introspecter *Introspecter)
}
type IntrospecterOptionFn func(introspecter *Introspecter)
func (fn IntrospecterOptionFn) apply(introspecter *Introspecter) {
fn(introspecter)
}
func WithClient(client *http.Client) IntrospecterOptionFn {
return func(introspecter *Introspecter) {
introspecter.client = client
}
}
func WithCache(cache *ristretto.Cache, cacheTTL time.Duration) IntrospecterOptionFn {
return func(introspecter *Introspecter) {
introspecter.cache = cache
introspecter.cacheTTL = cacheTTL
}
}
type Introspecter struct {
introspectUrl string
client *http.Client
cache *ristretto.Cache
cacheTTL time.Duration
}
func (i *Introspecter) Introspect(ctx context.Context, bearer string) (bool, error) {
if i.cache != nil {
v, ok := i.cache.Get(bearer)
if ok {
return v.(bool), nil
}
}
form := url.Values{}
form.Set("token", bearer)
checkAuthReq, err := http.NewRequest(http.MethodPost, i.introspectUrl, bytes.NewBufferString(form.Encode()))
if err != nil {
return false, errors.Wrap(err, "creating introspection request")
}
checkAuthReq.Header.Add("Content-Type", "application/x-www-form-urlencoded")
checkAuthReq = checkAuthReq.WithContext(ctx)
rsp, err := i.client.Do(checkAuthReq)
if err != nil {
return false, errors.Wrap(err, "making introspection request")
}
switch rsp.StatusCode {
case http.StatusOK:
type X struct {
Active bool `json:"active"`
}
x := X{}
err = json.NewDecoder(rsp.Body).Decode(&x)
if err != nil {
return false, errors.Wrap(err, "decoding introspection response")
}
if i.cache != nil {
_ = i.cache.SetWithTTL(bearer, x.Active, 1, i.cacheTTL)
}
return x.Active, nil
default:
return false, fmt.Errorf("unexpected status code %d on introspection request", rsp.StatusCode)
}
}
func NewIntrospecter(url string, options ...IntrospecterOption) *Introspecter {
i := &Introspecter{
introspectUrl: url,
client: http.DefaultClient,
}
for _, opt := range options {
opt.apply(i)
}
return i
}