coffee-supplychain-ethereum icon indicating copy to clipboard operation
coffee-supplychain-ethereum copied to clipboard

Insufficient access, Your Account is blocked by Admin , Please contact to Admin

Open CheeKeatSong opened this issue 6 years ago • 14 comments

Hi there. I am trying to run the program, but encountered such error.

I run the UI implementation with XAMPP and Metamask is in rinkeby testnet with admin account. For some reasons, it show me this. image

I deployed the contract on remix in rinkeby testnet while followed all your deployment instructions (README.txt) in the contracts folder. image

Afterwards, I pasted the 3 contracts and admin address in the UI app.js. Can you please kindly point out the issue for me? thank you

CheeKeatSong avatar Sep 25 '18 07:09 CheeKeatSong

@CheeKeatSong can you please include the Browser's URL address bar in screenshot posted above

rwaltzsoftware-org avatar Sep 26 '18 07:09 rwaltzsoftware-org

image

Here you go. Also for your FYI, when I manually changed the url to admin.php, it redirects me back to index page.

CheeKeatSong avatar Oct 02 '18 07:10 CheeKeatSong

I have resolved the error. Please show your app.js file here.

rohitshukla11 avatar Jan 31 '19 11:01 rohitshukla11

I have resolved the error. Please show your app.js file here.

var globIcoAddress = { /'old-CoffeeMain': "0xfA171Cda184d815D20a318fCe9920AafdC04934e", 'old-CoffeeUser': "0x26d723acFe39f93A9702592dD9371851f81cF59F",/

	'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d",
	'CoffeeUser': "0x80f7b3Be3e1bAC2664630CeE4431f7855fA80802",
	'Storage': " 0x3C942D65A53Cf9A4D41E84256C27ceEfDE2F84A4"
};

var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d";
var globMainContract = false;
var globUserContract = false;
var globCoinbase = false;	
var globUserData = [];



var web3;
window.addEventListener('load', function() 
{  
	$("#storageContractAddress").html(globIcoAddress.Storage);
	$("#coffeeSupplychainContractAddress").html(globIcoAddress.CoffeeMain);
	$("#userContractAddress").html(globIcoAddress.CoffeeUser);


	if (typeof web3 !== 'undefined') 
	{
		
		web3 = new Web3(web3.currentProvider);
	  // web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
	  console.log("init12", web3);
	} else {
	  // set the provider you want from Web3.providers
	  console.log("init2");
	  web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"));
	}
	
	getCurrentAccountAddress((address)=>{
		/*  To Restrict User in Admin Section */
		var currentPath = window.location.pathname;
		var tmpStack = currentPath.split("/");
		var currentPanel = tmpStack.pop();

		if(currentPanel == "admin.php")
		{
			if(address != globAdminAddress){
				window.location = "index.php";
			}
		}
	});

	console.log("init");
	initContract();

	updateLoginAccountStatus();
	/* setInterval(function () {
		updateLoginAccountStatus();
	}, 500); */
	
});

function initContract()
{
	globMainContract = new web3.eth.Contract(CoffeeSupplyChainAbi,globIcoAddress.CoffeeMain);	
	$(window).trigger("mainContractReady");
	console.log('init 3');
	globUserContract = new web3.eth.Contract(SupplyChainUserAbi,globIcoAddress.CoffeeUser);	
	$(window).trigger("userContractReady");
	console.log('init 4');
}

function updateLoginAccountStatus(){
	console.log('init 5');
	web3.eth.getAccounts(function(err,accounts){

		if(err){
			console.log('An error occurred '+ err);
		}
		else if(accounts.length == 0){
			console.log("Account",accounts.length);
			sweetAlert('Error', 'Please login to MetaMask..!error'+accounts[0], 'error');
			$("#currentUserAddress").html("chandan3");
		}
		else{
			initAccountDetails();
		}
	});
}

function initAccountDetails(){
	/*
	* Get Current wallet account address
	*/
	getCurrentAccountAddress((address)=>{
		globCoinbase = address;	
		$("#currentUserAddress").html(globCoinbase);	
		$(window).trigger("coinbaseReady");		
	});
}


function getCurrentAccountAddress(callback){
	callback = callback || false;

	web3.eth.getCoinbase()
	.then((_coinbase)=>{
		callback(_coinbase);
	})
	.catch((err)=>{
		if(callback){
			callback(0);
		}
	})
}

function getUserDetails(contractRef,userAddress,callback){
	callback = callback || false;

	contractRef.methods.getUser(userAddress).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get User Details","error");
		callback(0);
	});
}

function getCultivationData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getBasicDetails(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Cultivation Details","error");
		callback(0);
	});
}

function getFarmInspectorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getFarmInspectorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Farm Inspection Details","error");
		callback(0);
	});
}

function getHarvesterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getHarvesterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Harvesting Details","error");
		callback(0);
	});
}

function getExporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getExporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Exporting Details","error");
		callback(0);
	});
}

function getImporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getImporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Importing Details","error");
		callback(0);
	});
}

function getProcessorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getProcessorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Processing Details","error");
		callback(0);
	});
}

function getUserEvents(contractRef)
{
    contractRef.getPastEvents('UserUpdate',{
        fromBlock: 0 
    }).then(function (events){

        $("#tblUser").DataTable().destroy();
        $("#tblUser tbody").html(buildUserDetails(events));
        $("#tblUser").DataTable({
        	"displayLength": 3,
        	"order": [[ 1, "asc" ]]
        });
    }).catch((err)=>{
    	console.log(err);
    });
}

