func toInformationReleasePageArgs()

in lib/ic/info_release.go [56:145]


func toInformationReleasePageArgs(id *ga4gh.Identity, stateID, clientName, scope, consentDashboard string) *informationReleasePageArgs {
	dashboardURL := strings.ReplaceAll(consentDashboard, "${USER_ID}", id.Subject)
	args := &informationReleasePageArgs{
		ID:                  id.Subject,
		ApplicationName:     clientName,
		Scope:               scope,
		AssetDir:            assetPath,
		Information:         map[string][]*informationItem{},
		State:               stateID,
		ConsentDashboardURL: dashboardURL,
	}

	for _, s := range strings.Split(scope, " ") {
		switch {
		case s == "openid":
			continue

		case s == "offline":
			args.Offline = true

		case s == "profile":
			if len(id.Name) != 0 {
				args.Information["Profile"] = append(args.Information["Profile"], &informationItem{
					ID:    "profile.name",
					Title: "Name",
					Value: id.Name,
				})
			}
			if len(id.Email) != 0 {
				args.Information["Profile"] = append(args.Information["Profile"], &informationItem{
					ID:    "profile.email",
					Title: "Email",
					Value: id.Email,
				})
			}
			if len(id.Picture) > 0 || len(id.Locale) > 0 {
				args.Information["Profile"] = append(args.Information["Profile"], &informationItem{
					ID:    "profile.others",
					Title: "Others",
					Value: "Picture,Locale",
				})
			}

		case s == passportScope || s == ga4ghScope:
			for _, v := range id.VisaJWTs {
				info, err := visaToInformationItem(v)
				if err != nil {
					glog.Errorf("convert visa to info failed: %v", err)
					continue
				}

				args.Information["Visas"] = append(args.Information["Visas"], info)
			}

		case s == "account_admin":
			args.Information["Permission"] = append(args.Information["Permission"], &informationItem{
				ID:    "account_admin",
				Title: "account_admin",
				Value: "manage (modify) this account",
			})

		case s == "link":
			args.Information["Permission"] = append(args.Information["Permission"], &informationItem{
				ID:    "link",
				Title: "link",
				Value: "link this account to other accounts",
			})

		case s == "identities":
			if len(id.Identities) == 0 {
				continue
			}
			var ids []string
			for k := range id.Identities {
				ids = append(ids, k)
			}
			args.Information["Profile"] = append(args.Information["Profile"], &informationItem{
				ID:    "identities",
				Title: "Identities",
				Value: strings.Join(ids, ","),
			})

		default:
			// Should not reach here, scope has been validated on Hydra.
			glog.Errorf("Unknown scope: %s", s)
		}
	}

	return args
}