diff --git a/app/package-lock.json b/app/package-lock.json index f903c7f..4f02a7b 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@authorizerdev/authorizer-react": "0.9.0-beta.6", + "@authorizerdev/authorizer-react": "0.9.0-beta.7", "@types/react": "^17.0.15", "@types/react-dom": "^17.0.9", "esbuild": "^0.12.17", @@ -24,9 +24,9 @@ } }, "node_modules/@authorizerdev/authorizer-js": { - "version": "0.4.0-beta.0", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-js/-/authorizer-js-0.4.0-beta.0.tgz", - "integrity": "sha512-wNh5ROldNqdbOXFPDlq1tObzPZyEQkbnOvSEwvnDfPYb9/BsJ3naj3/ayz4J2R5k2+Eyuk0LK64XYdkfIW0HYA==", + "version": "0.4.0-beta.3", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-js/-/authorizer-js-0.4.0-beta.3.tgz", + "integrity": "sha512-OGZc6I6cnpi/WkSotkjVIc3LEzl8pFeiohr8+Db9xWd75/oTfOZqWRuIHTnTc1FC+6Sv2EjTJ9Aa6lrloWG+NQ==", "dependencies": { "node-fetch": "^2.6.1" }, @@ -35,11 +35,11 @@ } }, "node_modules/@authorizerdev/authorizer-react": { - "version": "0.9.0-beta.6", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.6.tgz", - "integrity": "sha512-5kGUUb0d/GQD24eoHeB/4WOloYeMT//Pdch8xmOKUetHk3t62rPtu1ADmitcfkhJUlM9St3fRZsaubPqdE9tvg==", + "version": "0.9.0-beta.7", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.7.tgz", + "integrity": "sha512-hCGsVionKMZNk+uD0CLtMIkUzhQqpHbVntko3rY+O7ouOrTrikY/WQVPbo1bqX1cu/6/cHE4RVU3cZ7V5xnxVg==", "dependencies": { - "@authorizerdev/authorizer-js": "^0.4.0-beta.0", + "@authorizerdev/authorizer-js": "^0.4.0-beta.3", "final-form": "^4.20.2", "react-final-form": "^6.5.3", "styled-components": "^5.3.0" @@ -829,19 +829,19 @@ }, "dependencies": { "@authorizerdev/authorizer-js": { - "version": "0.4.0-beta.0", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-js/-/authorizer-js-0.4.0-beta.0.tgz", - "integrity": "sha512-wNh5ROldNqdbOXFPDlq1tObzPZyEQkbnOvSEwvnDfPYb9/BsJ3naj3/ayz4J2R5k2+Eyuk0LK64XYdkfIW0HYA==", + "version": "0.4.0-beta.3", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-js/-/authorizer-js-0.4.0-beta.3.tgz", + "integrity": "sha512-OGZc6I6cnpi/WkSotkjVIc3LEzl8pFeiohr8+Db9xWd75/oTfOZqWRuIHTnTc1FC+6Sv2EjTJ9Aa6lrloWG+NQ==", "requires": { "node-fetch": "^2.6.1" } }, "@authorizerdev/authorizer-react": { - "version": "0.9.0-beta.6", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.6.tgz", - "integrity": "sha512-5kGUUb0d/GQD24eoHeB/4WOloYeMT//Pdch8xmOKUetHk3t62rPtu1ADmitcfkhJUlM9St3fRZsaubPqdE9tvg==", + "version": "0.9.0-beta.7", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.7.tgz", + "integrity": "sha512-hCGsVionKMZNk+uD0CLtMIkUzhQqpHbVntko3rY+O7ouOrTrikY/WQVPbo1bqX1cu/6/cHE4RVU3cZ7V5xnxVg==", "requires": { - "@authorizerdev/authorizer-js": "^0.4.0-beta.0", + "@authorizerdev/authorizer-js": "^0.4.0-beta.3", "final-form": "^4.20.2", "react-final-form": "^6.5.3", "styled-components": "^5.3.0" diff --git a/app/package.json b/app/package.json index 2076745..951d93f 100644 --- a/app/package.json +++ b/app/package.json @@ -11,7 +11,7 @@ "author": "Lakhan Samani", "license": "ISC", "dependencies": { - "@authorizerdev/authorizer-react": "0.9.0-beta.6", + "@authorizerdev/authorizer-react": "0.9.0-beta.7", "@types/react": "^17.0.15", "@types/react-dom": "^17.0.9", "esbuild": "^0.12.17", diff --git a/dashboard/src/components/Menu.tsx b/dashboard/src/components/Menu.tsx index 342e2c2..a8e2fdd 100644 --- a/dashboard/src/components/Menu.tsx +++ b/dashboard/src/components/Menu.tsx @@ -29,10 +29,11 @@ import { } from 'react-icons/fi'; import { IconType } from 'react-icons'; import { ReactText } from 'react'; -import { useMutation } from 'urql'; +import { useMutation, useQuery } from 'urql'; import { NavLink, useNavigate, useLocation } from 'react-router-dom'; import { useAuthContext } from '../contexts/AuthContext'; import { AdminLogout } from '../graphql/mutation'; +import { MetaQuery } from '../graphql/queries'; interface LinkItemProps { name: string; @@ -51,6 +52,7 @@ interface SidebarProps extends BoxProps { export const Sidebar = ({ onClose, ...rest }: SidebarProps) => { const { pathname } = useLocation(); + const [{ fetching, data }] = useQuery({ query: MetaQuery }); return ( { > API Playground + + {data?.meta?.version && ( + + Current Version: {data.meta.version} + + )} ); }; diff --git a/dashboard/src/graphql/queries/index.ts b/dashboard/src/graphql/queries/index.ts index b4efc70..8528f3f 100644 --- a/dashboard/src/graphql/queries/index.ts +++ b/dashboard/src/graphql/queries/index.ts @@ -1,3 +1,12 @@ +export const MetaQuery = ` + query MetaQuery { + meta { + version + client_id + } + } +`; + export const AdminSessionQuery = ` query { _admin_session{ diff --git a/dashboard/src/layouts/AuthLayout.tsx b/dashboard/src/layouts/AuthLayout.tsx index f115b38..dbe51ff 100644 --- a/dashboard/src/layouts/AuthLayout.tsx +++ b/dashboard/src/layouts/AuthLayout.tsx @@ -1,8 +1,10 @@ -import { Box, Center, Flex, Image, Text } from '@chakra-ui/react'; +import { Box, Flex, Image, Text, Spinner } from '@chakra-ui/react'; import React from 'react'; -import { LOGO_URL } from '../constants'; +import { useQuery } from 'urql'; +import { MetaQuery } from '../graphql/queries'; export function AuthLayout({ children }: { children: React.ReactNode }) { + const [{ fetching, data }] = useQuery({ query: MetaQuery }); return ( - - {children} - + {fetching ? ( + + ) : ( + <> + + {children} + + + Current Version: {data.meta.version} + + + )} ); } diff --git a/dashboard/src/pages/Auth.tsx b/dashboard/src/pages/Auth.tsx index be11ab8..2610dd1 100644 --- a/dashboard/src/pages/Auth.tsx +++ b/dashboard/src/pages/Auth.tsx @@ -6,7 +6,6 @@ import { useToast, VStack, Text, - Divider, } from '@chakra-ui/react'; import React, { useEffect } from 'react'; import { useMutation } from 'urql'; diff --git a/server/graph/generated/generated.go b/server/graph/generated/generated.go index 3327538..817dd79 100644 --- a/server/graph/generated/generated.go +++ b/server/graph/generated/generated.go @@ -1343,6 +1343,7 @@ input SignUpInput { password: String! confirm_password: String! roles: [String!] + scope: [String!] } input LoginInput { @@ -7298,6 +7299,14 @@ func (ec *executionContext) unmarshalInputSignUpInput(ctx context.Context, obj i if err != nil { return it, err } + case "scope": + var err error + + ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("scope")) + it.Scope, err = ec.unmarshalOString2ᚕstringᚄ(ctx, v) + if err != nil { + return it, err + } } } diff --git a/server/graph/model/models_gen.go b/server/graph/model/models_gen.go index 9f4cdd9..ea069e5 100644 --- a/server/graph/model/models_gen.go +++ b/server/graph/model/models_gen.go @@ -153,6 +153,7 @@ type SignUpInput struct { Password string `json:"password"` ConfirmPassword string `json:"confirm_password"` Roles []string `json:"roles"` + Scope []string `json:"scope"` } type UpdateEnvInput struct { diff --git a/server/graph/schema.graphqls b/server/graph/schema.graphqls index cf76429..18a727c 100644 --- a/server/graph/schema.graphqls +++ b/server/graph/schema.graphqls @@ -181,6 +181,7 @@ input SignUpInput { password: String! confirm_password: String! roles: [String!] + scope: [String!] } input LoginInput { diff --git a/server/graph/schema.resolvers.go b/server/graph/schema.resolvers.go index 8830195..245d7d8 100644 --- a/server/graph/schema.resolvers.go +++ b/server/graph/schema.resolvers.go @@ -109,7 +109,5 @@ func (r *Resolver) Mutation() generated.MutationResolver { return &mutationResol // Query returns generated.QueryResolver implementation. func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} } -type ( - mutationResolver struct{ *Resolver } - queryResolver struct{ *Resolver } -) +type mutationResolver struct{ *Resolver } +type queryResolver struct{ *Resolver } diff --git a/server/resolvers/signup.go b/server/resolvers/signup.go index 2f15f15..308d284 100644 --- a/server/resolvers/signup.go +++ b/server/resolvers/signup.go @@ -151,6 +151,9 @@ func SignupResolver(ctx context.Context, params model.SignUpInput) (*model.AuthR } } else { scope := []string{"openid", "email", "profile"} + if params.Scope != nil && len(scope) > 0 { + scope = params.Scope + } authToken, err := token.CreateAuthToken(gc, user, roles, scope) if err != nil {