function buildUserDetails(events){
	
	var filteredUser = {};
	var isNewUser = false;

	/*filtering latest updated user record*/
	$(events).each(function(index,event){

		if(filteredUser[event.returnValues.user] == undefined)
		{
			filteredUser[event.returnValues.user] = {};
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
		else if(filteredUser[event.returnValues.user].blockNumber < event.blockNumber)
		{
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
	});

	var builtUser = [];
	for(tmpUser in filteredUser)
	{
		builtUser.push(filteredUser[tmpUser]);
	}

	/*build user Table*/
	$("#totalUsers").html(builtUser.length);
	return buildUserTable(builtUser);
}

function buildUserTable(globUserData){

	var tbody = "";
	var roleClass = "";

	$(globUserData).each(function(index,data){

		var role = data.role;	

		if(role == 'FARM_INSPECTION'){
			roleClass = "info";
		}else if(role == 'HARVESTER'){
			roleClass = "success";	
		}else if(role == 'EXPORTER'){
			roleClass = "warning";
		}else if(role == 'IMPORTER'){
			roleClass = "danger";
		}else if(role == 'PROCESSOR'){
			roleClass = "primary";
		}

		tbody += `<tr>
                        <td>`+data.user+`</td>
                        <td>`+data.name+`</td>
                        <td>`+data.contactNo+`</td>
                        <td><span class="label label-`+roleClass+` font-weight-100">`+role+`</span></td>
                        <td><a href="javascript:void(0);" class="text-inverse p-r-10" data-toggle="tooltip" data-userAddress="`+data.user+`" onclick="openEditUser(this);" title="Edit"><i class="ti-marker-alt"></i></a> </td>
                  </tr>`;
	});	

	return tbody;
}

function handleTransactionResponse(txHash,finalMessage)
{
	var txLink = "https://rinkeby.etherscan.io/tx/" + txHash ;
    var txLinkHref = "<a target='_blank' href='"+txLink+"'> Click here for Transaction Status </a>" ;

    sweetAlert("Success", "Please Check Transaction Status here :  "+txLinkHref, "success");

    $("#linkOngoingTransaction").html(txLinkHref);
    $("#divOngoingTransaction").fadeIn();
    /*scroll to top*/
    $('html, body').animate({ scrollTop: 0 }, 'slow', function () {});
}

function handleTransactionReceipt(receipt,finalMessage)
{
	$("#linkOngoingTransaction").html("");
    $("#divOngoingTransaction").fadeOut();

    // sweetAlert("Success", "Token Purchase Complete ", "success");
    sweetAlert("Success", finalMessage, "success");
}

function handleGenericError(error_message)
{
    if(error_message.includes("MetaMask Tx Signature"))
    {
        sweetAlert("Error", "Transaction Refused ", "error");
    }
    else
    {
        // sweetAlert("Error", "Error Occured, Please Try Again , if problem persist get in touch with us. ", "error");
        sweetAlert("Error", error_message, "error");
    }

}


function changeSwitchery(element, checked) {
  if ( ( element.is(':checked') && checked == false ) || ( !element.is(':checked') && checked == true ) ) {
    element.parent().find('.switchery').trigger('click');
  }
}

/*==================================Bootstrap Model Start=========================================*/

function startLoader(){
	$(".preloader").fadeIn();
}

function stopLoader(){
	$(".preloader").fadeOut();
}

/*Set Default inactive*/
$("#userFormClick").click(function(){
    $("#userForm").trigger('reset');
    changeSwitchery($("#isActive"),false);
    $("#userModelTitle").html("Add User");
    $("#imageHash").html('');
    $("#userFormModel").modal();    
});

/*Edit User Model Form*/
function openEditUser(ref){
	var userAddress = $(ref).attr("data-userAddress");
	startLoader();
	getUserDetails(globUserContract,userAddress,function(result){
		$("#userWalletAddress").val(userAddress);
		$("#userName").val(result.name);
		$("#userContactNo").val(result.contactNo);
		$("#userProfileHash").val(result.profileHash);
		$('#userRoles').val(result.role).prop('selected', true);

		var profileImageLink = 'https://ipfs.io/ipfs/'+result.profileHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';
		$("#imageHash").html(btnViewImage);

		changeSwitchery($("#isActive"),result.isActive);
		$("#userModelTitle").html("Update User");
		stopLoader();
		$("#userFormModel").modal();
	});
}

// ipfs = window.IpfsApi('localhost', 5001);
ipfs = window.IpfsApi('ipfs.infura.io', '5001', {protocol: 'https'})

function handleFileUpload(event){
	const file = event.target.files[0];

    let reader = new window.FileReader();
    reader.onloadend = function () {
       $("#userFormBtn").prop('disabled',true);
       $("i.fa-spinner").show();
        $("#imageHash").html('Processing......');	
       saveToIpfs(reader)
    }

    reader.readAsArrayBuffer(file)
}

function saveToIpfs(reader){
	let ipfsId;

    const Buffer = window.IpfsApi().Buffer;
    const buffer = Buffer.from(reader.result);

    /*Upload Buffer to IPFS*/
    ipfs.files.add(buffer, (err, result) => { 
        if (err) {
	          console.error(err)
	          return
		}
		
		var imageHash = result[0].hash;		

		var profileImageLink = 'https://ipfs.io/ipfs/'+imageHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';

        $("#userProfileHash").val(imageHash);
        $("#imageHash").html(btnViewImage);
        
        $("#userFormBtn").prop('disabled',false);
        $("i.fa-spinner").hide();	
    });
}

chandanrai95 avatar Jul 19 '19 07:07 chandanrai95

Write all the addresses in small. For example, Replace 'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d" by 'CoffeeMain': "0x7961442d3a5e13d4933f7dba96f158dbda391c6d" and same for the other two variables.

I have resolved the error. Please show your app.js file here.

var globIcoAddress = { /'old-CoffeeMain': "0xfA171Cda184d815D20a318fCe9920AafdC04934e", 'old-CoffeeUser': "0x26d723acFe39f93A9702592dD9371851f81cF59F",/

	'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d",
	'CoffeeUser': "0x80f7b3Be3e1bAC2664630CeE4431f7855fA80802",
	'Storage': " 0x3C942D65A53Cf9A4D41E84256C27ceEfDE2F84A4"
};

var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d";
var globMainContract = false;
var globUserContract = false;
var globCoinbase = false;	
var globUserData = [];



var web3;
window.addEventListener('load', function() 
{  
	$("#storageContractAddress").html(globIcoAddress.Storage);
	$("#coffeeSupplychainContractAddress").html(globIcoAddress.CoffeeMain);
	$("#userContractAddress").html(globIcoAddress.CoffeeUser);


	if (typeof web3 !== 'undefined') 
	{
		
		web3 = new Web3(web3.currentProvider);
	  // web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
	  console.log("init12", web3);
	} else {
	  // set the provider you want from Web3.providers
	  console.log("init2");
	  web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"));
	}
	
	getCurrentAccountAddress((address)=>{
		/*  To Restrict User in Admin Section */
		var currentPath = window.location.pathname;
		var tmpStack = currentPath.split("/");
		var currentPanel = tmpStack.pop();

		if(currentPanel == "admin.php")
		{
			if(address != globAdminAddress){
				window.location = "index.php";
			}
		}
	});

	console.log("init");
	initContract();

	updateLoginAccountStatus();
	/* setInterval(function () {
		updateLoginAccountStatus();
	}, 500); */
	
});

function initContract()
{
	globMainContract = new web3.eth.Contract(CoffeeSupplyChainAbi,globIcoAddress.CoffeeMain);	
	$(window).trigger("mainContractReady");
	console.log('init 3');
	globUserContract = new web3.eth.Contract(SupplyChainUserAbi,globIcoAddress.CoffeeUser);	
	$(window).trigger("userContractReady");
	console.log('init 4');
}

function updateLoginAccountStatus(){
	console.log('init 5');
	web3.eth.getAccounts(function(err,accounts){

		if(err){
			console.log('An error occurred '+ err);
		}
		else if(accounts.length == 0){
			console.log("Account",accounts.length);
			sweetAlert('Error', 'Please login to MetaMask..!error'+accounts[0], 'error');
			$("#currentUserAddress").html("chandan3");
		}
		else{
			initAccountDetails();
		}
	});
}

function initAccountDetails(){
	/*
	* Get Current wallet account address
	*/
	getCurrentAccountAddress((address)=>{
		globCoinbase = address;	
		$("#currentUserAddress").html(globCoinbase);	
		$(window).trigger("coinbaseReady");		
	});
}


function getCurrentAccountAddress(callback){
	callback = callback || false;

	web3.eth.getCoinbase()
	.then((_coinbase)=>{
		callback(_coinbase);
	})
	.catch((err)=>{
		if(callback){
			callback(0);
		}
	})
}

function getUserDetails(contractRef,userAddress,callback){
	callback = callback || false;

	contractRef.methods.getUser(userAddress).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get User Details","error");
		callback(0);
	});
}

