• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / cli / 19625601168

24 Nov 2025 06:38AM UTC coverage: 55.069% (-0.04%) from 55.108%
19625601168

Pull #4477

github

web-flow
Merge c380f11c5 into 4a90b4fce
Pull Request #4477: feat: add `--name-id-format` flag to `sso add` and `sso update`

10 of 21 new or added lines in 4 files covered. (47.62%)

5 existing lines in 1 file now uncovered.

6540 of 11876 relevant lines covered (55.07%)

6.26 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/internal/sso/create/create.go
1
package create
2

3
import (
4
        "context"
5
        "net/http"
6
        "os"
7

8
        "github.com/go-errors/errors"
9
        "github.com/spf13/afero"
10
        "github.com/supabase/cli/internal/sso/internal/render"
11
        "github.com/supabase/cli/internal/sso/internal/saml"
12
        "github.com/supabase/cli/internal/utils"
13
        "github.com/supabase/cli/pkg/api"
14
        "github.com/supabase/cli/pkg/cast"
15
)
16

17
var Fs = afero.NewOsFs()
18

19
type RunParams struct {
20
        ProjectRef string
21
        Format     string
22

23
        Type              string
24
        Domains           []string
25
        MetadataFile      string
26
        MetadataURL       string
27
        SkipURLValidation bool
28
        AttributeMapping  string
29
        NameIDFormat      string
30
}
31

32
func Run(ctx context.Context, params RunParams) error {
×
33
        var body api.V1CreateASsoProviderJSONRequestBody
×
34
        body.Type = api.CreateProviderBodyType(params.Type)
×
35

×
36
        if params.MetadataFile != "" {
×
37
                data, err := saml.ReadMetadataFile(Fs, params.MetadataFile)
×
38
                if err != nil {
×
39
                        return err
×
40
                }
×
41

42
                body.MetadataXml = &data
×
43
        } else if params.MetadataURL != "" {
×
44
                if !params.SkipURLValidation {
×
45
                        if err := saml.ValidateMetadataURL(ctx, params.MetadataURL); err != nil {
×
46
                                return errors.Errorf("%w Use --skip-url-validation to suppress this error", err)
×
47
                        }
×
48
                }
49

50
                body.MetadataUrl = &params.MetadataURL
×
51
        }
52

53
        if params.AttributeMapping != "" {
×
54
                body.AttributeMapping = &struct {
×
55
                        Keys map[string]struct {
×
56
                                Array   *bool     "json:\"array,omitempty\""
×
57
                                Default *any      "json:\"default,omitempty\""
×
58
                                Name    *string   "json:\"name,omitempty\""
×
59
                                Names   *[]string "json:\"names,omitempty\""
×
60
                        } "json:\"keys\""
×
61
                }{}
×
62
                if err := saml.ReadAttributeMappingFile(Fs, params.AttributeMapping, body.AttributeMapping); err != nil {
×
63
                        return err
×
64
                }
×
65
        }
66

67
        if params.Domains != nil {
×
68
                body.Domains = &params.Domains
×
69
        }
×
70

NEW
71
        if params.NameIDFormat != "" {
×
NEW
72
                body.NameIdFormat = cast.Ptr(api.CreateProviderBodyNameIdFormat(params.NameIDFormat))
×
NEW
73
        }
×
74

75
        resp, err := utils.GetSupabase().V1CreateASsoProviderWithResponse(ctx, params.ProjectRef, body)
×
76
        if err != nil {
×
77
                return errors.Errorf("failed to create sso provider: %w", err)
×
78
        }
×
79

80
        if resp.JSON201 == nil {
×
81
                if resp.StatusCode() == http.StatusNotFound {
×
82
                        return errors.New("SAML 2.0 support is not enabled for this project. Please enable it through the dashboard")
×
83
                }
×
84

85
                return errors.New("Unexpected error adding identity provider: " + string(resp.Body))
×
86
        }
87

88
        switch params.Format {
×
89
        case utils.OutputPretty:
×
90
                return render.SingleMarkdown(api.GetProviderResponse(*resp.JSON201))
×
91
        case utils.OutputEnv:
×
92
                return nil
×
93
        default:
×
94
                return utils.EncodeOutput(params.Format, os.Stdout, resp.JSON201)
×
95
        }
96
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc