Skip to content

Commit

Permalink
Merge pull request #94 from rnsdomains/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
ilanolkies authored Dec 13, 2019
2 parents 7aa01ed + 463351d commit a5ad52d
Show file tree
Hide file tree
Showing 19 changed files with 280 additions and 36 deletions.
43 changes: 31 additions & 12 deletions src/app/tabs/registrar/components/RegistrarComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class RegistrarComponent extends Component {

render() {
const {
strings, domain, owned, blocked, domainStateLoading,
strings, domain, owned, blocked, domainStateLoading, owner, requestingOwner,
} = this.props;
const { invalid } = this.state;

Expand All @@ -46,17 +46,31 @@ class RegistrarComponent extends Component {
} else if (domainStateLoading) {
elementToRender = <Spinner animation="grow" variant="primary" />;
} else if (owned) {
elementToRender = (
<Card.Text>
{strings.owned}
<br />
<Link to={`/admin?domain=${domain}`} className="btn btn-primary">{strings.admin_your_domain_title}</Link>
<br />
<Link to="/search">{strings.search_another_domain}</Link>
</Card.Text>
);
if (requestingOwner) {
elementToRender = (
<Card.Text>
{strings.owned}
<br />
<Spinner animation="grow" variant="primary" />
</Card.Text>
);
} else {
elementToRender = (
<Card.Text>
{strings.owned}
<br />
<strong>
{strings.owner}
{': '}
</strong>
{owner}
<br />
<Link to={`/resolve?name=${domain}.rsk`} className="btn btn-primary">{strings.resolve}</Link>
</Card.Text>
);
}
} else if (blocked) {
elementToRender = <h4>{strings.domain_not_available}</h4>;
elementToRender = <h4>{strings.blocked_domain}</h4>;
} else {
const domainDisplay = `${domain}.rsk`;

Expand Down Expand Up @@ -90,21 +104,26 @@ RegistrarComponent.propTypes = {
strings: propTypes.shape({
start_registration_for: propTypes.string.isRequired,
rental_period: propTypes.string.isRequired,
domain_not_available: propTypes.string.isRequired,
blocked_domain: propTypes.string.isRequired,
admin_your_domain_title: propTypes.string.isRequired,
owned: propTypes.string.isRequired,
search_another_domain: propTypes.string.isRequired,
owner: propTypes.string.isRequired,
resolve: propTypes.string.isRequired,
}).isRequired,
domain: propTypes.string.isRequired,
domainStateLoading: propTypes.bool.isRequired,
owned: propTypes.bool,
blocked: propTypes.bool,
owner: propTypes.string,
requestingOwner: propTypes.bool.isRequired,
getState: propTypes.func.isRequired,
};

RegistrarComponent.defaultProps = {
owned: false,
blocked: false,
owner: '',
};

export default multilanguage(RegistrarComponent);
2 changes: 2 additions & 0 deletions src/app/tabs/registrar/containers/RegistrarContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ const mapStateToProps = state => ({
domain: parse(state.router.location.search).domain,
domainStateLoading: state.search.domainStateLoading,
owned: state.search.owned,
owner: state.search.owner,
blocked: state.search.blocked,
requestingOwner: state.search.requestingOwner,
});

const mapDispatchToProps = dispatch => ({
Expand Down
6 changes: 1 addition & 5 deletions src/app/tabs/registrar/helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,7 @@ export const getRegisterData = (name, owner, secret, duration) => {
const dataOwner = owner.toLowerCase().slice(2);

// 32 bytes
let dataSecret = secret.slice(2);
const padding = 64 - dataSecret.length;
for (let i = 0; i < padding; i += 1) {
dataSecret += '0';
}
const dataSecret = secret.slice(2);

// 32 bytes
const dataDuration = numberToUint32(duration);
Expand Down
3 changes: 2 additions & 1 deletion src/app/tabs/registrar/operations.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ export const commit = domain => async (dispatch) => {
dispatch(requestCommitRegistrar());

const randomBytes = window.crypto.getRandomValues(new Uint8Array(32));
const salt = `0x${Array.from(randomBytes).map(byte => byte.toString(16)).join('')}`;
const strSalt = Array.from(randomBytes).map(byte => byte.toString(16)).join('');
const salt = `0x${strSalt.padEnd(64, '0')}`;

const accounts = await window.ethereum.enable();
const currentAddress = accounts[0];
Expand Down
21 changes: 21 additions & 0 deletions src/app/tabs/search/abis.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,27 @@
"payable": false,
"stateMutability": "view",
"type": "function"
},
{
"constant": true,
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
]
}
14 changes: 13 additions & 1 deletion src/app/tabs/search/actions.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { REQUEST_DOMAIN_STATE, RECEIVE_DOMAIN_STATE, BLOCKED_DOMAIN } from './types';
import {
REQUEST_DOMAIN_STATE, RECEIVE_DOMAIN_STATE,
BLOCKED_DOMAIN, REQUEST_DOMAIN_OWNER, RECEIVE_DOMAIN_OWNER,
} from './types';

export const requestDomainState = () => ({
type: REQUEST_DOMAIN_STATE,
Expand All @@ -9,6 +12,15 @@ export const receiveDomainState = available => ({
owned: !available,
});

export const requestDomainOwner = () => ({
type: REQUEST_DOMAIN_OWNER,
});

export const receiveDomainOwner = owner => ({
type: RECEIVE_DOMAIN_OWNER,
owner,
});

export const blockedDomain = () => ({
type: BLOCKED_DOMAIN,
});
32 changes: 27 additions & 5 deletions src/app/tabs/search/components/DomainStateComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,40 @@ import {
import { multilanguage } from 'redux-multilanguage';
import { isValidName } from '../../../validations';

function getDisplayState(domain, domainStateLoading, owned, blocked, strings) {
// eslint-disable-next-line max-len
function getDisplayState(domain, domainStateLoading, owned, blocked, owner, requestingOwner, strings) {
if (!domain) return 'Search for a domain.';
if (domainStateLoading) return <Spinner animation="grow" variant="primary" />;

if (owned) {
if (requestingOwner) {
return (
<Card.Text>
{strings.owned}
<br />
<Spinner animation="grow" variant="primary" />
</Card.Text>
);
}
return (
<Card.Text>
{strings.owned}
<br />
<Link to={`/admin?domain=${domain}`} className="btn btn-primary">{strings.admin_your_domain_title}</Link>
<strong>
{strings.owner}
{': '}
</strong>
{owner}
<br />
<Link to={`/resolve?name=${domain}.rsk`} className="btn btn-primary">{strings.resolve}</Link>
<br />
<Link to="/search">{strings.search_another_domain}</Link>
</Card.Text>
);
}

if (blocked) {
return strings.domain_not_available;
return strings.blocked_domain;
}

return (
Expand Down Expand Up @@ -90,7 +106,7 @@ class DomainStateComponent extends Component {

render() {
const {
strings, domain, owned, domainStateLoading, blocked,
strings, domain, owned, domainStateLoading, blocked, owner, requestingOwner,
} = this.props;
const { searchValue, invalid, showProcess } = this.state;

Expand All @@ -100,7 +116,9 @@ class DomainStateComponent extends Component {
domainDisplay = domain.split('.').length === 1 ? `${domain}.rsk` : domain;
}

const displayState = getDisplayState(domain, domainStateLoading, owned, blocked, strings);
const displayState = getDisplayState(
domain, domainStateLoading, owned, blocked, owner, requestingOwner, strings,
);

return (
<Container>
Expand Down Expand Up @@ -171,17 +189,21 @@ DomainStateComponent.propTypes = {
process_step_3: propTypes.string.isRequired,
learn_more: propTypes.string.isRequired,
rskTld: propTypes.string.isRequired,
blocked_domain: propTypes.string.isRequired,
}).isRequired,
domain: propTypes.string.isRequired,
owned: propTypes.bool,
owner: propTypes.string,
blocked: propTypes.bool,
requestingOwner: propTypes.bool.isRequired,
domainStateLoading: propTypes.bool.isRequired,
getState: propTypes.func.isRequired,
search: propTypes.func.isRequired,
};

DomainStateComponent.defaultProps = {
owned: false,
owner: '',
blocked: false,
};

Expand Down
2 changes: 2 additions & 0 deletions src/app/tabs/search/containers/DomainStateContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ const mapStateToProps = state => ({
domain: parse(state.router.location.search).domain || '',
domainStateLoading: state.search.domainStateLoading,
owned: state.search.owned,
owner: state.search.owner,
blocked: state.search.blocked,
requestingOwner: state.search.requestingOwner,
});

const mapDispatchToProps = dispatch => ({
Expand Down
11 changes: 9 additions & 2 deletions src/app/tabs/search/operations.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import Web3 from 'web3';
import { keccak_256 as sha3 } from 'js-sha3';
import { requestDomainState, receiveDomainState, blockedDomain } from './actions';
import {
requestDomainState, receiveDomainState, blockedDomain,
requestDomainOwner, receiveDomainOwner,
} from './actions';
import { rskOwner as rskOwnerAddress } from '../../../config/contracts.json';
import { notifyError } from '../../notifications';
import { rskMain } from '../../../config/nodes.json';
Expand All @@ -26,7 +29,11 @@ export default domain => (dispatch) => {
return rskOwner.methods.available(hash).call()
.then((available) => {
if (!available) {
return dispatch(receiveDomainState(false));
dispatch(receiveDomainState(false));
dispatch(requestDomainOwner());
return rskOwner.methods.ownerOf(hash).call()
.then(owner => dispatch(receiveDomainOwner(owner)))
.catch(error => dispatch(notifyError(error.message)));
}

return dispatch(receiveDomainState(available));
Expand Down
20 changes: 19 additions & 1 deletion src/app/tabs/search/reducer.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
import { REQUEST_DOMAIN_STATE, RECEIVE_DOMAIN_STATE, BLOCKED_DOMAIN } from './types';
import {
REQUEST_DOMAIN_STATE, RECEIVE_DOMAIN_STATE, BLOCKED_DOMAIN,
REQUEST_DOMAIN_OWNER, RECEIVE_DOMAIN_OWNER,
} from './types';

// TODO: check initial state
const initialState = {
owned: undefined,
owner: undefined,
domainStateLoading: false,
blocked: undefined,
requestingOwner: false,
};

const searchReducer = (state = initialState, action) => {
Expand All @@ -30,6 +35,19 @@ const searchReducer = (state = initialState, action) => {
blocked: true,
};
}
case REQUEST_DOMAIN_OWNER: {
return {
...state,
requestingOwner: true,
};
}
case RECEIVE_DOMAIN_OWNER: {
return {
...state,
requestingOwner: false,
owner: action.owner,
};
}
default: return state;
}
};
Expand Down
Loading

0 comments on commit a5ad52d

Please sign in to comment.