function getCultivationData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getBasicDetails(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Cultivation Details","error");
		callback(0);
	});
}

function getFarmInspectorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getFarmInspectorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Farm Inspection Details","error");
		callback(0);
	});
}

function getHarvesterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getHarvesterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Harvesting Details","error");
		callback(0);
	});
}

function getExporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getExporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Exporting Details","error");
		callback(0);
	});
}

function getImporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getImporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Importing Details","error");
		callback(0);
	});
}

function getProcessorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getProcessorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Processing Details","error");
		callback(0);
	});
}

function getUserEvents(contractRef)
{
    contractRef.getPastEvents('UserUpdate',{
        fromBlock: 0 
    }).then(function (events){

        $("#tblUser").DataTable().destroy();
        $("#tblUser tbody").html(buildUserDetails(events));
        $("#tblUser").DataTable({
        	"displayLength": 3,
        	"order": [[ 1, "asc" ]]
        });
    }).catch((err)=>{
    	console.log(err);
    });
}

function buildUserDetails(events){
	
	var filteredUser = {};
	var isNewUser = false;

	/*filtering latest updated user record*/
	$(events).each(function(index,event){

		if(filteredUser[event.returnValues.user] == undefined)
		{
			filteredUser[event.returnValues.user] = {};
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
		else if(filteredUser[event.returnValues.user].blockNumber < event.blockNumber)
		{
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
	});

	var builtUser = [];
	for(tmpUser in filteredUser)
	{
		builtUser.push(filteredUser[tmpUser]);
	}

	/*build user Table*/
	$("#totalUsers").html(builtUser.length);
	return buildUserTable(builtUser);
}

function buildUserTable(globUserData){

	var tbody = "";
	var roleClass = "";

	$(globUserData).each(function(index,data){

		var role = data.role;	

		if(role == 'FARM_INSPECTION'){
			roleClass = "info";
		}else if(role == 'HARVESTER'){
			roleClass = "success";	
		}else if(role == 'EXPORTER'){
			roleClass = "warning";
		}else if(role == 'IMPORTER'){
			roleClass = "danger";
		}else if(role == 'PROCESSOR'){
			roleClass = "primary";
		}

		tbody += `<tr>
                        <td>`+data.user+`</td>
                        <td>`+data.name+`</td>
                        <td>`+data.contactNo+`</td>
                        <td><span class="label label-`+roleClass+` font-weight-100">`+role+`</span></td>
                        <td><a href="javascript:void(0);" class="text-inverse p-r-10" data-toggle="tooltip" data-userAddress="`+data.user+`" onclick="openEditUser(this);" title="Edit"><i class="ti-marker-alt"></i></a> </td>
                  </tr>`;
	});	

	return tbody;
}

function handleTransactionResponse(txHash,finalMessage)
{
	var txLink = "https://rinkeby.etherscan.io/tx/" + txHash ;
    var txLinkHref = "<a target='_blank' href='"+txLink+"'> Click here for Transaction Status </a>" ;

    sweetAlert("Success", "Please Check Transaction Status here :  "+txLinkHref, "success");

    $("#linkOngoingTransaction").html(txLinkHref);
    $("#divOngoingTransaction").fadeIn();
    /*scroll to top*/
    $('html, body').animate({ scrollTop: 0 }, 'slow', function () {});
}

function handleTransactionReceipt(receipt,finalMessage)
{
	$("#linkOngoingTransaction").html("");
    $("#divOngoingTransaction").fadeOut();

    // sweetAlert("Success", "Token Purchase Complete ", "success");
    sweetAlert("Success", finalMessage, "success");
}

function handleGenericError(error_message)
{
    if(error_message.includes("MetaMask Tx Signature"))
    {
        sweetAlert("Error", "Transaction Refused ", "error");
    }
    else
    {
        // sweetAlert("Error", "Error Occured, Please Try Again , if problem persist get in touch with us. ", "error");
        sweetAlert("Error", error_message, "error");
    }

}


function changeSwitchery(element, checked) {
  if ( ( element.is(':checked') && checked == false ) || ( !element.is(':checked') && checked == true ) ) {
    element.parent().find('.switchery').trigger('click');
  }
}

/*==================================Bootstrap Model Start=========================================*/

function startLoader(){
	$(".preloader").fadeIn();
}

function stopLoader(){
	$(".preloader").fadeOut();
}

/*Set Default inactive*/
$("#userFormClick").click(function(){
    $("#userForm").trigger('reset');
    changeSwitchery($("#isActive"),false);
    $("#userModelTitle").html("Add User");
    $("#imageHash").html('');
    $("#userFormModel").modal();    
});

/*Edit User Model Form*/
function openEditUser(ref){
	var userAddress = $(ref).attr("data-userAddress");
	startLoader();
	getUserDetails(globUserContract,userAddress,function(result){
		$("#userWalletAddress").val(userAddress);
		$("#userName").val(result.name);
		$("#userContactNo").val(result.contactNo);
		$("#userProfileHash").val(result.profileHash);
		$('#userRoles').val(result.role).prop('selected', true);

		var profileImageLink = 'https://ipfs.io/ipfs/'+result.profileHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';
		$("#imageHash").html(btnViewImage);

		changeSwitchery($("#isActive"),result.isActive);
		$("#userModelTitle").html("Update User");
		stopLoader();
		$("#userFormModel").modal();
	});
}

// ipfs = window.IpfsApi('localhost', 5001);
ipfs = window.IpfsApi('ipfs.infura.io', '5001', {protocol: 'https'})

function handleFileUpload(event){
	const file = event.target.files[0];

    let reader = new window.FileReader();
    reader.onloadend = function () {
       $("#userFormBtn").prop('disabled',true);
       $("i.fa-spinner").show();
        $("#imageHash").html('Processing......');	
       saveToIpfs(reader)
    }

    reader.readAsArrayBuffer(file)
}

function saveToIpfs(reader){
	let ipfsId;

    const Buffer = window.IpfsApi().Buffer;
    const buffer = Buffer.from(reader.result);

    /*Upload Buffer to IPFS*/
    ipfs.files.add(buffer, (err, result) => { 
        if (err) {
	          console.error(err)
	          return
		}
		
		var imageHash = result[0].hash;		

		var profileImageLink = 'https://ipfs.io/ipfs/'+imageHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';

        $("#userProfileHash").val(imageHash);
        $("#imageHash").html(btnViewImage);
        
        $("#userFormBtn").prop('disabled',false);
        $("i.fa-spinner").hide();	
    });
}

rohitshukla11 avatar Jul 19 '19 07:07 rohitshukla11

Write all the addresses in small. For example, Replace 'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d" by 'CoffeeMain': "0x7961442d3a5e13d4933f7dba96f158dbda391c6d" and same for the other two variables.

I have resolved the error. Please show your app.js file here.

var globIcoAddress = { /'old-CoffeeMain': "0xfA171Cda184d815D20a318fCe9920AafdC04934e", 'old-CoffeeUser': "0x26d723acFe39f93A9702592dD9371851f81cF59F",/

	'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d",
	'CoffeeUser': "0x80f7b3Be3e1bAC2664630CeE4431f7855fA80802",
	'Storage': " 0x3C942D65A53Cf9A4D41E84256C27ceEfDE2F84A4"
};

var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d";
var globMainContract = false;
var globUserContract = false;
var globCoinbase = false;	
var globUserData = [];



var web3;
window.addEventListener('load', function() 
{  
	$("#storageContractAddress").html(globIcoAddress.Storage);
	$("#coffeeSupplychainContractAddress").html(globIcoAddress.CoffeeMain);
	$("#userContractAddress").html(globIcoAddress.CoffeeUser);


	if (typeof web3 !== 'undefined') 
	{
		
		web3 = new Web3(web3.currentProvider);
	  // web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
	  console.log("init12", web3);
	} else {
	  // set the provider you want from Web3.providers
	  console.log("init2");
	  web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"));
	}
	
	getCurrentAccountAddress((address)=>{
		/*  To Restrict User in Admin Section */
		var currentPath = window.location.pathname;
		var tmpStack = currentPath.split("/");
		var currentPanel = tmpStack.pop();

		if(currentPanel == "admin.php")
		{
			if(address != globAdminAddress){
				window.location = "index.php";
			}
		}
	});

	console.log("init");
	initContract();

	updateLoginAccountStatus();
	/* setInterval(function () {
		updateLoginAccountStatus();
	}, 500); */
	
});

function initContract()
{
	globMainContract = new web3.eth.Contract(CoffeeSupplyChainAbi,globIcoAddress.CoffeeMain);	
	$(window).trigger("mainContractReady");
	console.log('init 3');
	globUserContract = new web3.eth.Contract(SupplyChainUserAbi,globIcoAddress.CoffeeUser);	
	$(window).trigger("userContractReady");
	console.log('init 4');
}

function updateLoginAccountStatus(){
	console.log('init 5');
	web3.eth.getAccounts(function(err,accounts){

		if(err){
			console.log('An error occurred '+ err);
		}
		else if(accounts.length == 0){
			console.log("Account",accounts.length);
			sweetAlert('Error', 'Please login to MetaMask..!error'+accounts[0], 'error');
			$("#currentUserAddress").html("chandan3");
		}
		else{
			initAccountDetails();
		}
	});
}

function initAccountDetails(){
	/*
	* Get Current wallet account address
	*/
	getCurrentAccountAddress((address)=>{
		globCoinbase = address;	
		$("#currentUserAddress").html(globCoinbase);	
		$(window).trigger("coinbaseReady");		
	});
}


function getCurrentAccountAddress(callback){
	callback = callback || false;

	web3.eth.getCoinbase()
	.then((_coinbase)=>{
		callback(_coinbase);
	})
	.catch((err)=>{
		if(callback){
			callback(0);
		}
	})
}

function getUserDetails(contractRef,userAddress,callback){
	callback = callback || false;

	contractRef.methods.getUser(userAddress).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get User Details","error");
		callback(0);
	});
}

