Skip to content

Commit ed8006d

Browse files
committed
2 parents 97f6c7d + 5e3f68a commit ed8006d

File tree

20 files changed

+410
-1
lines changed

20 files changed

+410
-1
lines changed

dashboard/src/components/EnvComponents/OAuthConfig.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
FaFacebookF,
1616
FaLinkedin,
1717
FaApple,
18+
FaTwitter,
1819
} from 'react-icons/fa';
1920
import { TextInputType, HiddenInputType } from '../../constants';
2021

@@ -264,6 +265,44 @@ const OAuthConfig = ({
264265
/>
265266
</Center>
266267
</Flex>
268+
<Flex direction={isNotSmallerScreen ? 'row' : 'column'}>
269+
<Center
270+
w={isNotSmallerScreen ? '55px' : '35px'}
271+
h="35px"
272+
marginRight="1.5%"
273+
border="1px solid #3b5998"
274+
borderRadius="5px"
275+
>
276+
<FaTwitter />
277+
</Center>
278+
<Center
279+
w={isNotSmallerScreen ? '70%' : '100%'}
280+
mt={isNotSmallerScreen ? '0' : '3'}
281+
marginRight="1.5%"
282+
>
283+
<InputField
284+
borderRadius={5}
285+
variables={envVariables}
286+
setVariables={setVariables}
287+
inputType={TextInputType.TWITTER_CLIENT_ID}
288+
placeholder="Twitter Client ID"
289+
/>
290+
</Center>
291+
<Center
292+
w={isNotSmallerScreen ? '70%' : '100%'}
293+
mt={isNotSmallerScreen ? '0' : '3'}
294+
>
295+
<InputField
296+
borderRadius={5}
297+
variables={envVariables}
298+
setVariables={setVariables}
299+
fieldVisibility={fieldVisibility}
300+
setFieldVisibility={setFieldVisibility}
301+
inputType={HiddenInputType.TWITTER_CLIENT_SECRET}
302+
placeholder="Twitter Client Secret"
303+
/>
304+
</Center>
305+
</Flex>
267306
</Stack>
268307
</Box>
269308
</div>

dashboard/src/constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export const TextInputType = {
99
FACEBOOK_CLIENT_ID: 'FACEBOOK_CLIENT_ID',
1010
LINKEDIN_CLIENT_ID: 'LINKEDIN_CLIENT_ID',
1111
APPLE_CLIENT_ID: 'APPLE_CLIENT_ID',
12+
TWITTER_CLIENT_ID: 'TWITTER_CLIENT_ID',
1213
JWT_ROLE_CLAIM: 'JWT_ROLE_CLAIM',
1314
REDIS_URL: 'REDIS_URL',
1415
SMTP_HOST: 'SMTP_HOST',
@@ -35,6 +36,7 @@ export const HiddenInputType = {
3536
FACEBOOK_CLIENT_SECRET: 'FACEBOOK_CLIENT_SECRET',
3637
LINKEDIN_CLIENT_SECRET: 'LINKEDIN_CLIENT_SECRET',
3738
APPLE_CLIENT_SECRET: 'APPLE_CLIENT_SECRET',
39+
TWITTER_CLIENT_SECRET: 'TWITTER_CLIENT_SECRET',
3840
JWT_SECRET: 'JWT_SECRET',
3941
SMTP_PASSWORD: 'SMTP_PASSWORD',
4042
ADMIN_SECRET: 'ADMIN_SECRET',
@@ -110,6 +112,8 @@ export interface envVarTypes {
110112
LINKEDIN_CLIENT_SECRET: string;
111113
APPLE_CLIENT_ID: string;
112114
APPLE_CLIENT_SECRET: string;
115+
TWITTER_CLIENT_ID: string;
116+
TWITTER_CLIENT_SECRET: string;
113117
ROLES: [string] | [];
114118
DEFAULT_ROLES: [string] | [];
115119
PROTECTED_ROLES: [string] | [];

dashboard/src/graphql/queries/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ export const EnvVariablesQuery = `
3030
LINKEDIN_CLIENT_SECRET
3131
APPLE_CLIENT_ID
3232
APPLE_CLIENT_SECRET
33+
TWITTER_CLIENT_ID
34+
TWITTER_CLIENT_SECRET
3335
DEFAULT_ROLES
3436
PROTECTED_ROLES
3537
ROLES

dashboard/src/pages/Environment.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ const Environment = () => {
5050
LINKEDIN_CLIENT_SECRET: '',
5151
APPLE_CLIENT_ID: '',
5252
APPLE_CLIENT_SECRET: '',
53+
TWITTER_CLIENT_ID: '',
54+
TWITTER_CLIENT_SECRET: '',
5355
ROLES: [],
5456
DEFAULT_ROLES: [],
5557
PROTECTED_ROLES: [],
@@ -92,6 +94,7 @@ const Environment = () => {
9294
FACEBOOK_CLIENT_SECRET: false,
9395
LINKEDIN_CLIENT_SECRET: false,
9496
APPLE_CLIENT_SECRET: false,
97+
TWITTER_CLIENT_SECRET: false,
9598
JWT_SECRET: false,
9699
SMTP_PASSWORD: false,
97100
ADMIN_SECRET: false,

server/constants/auth_methods.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ const (
1515
AuthRecipeMethodLinkedIn = "linkedin"
1616
// AuthRecipeMethodApple is the apple auth method
1717
AuthRecipeMethodApple = "apple"
18+
// AuthRecipeMethodTwitter is the twitter auth method
19+
AuthRecipeMethodTwitter = "twitter"
1820
)

server/constants/env.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ const (
8585
EnvKeyAppleClientID = "APPLE_CLIENT_ID"
8686
// EnvKeyAppleClientSecret key for env variable APPLE_CLIENT_SECRET
8787
EnvKeyAppleClientSecret = "APPLE_CLIENT_SECRET"
88+
// EnvKeyTwitterClientID key for env variable TWITTER_CLIENT_ID
89+
EnvKeyTwitterClientID = "TWITTER_CLIENT_ID"
90+
// EnvKeyTwitterClientSecret key for env variable TWITTER_CLIENT_SECRET
91+
EnvKeyTwitterClientSecret = "TWITTER_CLIENT_SECRET"
8892
// EnvKeyOrganizationName key for env variable ORGANIZATION_NAME
8993
EnvKeyOrganizationName = "ORGANIZATION_NAME"
9094
// EnvKeyOrganizationLogo key for env variable ORGANIZATION_LOGO

server/constants/oauth_info_urls.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,6 @@ const (
1414
// Ref: https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api
1515
LinkedInUserInfoURL = "https://api.linkedin.com/v2/me?projection=(id,localizedFirstName,localizedLastName,emailAddress,profilePicture(displayImage~:playableStreams))"
1616
LinkedInEmailURL = "https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))"
17+
18+
TwitterUserInfoURL = "https://api.twitter.com/2/users/me?user.fields=id,name,profile_image_url,username"
1719
)

server/env/env.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ func InitAllEnv() error {
7272
osLinkedInClientSecret := os.Getenv(constants.EnvKeyLinkedInClientSecret)
7373
osAppleClientID := os.Getenv(constants.EnvKeyAppleClientID)
7474
osAppleClientSecret := os.Getenv(constants.EnvKeyAppleClientSecret)
75+
osTwitterClientID := os.Getenv(constants.EnvKeyTwitterClientID)
76+
osTwitterClientSecret := os.Getenv(constants.EnvKeyTwitterClientSecret)
7577
osResetPasswordURL := os.Getenv(constants.EnvKeyResetPasswordURL)
7678
osOrganizationName := os.Getenv(constants.EnvKeyOrganizationName)
7779
osOrganizationLogo := os.Getenv(constants.EnvKeyOrganizationLogo)
@@ -380,6 +382,20 @@ func InitAllEnv() error {
380382
envData[constants.EnvKeyAppleClientSecret] = osAppleClientSecret
381383
}
382384

385+
if val, ok := envData[constants.EnvKeyTwitterClientID]; !ok || val == "" {
386+
envData[constants.EnvKeyTwitterClientID] = osTwitterClientID
387+
}
388+
if osTwitterClientID != "" && envData[constants.EnvKeyTwitterClientID] != osTwitterClientID {
389+
envData[constants.EnvKeyTwitterClientID] = osTwitterClientID
390+
}
391+
392+
if val, ok := envData[constants.EnvKeyTwitterClientSecret]; !ok || val == "" {
393+
envData[constants.EnvKeyTwitterClientSecret] = osTwitterClientSecret
394+
}
395+
if osTwitterClientSecret != "" && envData[constants.EnvKeyTwitterClientSecret] != osTwitterClientSecret {
396+
envData[constants.EnvKeyTwitterClientSecret] = osTwitterClientSecret
397+
}
398+
383399
if val, ok := envData[constants.EnvKeyResetPasswordURL]; !ok || val == "" {
384400
envData[constants.EnvKeyResetPasswordURL] = strings.TrimPrefix(osResetPasswordURL, "/")
385401
}

server/graph/generated/generated.go

Lines changed: 153 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)