@ -1,11 +1,9 @@
import React from 'react' ;
import React , { createContext , useEffect , useState } from 'react' ;
import { PromiseUtils , StringUtils , ToastUtils , UserUtils } from '../../../session/utils' ;
import { PromiseUtils , StringUtils , ToastUtils , UserUtils } from '../../../session/utils' ;
import { getConversationController } from '../../../session/conversations' ;
import { getConversationController } from '../../../session/conversations' ;
import { createOrUpdateItem , removeAll } from '../../../data/data' ;
import { createOrUpdateItem , removeAll } from '../../../data/data' ;
import { SignUpTab } from './SignUpTab' ;
import { SignUpTab } from './SignUpTab' ;
import { SignInTab } from './SignInTab' ;
import { SignInTab } from './SignInTab' ;
import { TabLabel , TabType } from './TabLabel' ;
import { trigger } from '../../../shims/events' ;
import { trigger } from '../../../shims/events' ;
import {
import {
generateMnemonic ,
generateMnemonic ,
@ -21,12 +19,6 @@ import { getSwarmPollingInstance } from '../../../session/snode_api/swarmPolling
export const MAX_USERNAME_LENGTH = 20 ;
export const MAX_USERNAME_LENGTH = 20 ;
// tslint:disable: use-simple-attributes
// tslint:disable: use-simple-attributes
interface State {
selectedTab : TabType ;
generatedRecoveryPhrase : string ;
hexGeneratedPubKey : string ;
}
export async function resetRegistration() {
export async function resetRegistration() {
await removeAll ( ) ;
await removeAll ( ) ;
await window . storage . reset ( ) ;
await window . storage . reset ( ) ;
@ -158,45 +150,39 @@ export async function signInWithLinking(signInDetails: { userRecoveryPhrase: str
window ? . log ? . warn ( 'exception during registration:' , e ) ;
window ? . log ? . warn ( 'exception during registration:' , e ) ;
}
}
}
}
export class RegistrationTabs extends React . Component < any , State > {
constructor ( props : any ) {
super ( props ) ;
this . state = {
selectedTab : TabType.SignUp ,
generatedRecoveryPhrase : '' ,
hexGeneratedPubKey : '' ,
} ;
}
public componentDidMount() {
export enum RegistrationPhase {
void this . generateMnemonicAndKeyPair ( ) ;
Start ,
void resetRegistration ( ) ;
SignIn ,
}
SignUp ,
}
public render() {
interface RegistrationPhaseContext {
const { selectedTab } = this . state ;
registrationPhase : RegistrationPhase ;
setRegistrationPhase : ( phase : RegistrationPhase ) = > void ;
return (
generatedRecoveryPhrase : string ;
< div className = "session-registration-container" >
hexGeneratedPubKey : string ;
< div className = "session-registration__tab-container" >
}
< TabLabel
type = { TabType . SignUp }
export const RegistrationContext = createContext < RegistrationPhaseContext > ( {
isSelected = { selectedTab === TabType . SignUp }
registrationPhase : RegistrationPhase.Start ,
onSelect = { this . handleTabSelect }
setRegistrationPhase : ( ) = > undefined ,
/ >
generatedRecoveryPhrase : '' ,
< TabLabel
hexGeneratedPubKey : '' ,
type = { TabType . SignIn }
} ) ;
isSelected = { selectedTab === TabType . SignIn }
onSelect = { this . handleTabSelect }
/ >
< / div >
{ this . renderSections ( ) }
< / div >
) ;
}
private async generateMnemonicAndKeyPair() {
export const RegistrationStages = ( ) = > {
if ( this . state . generatedRecoveryPhrase === '' ) {
const [ generatedRecoveryPhrase , setGeneratedRecoveryPhrase ] = useState ( '' ) ;
const [ hexGeneratedPubKey , setHexGeneratedPubKey ] = useState ( '' ) ;
const [ registrationPhase , setRegistrationPhase ] = useState ( RegistrationPhase . Start ) ;
useEffect ( ( ) = > {
void generateMnemonicAndKeyPair ( ) ;
void resetRegistration ( ) ;
} , [ ] ) ;
const generateMnemonicAndKeyPair = async ( ) = > {
if ( generatedRecoveryPhrase === '' ) {
const mnemonic = await generateMnemonic ( ) ;
const mnemonic = await generateMnemonic ( ) ;
let seedHex = mn_decode ( mnemonic ) ;
let seedHex = mn_decode ( mnemonic ) ;
@ -208,32 +194,28 @@ export class RegistrationTabs extends React.Component<any, State> {
}
}
const seed = fromHex ( seedHex ) ;
const seed = fromHex ( seedHex ) ;
const keyPair = await sessionGenerateKeyPair ( seed ) ;
const keyPair = await sessionGenerateKeyPair ( seed ) ;
const hexGenerated PubKey = StringUtils . decode ( keyPair . pubKey , 'hex' ) ;
const newHex PubKey = StringUtils . decode ( keyPair . pubKey , 'hex' ) ;
this . setState ( {
setGeneratedRecoveryPhrase ( mnemonic ) ;
generatedRecoveryPhrase : mnemonic ,
setHexGeneratedPubKey ( newHexPubKey ) ; // our 'frontend' sessionID
hexGeneratedPubKey , // our 'frontend' sessionID
} ) ;
}
}
}
private readonly handleTabSelect = ( tabType : TabType ) : void = > {
this . setState ( {
selectedTab : tabType ,
} ) ;
} ;
} ;
private renderSections() {
return (
const { selectedTab , generatedRecoveryPhrase , hexGeneratedPubKey } = this . state ;
< div className = "session-registration-container" >
if ( selectedTab === TabType . SignUp ) {
< RegistrationContext.Provider
return (
value = { {
< SignUpTab
registrationPhase ,
generatedRecoveryPhrase = { generatedRecoveryPhrase }
setRegistrationPhase ,
hexGeneratedPubKey = { hexGeneratedPubKey }
generatedRecoveryPhrase ,
/ >
hexGeneratedPubKey ,
) ;
} }
}
>
{ ( registrationPhase === RegistrationPhase . Start ||
return < SignInTab / > ;
registrationPhase === RegistrationPhase . SignUp ) && < SignUpTab / > }
}
{ ( registrationPhase === RegistrationPhase . Start ||
}
registrationPhase === RegistrationPhase . SignIn ) && < SignInTab / > }
< / RegistrationContext.Provider >
< / div >
) ;
} ;