function getCultivationData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getBasicDetails(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Cultivation Details","error");
		callback(0);
	});
}

function getFarmInspectorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getFarmInspectorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Farm Inspection Details","error");
		callback(0);
	});
}

function getHarvesterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getHarvesterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Harvesting Details","error");
		callback(0);
	});
}

function getExporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getExporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Exporting Details","error");
		callback(0);
	});
}

function getImporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getImporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Importing Details","error");
		callback(0);
	});
}

function getProcessorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getProcessorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Processing Details","error");
		callback(0);
	});
}

function getUserEvents(contractRef)
{
    contractRef.getPastEvents('UserUpdate',{
        fromBlock: 0 
    }).then(function (events){

        $("#tblUser").DataTable().destroy();
        $("#tblUser tbody").html(buildUserDetails(events));
        $("#tblUser").DataTable({
        	"displayLength": 3,
        	"order": [[ 1, "asc" ]]
        });
    }).catch((err)=>{
    	console.log(err);
    });
}

function buildUserDetails(events){
	
	var filteredUser = {};
	var isNewUser = false;

	/*filtering latest updated user record*/
	$(events).each(function(index,event){

		if(filteredUser[event.returnValues.user] == undefined)
		{
			filteredUser[event.returnValues.user] = {};
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
		else if(filteredUser[event.returnValues.user].blockNumber < event.blockNumber)
		{
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
	});

	var builtUser = [];
	for(tmpUser in filteredUser)
	{
		builtUser.push(filteredUser[tmpUser]);
	}

	/*build user Table*/
	$("#totalUsers").html(builtUser.length);
	return buildUserTable(builtUser);
}

function buildUserTable(globUserData){

	var tbody = "";
	var roleClass = "";

	$(globUserData).each(function(index,data){

		var role = data.role;	

		if(role == 'FARM_INSPECTION'){
			roleClass = "info";
		}else if(role == 'HARVESTER'){
			roleClass = "success";	
		}else if(role == 'EXPORTER'){
			roleClass = "warning";
		}else if(role == 'IMPORTER'){
			roleClass = "danger";
		}else if(role == 'PROCESSOR'){
			roleClass = "primary";
		}

		tbody += `<tr>
                        <td>`+data.user+`</td>
                        <td>`+data.name+`</td>
                        <td>`+data.contactNo+`</td>
                        <td><span class="label label-`+roleClass+` font-weight-100">`+role+`</span></td>
                        <td><a href="javascript:void(0);" class="text-inverse p-r-10" data-toggle="tooltip" data-userAddress="`+data.user+`" onclick="openEditUser(this);" title="Edit"><i class="ti-marker-alt"></i></a> </td>
                  </tr>`;
	});	

	return tbody;
}

function handleTransactionResponse(txHash,finalMessage)
{
	var txLink = "https://rinkeby.etherscan.io/tx/" + txHash ;
    var txLinkHref = "<a target='_blank' href='"+txLink+"'> Click here for Transaction Status </a>" ;

    sweetAlert("Success", "Please Check Transaction Status here :  "+txLinkHref, "success");

    $("#linkOngoingTransaction").html(txLinkHref);
    $("#divOngoingTransaction").fadeIn();
    /*scroll to top*/
    $('html, body').animate({ scrollTop: 0 }, 'slow', function () {});
}

function handleTransactionReceipt(receipt,finalMessage)
{
	$("#linkOngoingTransaction").html("");
    $("#divOngoingTransaction").fadeOut();

    // sweetAlert("Success", "Token Purchase Complete ", "success");
    sweetAlert("Success", finalMessage, "success");
}

function handleGenericError(error_message)
{
    if(error_message.includes("MetaMask Tx Signature"))
    {
        sweetAlert("Error", "Transaction Refused ", "error");
    }
    else
    {
        // sweetAlert("Error", "Error Occured, Please Try Again , if problem persist get in touch with us. ", "error");
        sweetAlert("Error", error_message, "error");
    }

}


function changeSwitchery(element, checked) {
  if ( ( element.is(':checked') && checked == false ) || ( !element.is(':checked') && checked == true ) ) {
    element.parent().find('.switchery').trigger('click');
  }
}

/*==================================Bootstrap Model Start=========================================*/

function startLoader(){
	$(".preloader").fadeIn();
}

function stopLoader(){
	$(".preloader").fadeOut();
}

/*Set Default inactive*/
$("#userFormClick").click(function(){
    $("#userForm").trigger('reset');
    changeSwitchery($("#isActive"),false);
    $("#userModelTitle").html("Add User");
    $("#imageHash").html('');
    $("#userFormModel").modal();    
});

/*Edit User Model Form*/
function openEditUser(ref){
	var userAddress = $(ref).attr("data-userAddress");
	startLoader();
	getUserDetails(globUserContract,userAddress,function(result){
		$("#userWalletAddress").val(userAddress);
		$("#userName").val(result.name);
		$("#userContactNo").val(result.contactNo);
		$("#userProfileHash").val(result.profileHash);
		$('#userRoles').val(result.role).prop('selected', true);

		var profileImageLink = 'https://ipfs.io/ipfs/'+result.profileHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';
		$("#imageHash").html(btnViewImage);

		changeSwitchery($("#isActive"),result.isActive);
		$("#userModelTitle").html("Update User");
		stopLoader();
		$("#userFormModel").modal();
	});
}

// ipfs = window.IpfsApi('localhost', 5001);
ipfs = window.IpfsApi('ipfs.infura.io', '5001', {protocol: 'https'})

function handleFileUpload(event){
	const file = event.target.files[0];

    let reader = new window.FileReader();
    reader.onloadend = function () {
       $("#userFormBtn").prop('disabled',true);
       $("i.fa-spinner").show();
        $("#imageHash").html('Processing......');	
       saveToIpfs(reader)
    }

    reader.readAsArrayBuffer(file)
}

function saveToIpfs(reader){
	let ipfsId;

    const Buffer = window.IpfsApi().Buffer;
    const buffer = Buffer.from(reader.result);

    /*Upload Buffer to IPFS*/
    ipfs.files.add(buffer, (err, result) => { 
        if (err) {
	          console.error(err)
	          return
		}
		
		var imageHash = result[0].hash;		

		var profileImageLink = 'https://ipfs.io/ipfs/'+imageHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';

        $("#userProfileHash").val(imageHash);
        $("#imageHash").html(btnViewImage);
        
        $("#userFormBtn").prop('disabled',false);
        $("i.fa-spinner").hide();	
    });
}

this didn't work

chandanrai95 avatar Jul 19 '19 12:07 chandanrai95

Write all the addresses in small. For example, Replace 'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d" by 'CoffeeMain': "0x7961442d3a5e13d4933f7dba96f158dbda391c6d" and same for the other two variables.

I have resolved the error. Please show your app.js file here.

var globIcoAddress = { /'old-CoffeeMain': "0xfA171Cda184d815D20a318fCe9920AafdC04934e", 'old-CoffeeUser': "0x26d723acFe39f93A9702592dD9371851f81cF59F",/

	'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d",
	'CoffeeUser': "0x80f7b3Be3e1bAC2664630CeE4431f7855fA80802",
	'Storage': " 0x3C942D65A53Cf9A4D41E84256C27ceEfDE2F84A4"
};

var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d";
var globMainContract = false;
var globUserContract = false;
var globCoinbase = false;	
var globUserData = [];



var web3;
window.addEventListener('load', function() 
{  
	$("#storageContractAddress").html(globIcoAddress.Storage);
	$("#coffeeSupplychainContractAddress").html(globIcoAddress.CoffeeMain);
	$("#userContractAddress").html(globIcoAddress.CoffeeUser);


	if (typeof web3 !== 'undefined') 
	{
		
		web3 = new Web3(web3.currentProvider);
	  // web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
	  console.log("init12", web3);
	} else {
	  // set the provider you want from Web3.providers
	  console.log("init2");
	  web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"));
	}
	
	getCurrentAccountAddress((address)=>{
		/*  To Restrict User in Admin Section */
		var currentPath = window.location.pathname;
		var tmpStack = currentPath.split("/");
		var currentPanel = tmpStack.pop();

		if(currentPanel == "admin.php")
		{
			if(address != globAdminAddress){
				window.location = "index.php";
			}
		}
	});

	console.log("init");
	initContract();

	updateLoginAccountStatus();
	/* setInterval(function () {
		updateLoginAccountStatus();
	}, 500); */
	
});

function initContract()
{
	globMainContract = new web3.eth.Contract(CoffeeSupplyChainAbi,globIcoAddress.CoffeeMain);	
	$(window).trigger("mainContractReady");
	console.log('init 3');
	globUserContract = new web3.eth.Contract(SupplyChainUserAbi,globIcoAddress.CoffeeUser);	
	$(window).trigger("userContractReady");
	console.log('init 4');
}

function updateLoginAccountStatus(){
	console.log('init 5');
	web3.eth.getAccounts(function(err,accounts){

		if(err){
			console.log('An error occurred '+ err);
		}
		else if(accounts.length == 0){
			console.log("Account",accounts.length);
			sweetAlert('Error', 'Please login to MetaMask..!error'+accounts[0], 'error');
			$("#currentUserAddress").html("chandan3");
		}
		else{
			initAccountDetails();
		}
	});
}

function initAccountDetails(){
	/*
	* Get Current wallet account address
	*/
	getCurrentAccountAddress((address)=>{
		globCoinbase = address;	
		$("#currentUserAddress").html(globCoinbase);	
		$(window).trigger("coinbaseReady");		
	});
}


function getCurrentAccountAddress(callback){
	callback = callback || false;

	web3.eth.getCoinbase()
	.then((_coinbase)=>{
		callback(_coinbase);
	})
	.catch((err)=>{
		if(callback){
			callback(0);
		}
	})
}

function getUserDetails(contractRef,userAddress,callback){
	callback = callback || false;

	contractRef.methods.getUser(userAddress).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get User Details","error");
		callback(0);
	});
}

function getCultivationData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getBasicDetails(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Cultivation Details","error");
		callback(0);
	});
}

function getFarmInspectorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getFarmInspectorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Farm Inspection Details","error");
		callback(0);
	});
}

function getHarvesterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getHarvesterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Harvesting Details","error");
		callback(0);
	});
}

function getExporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getExporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Exporting Details","error");
		callback(0);
	});
}

function getImporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getImporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Importing Details","error");
		callback(0);
	});
}

function getProcessorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getProcessorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Processing Details","error");
		callback(0);
	});
}

function getUserEvents(contractRef)
{
    contractRef.getPastEvents('UserUpdate',{
        fromBlock: 0 
    }).then(function (events){

        $("#tblUser").DataTable().destroy();
        $("#tblUser tbody").html(buildUserDetails(events));
        $("#tblUser").DataTable({
        	"displayLength": 3,
        	"order": [[ 1, "asc" ]]
        });
    }).catch((err)=>{
    	console.log(err);
    });
}

function buildUserDetails(events){
	
	var filteredUser = {};
	var isNewUser = false;

	/*filtering latest updated user record*/
	$(events).each(function(index,event){

		if(filteredUser[event.returnValues.user] == undefined)
		{
			filteredUser[event.returnValues.user] = {};
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
		else if(filteredUser[event.returnValues.user].blockNumber < event.blockNumber)
		{
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
	});

	var builtUser = [];
	for(tmpUser in filteredUser)
	{
		builtUser.push(filteredUser[tmpUser]);
	}

	/*build user Table*/
	$("#totalUsers").html(builtUser.length);
	return buildUserTable(builtUser);
}

function buildUserTable(globUserData){

	var tbody = "";
	var roleClass = "";

	$(globUserData).each(function(index,data){

		var role = data.role;	

		if(role == 'FARM_INSPECTION'){
			roleClass = "info";
		}else if(role == 'HARVESTER'){
			roleClass = "success";	
		}else if(role == 'EXPORTER'){
			roleClass = "warning";
		}else if(role == 'IMPORTER'){
			roleClass = "danger";
		}else if(role == 'PROCESSOR'){
			roleClass = "primary";
		}

		tbody += `<tr>
                        <td>`+data.user+`</td>
                        <td>`+data.name+`</td>
                        <td>`+data.contactNo+`</td>
                        <td><span class="label label-`+roleClass+` font-weight-100">`+role+`</span></td>
                        <td><a href="javascript:void(0);" class="text-inverse p-r-10" data-toggle="tooltip" data-userAddress="`+data.user+`" onclick="openEditUser(this);" title="Edit"><i class="ti-marker-alt"></i></a> </td>
                  </tr>`;
	});	

	return tbody;
}

function handleTransactionResponse(txHash,finalMessage)
{
	var txLink = "https://rinkeby.etherscan.io/tx/" + txHash ;
    var txLinkHref = "<a target='_blank' href='"+txLink+"'> Click here for Transaction Status </a>" ;

    sweetAlert("Success", "Please Check Transaction Status here :  "+txLinkHref, "success");

    $("#linkOngoingTransaction").html(txLinkHref);
    $("#divOngoingTransaction").fadeIn();
    /*scroll to top*/
    $('html, body').animate({ scrollTop: 0 }, 'slow', function () {});
}

function handleTransactionReceipt(receipt,finalMessage)
{
	$("#linkOngoingTransaction").html("");
    $("#divOngoingTransaction").fadeOut();

    // sweetAlert("Success", "Token Purchase Complete ", "success");
    sweetAlert("Success", finalMessage, "success");
}

function handleGenericError(error_message)
{
    if(error_message.includes("MetaMask Tx Signature"))
    {
        sweetAlert("Error", "Transaction Refused ", "error");
    }
    else
    {
        // sweetAlert("Error", "Error Occured, Please Try Again , if problem persist get in touch with us. ", "error");
        sweetAlert("Error", error_message, "error");
    }

}


function changeSwitchery(element, checked) {
  if ( ( element.is(':checked') && checked == false ) || ( !element.is(':checked') && checked == true ) ) {
    element.parent().find('.switchery').trigger('click');
  }
}

/*==================================Bootstrap Model Start=========================================*/

function startLoader(){
	$(".preloader").fadeIn();
}

function stopLoader(){
	$(".preloader").fadeOut();
}

/*Set Default inactive*/
$("#userFormClick").click(function(){
    $("#userForm").trigger('reset');
    changeSwitchery($("#isActive"),false);
    $("#userModelTitle").html("Add User");
    $("#imageHash").html('');
    $("#userFormModel").modal();    
});

/*Edit User Model Form*/
function openEditUser(ref){
	var userAddress = $(ref).attr("data-userAddress");
	startLoader();
	getUserDetails(globUserContract,userAddress,function(result){
		$("#userWalletAddress").val(userAddress);
		$("#userName").val(result.name);
		$("#userContactNo").val(result.contactNo);
		$("#userProfileHash").val(result.profileHash);
		$('#userRoles').val(result.role).prop('selected', true);

		var profileImageLink = 'https://ipfs.io/ipfs/'+result.profileHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';
		$("#imageHash").html(btnViewImage);

		changeSwitchery($("#isActive"),result.isActive);
		$("#userModelTitle").html("Update User");
		stopLoader();
		$("#userFormModel").modal();
	});
}

// ipfs = window.IpfsApi('localhost', 5001);
ipfs = window.IpfsApi('ipfs.infura.io', '5001', {protocol: 'https'})

function handleFileUpload(event){
	const file = event.target.files[0];

    let reader = new window.FileReader();
    reader.onloadend = function () {
       $("#userFormBtn").prop('disabled',true);
       $("i.fa-spinner").show();
        $("#imageHash").html('Processing......');	
       saveToIpfs(reader)
    }

    reader.readAsArrayBuffer(file)
}

function saveToIpfs(reader){
	let ipfsId;

    const Buffer = window.IpfsApi().Buffer;
    const buffer = Buffer.from(reader.result);

    /*Upload Buffer to IPFS*/
    ipfs.files.add(buffer, (err, result) => { 
        if (err) {
	          console.error(err)
	          return
		}
		
		var imageHash = result[0].hash;		

		var profileImageLink = 'https://ipfs.io/ipfs/'+imageHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';

        $("#userProfileHash").val(imageHash);
        $("#imageHash").html(btnViewImage);
        
        $("#userFormBtn").prop('disabled',false);
        $("i.fa-spinner").hide();	
    });
}

this didn't work

Write all the addresses in small. For example, Replace 'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d" by 'CoffeeMain': "0x7961442d3a5e13d4933f7dba96f158dbda391c6d" and same for the other two variables.

I have resolved the error. Please show your app.js file here.

var globIcoAddress = { /'old-CoffeeMain': "0xfA171Cda184d815D20a318fCe9920AafdC04934e", 'old-CoffeeUser': "0x26d723acFe39f93A9702592dD9371851f81cF59F",/

	'CoffeeMain': "0x7961442d3a5E13D4933f7DbA96F158DBDa391c6d",
	'CoffeeUser': "0x80f7b3Be3e1bAC2664630CeE4431f7855fA80802",
	'Storage': " 0x3C942D65A53Cf9A4D41E84256C27ceEfDE2F84A4"
};

var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d";
var globMainContract = false;
var globUserContract = false;
var globCoinbase = false;	
var globUserData = [];



var web3;
window.addEventListener('load', function() 
{  
	$("#storageContractAddress").html(globIcoAddress.Storage);
	$("#coffeeSupplychainContractAddress").html(globIcoAddress.CoffeeMain);
	$("#userContractAddress").html(globIcoAddress.CoffeeUser);


	if (typeof web3 !== 'undefined') 
	{
		
		web3 = new Web3(web3.currentProvider);
	  // web3 = new Web3("https://rinkeby.infura.io/8U0AE4DUGSh8lVO3zmma");
	  console.log("init12", web3);
	} else {
	  // set the provider you want from Web3.providers
	  console.log("init2");
	  web3 = new Web3(new Web3.providers.HttpProvider("HTTP://127.0.0.1:8545"));
	}
	
	getCurrentAccountAddress((address)=>{
		/*  To Restrict User in Admin Section */
		var currentPath = window.location.pathname;
		var tmpStack = currentPath.split("/");
		var currentPanel = tmpStack.pop();

		if(currentPanel == "admin.php")
		{
			if(address != globAdminAddress){
				window.location = "index.php";
			}
		}
	});

	console.log("init");
	initContract();

	updateLoginAccountStatus();
	/* setInterval(function () {
		updateLoginAccountStatus();
	}, 500); */
	
});

function initContract()
{
	globMainContract = new web3.eth.Contract(CoffeeSupplyChainAbi,globIcoAddress.CoffeeMain);	
	$(window).trigger("mainContractReady");
	console.log('init 3');
	globUserContract = new web3.eth.Contract(SupplyChainUserAbi,globIcoAddress.CoffeeUser);	
	$(window).trigger("userContractReady");
	console.log('init 4');
}

function updateLoginAccountStatus(){
	console.log('init 5');
	web3.eth.getAccounts(function(err,accounts){

		if(err){
			console.log('An error occurred '+ err);
		}
		else if(accounts.length == 0){
			console.log("Account",accounts.length);
			sweetAlert('Error', 'Please login to MetaMask..!error'+accounts[0], 'error');
			$("#currentUserAddress").html("chandan3");
		}
		else{
			initAccountDetails();
		}
	});
}

function initAccountDetails(){
	/*
	* Get Current wallet account address
	*/
	getCurrentAccountAddress((address)=>{
		globCoinbase = address;	
		$("#currentUserAddress").html(globCoinbase);	
		$(window).trigger("coinbaseReady");		
	});
}


function getCurrentAccountAddress(callback){
	callback = callback || false;

	web3.eth.getCoinbase()
	.then((_coinbase)=>{
		callback(_coinbase);
	})
	.catch((err)=>{
		if(callback){
			callback(0);
		}
	})
}

function getUserDetails(contractRef,userAddress,callback){
	callback = callback || false;

	contractRef.methods.getUser(userAddress).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get User Details","error");
		callback(0);
	});
}

function getCultivationData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getBasicDetails(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Cultivation Details","error");
		callback(0);
	});
}

function getFarmInspectorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getFarmInspectorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Farm Inspection Details","error");
		callback(0);
	});
}

function getHarvesterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getHarvesterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Harvesting Details","error");
		callback(0);
	});
}

function getExporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getExporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Exporting Details","error");
		callback(0);
	});
}

function getImporterData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}


	callback = callback || false;

	contractRef.methods.getImporterData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Importing Details","error");
		callback(0);
	});
}

function getProcessorData(contractRef,batchNo,callback){

	if(batchNo == undefined)
	{
		callback(0);
		return;
	}

	callback = callback || false;

	contractRef.methods.getProcessorData(batchNo).call()
	.then((result)=>{
		callback(result);
	})
	.catch((error)=>{
		sweetAlert("Error","Unable to get Processing Details","error");
		callback(0);
	});
}

function getUserEvents(contractRef)
{
    contractRef.getPastEvents('UserUpdate',{
        fromBlock: 0 
    }).then(function (events){

        $("#tblUser").DataTable().destroy();
        $("#tblUser tbody").html(buildUserDetails(events));
        $("#tblUser").DataTable({
        	"displayLength": 3,
        	"order": [[ 1, "asc" ]]
        });
    }).catch((err)=>{
    	console.log(err);
    });
}

function buildUserDetails(events){
	
	var filteredUser = {};
	var isNewUser = false;

	/*filtering latest updated user record*/
	$(events).each(function(index,event){

		if(filteredUser[event.returnValues.user] == undefined)
		{
			filteredUser[event.returnValues.user] = {};
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
		else if(filteredUser[event.returnValues.user].blockNumber < event.blockNumber)
		{
			filteredUser[event.returnValues.user].address = event.address;
			filteredUser[event.returnValues.user].role = event.returnValues.role;
			filteredUser[event.returnValues.user].user = event.returnValues.user;
			filteredUser[event.returnValues.user].name = event.returnValues.name;
			filteredUser[event.returnValues.user].contactNo = event.returnValues.contactNo;
			filteredUser[event.returnValues.user].blockNumber = event.blockNumber;
		}
	});

	var builtUser = [];
	for(tmpUser in filteredUser)
	{
		builtUser.push(filteredUser[tmpUser]);
	}

	/*build user Table*/
	$("#totalUsers").html(builtUser.length);
	return buildUserTable(builtUser);
}

function buildUserTable(globUserData){

	var tbody = "";
	var roleClass = "";

	$(globUserData).each(function(index,data){

		var role = data.role;	

		if(role == 'FARM_INSPECTION'){
			roleClass = "info";
		}else if(role == 'HARVESTER'){
			roleClass = "success";	
		}else if(role == 'EXPORTER'){
			roleClass = "warning";
		}else if(role == 'IMPORTER'){
			roleClass = "danger";
		}else if(role == 'PROCESSOR'){
			roleClass = "primary";
		}

		tbody += `<tr>
                        <td>`+data.user+`</td>
                        <td>`+data.name+`</td>
                        <td>`+data.contactNo+`</td>
                        <td><span class="label label-`+roleClass+` font-weight-100">`+role+`</span></td>
                        <td><a href="javascript:void(0);" class="text-inverse p-r-10" data-toggle="tooltip" data-userAddress="`+data.user+`" onclick="openEditUser(this);" title="Edit"><i class="ti-marker-alt"></i></a> </td>
                  </tr>`;
	});	

	return tbody;
}

function handleTransactionResponse(txHash,finalMessage)
{
	var txLink = "https://rinkeby.etherscan.io/tx/" + txHash ;
    var txLinkHref = "<a target='_blank' href='"+txLink+"'> Click here for Transaction Status </a>" ;

    sweetAlert("Success", "Please Check Transaction Status here :  "+txLinkHref, "success");

    $("#linkOngoingTransaction").html(txLinkHref);
    $("#divOngoingTransaction").fadeIn();
    /*scroll to top*/
    $('html, body').animate({ scrollTop: 0 }, 'slow', function () {});
}

function handleTransactionReceipt(receipt,finalMessage)
{
	$("#linkOngoingTransaction").html("");
    $("#divOngoingTransaction").fadeOut();

    // sweetAlert("Success", "Token Purchase Complete ", "success");
    sweetAlert("Success", finalMessage, "success");
}

function handleGenericError(error_message)
{
    if(error_message.includes("MetaMask Tx Signature"))
    {
        sweetAlert("Error", "Transaction Refused ", "error");
    }
    else
    {
        // sweetAlert("Error", "Error Occured, Please Try Again , if problem persist get in touch with us. ", "error");
        sweetAlert("Error", error_message, "error");
    }

}


function changeSwitchery(element, checked) {
  if ( ( element.is(':checked') && checked == false ) || ( !element.is(':checked') && checked == true ) ) {
    element.parent().find('.switchery').trigger('click');
  }
}

/*==================================Bootstrap Model Start=========================================*/

function startLoader(){
	$(".preloader").fadeIn();
}

function stopLoader(){
	$(".preloader").fadeOut();
}

/*Set Default inactive*/
$("#userFormClick").click(function(){
    $("#userForm").trigger('reset');
    changeSwitchery($("#isActive"),false);
    $("#userModelTitle").html("Add User");
    $("#imageHash").html('');
    $("#userFormModel").modal();    
});

/*Edit User Model Form*/
function openEditUser(ref){
	var userAddress = $(ref).attr("data-userAddress");
	startLoader();
	getUserDetails(globUserContract,userAddress,function(result){
		$("#userWalletAddress").val(userAddress);
		$("#userName").val(result.name);
		$("#userContactNo").val(result.contactNo);
		$("#userProfileHash").val(result.profileHash);
		$('#userRoles').val(result.role).prop('selected', true);

		var profileImageLink = 'https://ipfs.io/ipfs/'+result.profileHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';
		$("#imageHash").html(btnViewImage);

		changeSwitchery($("#isActive"),result.isActive);
		$("#userModelTitle").html("Update User");
		stopLoader();
		$("#userFormModel").modal();
	});
}

// ipfs = window.IpfsApi('localhost', 5001);
ipfs = window.IpfsApi('ipfs.infura.io', '5001', {protocol: 'https'})

function handleFileUpload(event){
	const file = event.target.files[0];

    let reader = new window.FileReader();
    reader.onloadend = function () {
       $("#userFormBtn").prop('disabled',true);
       $("i.fa-spinner").show();
        $("#imageHash").html('Processing......');	
       saveToIpfs(reader)
    }

    reader.readAsArrayBuffer(file)
}

function saveToIpfs(reader){
	let ipfsId;

    const Buffer = window.IpfsApi().Buffer;
    const buffer = Buffer.from(reader.result);

    /*Upload Buffer to IPFS*/
    ipfs.files.add(buffer, (err, result) => { 
        if (err) {
	          console.error(err)
	          return
		}
		
		var imageHash = result[0].hash;		

		var profileImageLink = 'https://ipfs.io/ipfs/'+imageHash;
		var btnViewImage = '<a href="'+profileImageLink+'" target="_blank" class=" text-danger"><i class="fa fa-eye"></i> View Image</a>';

        $("#userProfileHash").val(imageHash);
        $("#imageHash").html(btnViewImage);
        
        $("#userFormBtn").prop('disabled',false);
        $("i.fa-spinner").hide();	
    });
}

this didn't work

Well, you have to change this one as well: var globAdminAddress = "0x5A637C154f35fCa67E339d8A967b062bEf5eF48d"

rohitshukla11 avatar Jul 19 '19 12:07 rohitshukla11

I tried all above but didn't work

chandanrai95 avatar Jul 20 '19 04:07 chandanrai95

I'm getting the same problem. Did you solve the question? I put all addresses in small letters, but it doesn't work when I'm accessing as a user.

fatimaleal avatar Sep 13 '19 08:09 fatimaleal

Same issue... looking for some help. Did anyone find a solution for it?

I must say that it took me hours to pass the 'Please login to MetaMask..!' since web3.eth.getAccounts() would return empty; when finally, with no code modification, Metamask worked.

rogergili avatar Sep 17 '19 07:09 rogergili

I found the mistake - for my case!

The point is that I was trying to access the user.php while there was no user created. I first had to login into admin.php and create a user if needed (I used the same wallet address or could be any other one).

rogergili avatar Sep 17 '19 09:09 rogergili

I found the mistake - for my case!

The point is that I was trying to access the user.php while there was no user created. I first had to login into admin.php and create a user if needed (I used the same wallet address or could be any other one).

Hello Rogergili, Could you elaborate more on how to do this? I didn't quite understand you here! Thanks :)

shiv978 avatar May 04 '20 18:05 shiv978

Got the same issue. Changing globAdminAddress to lowercase helped me access admin.php and add some users. Login from added users addresses through index.php works well, but trying to log from admin address still gives "Insufficient access".

z0rats avatar May 13 '20 11:05 z0rats

did anyone solve the problem? I am still having trouble getting into the admins panel

N1se7en avatar Aug 28 '22 19:08 N1se7en