import { Component } from '@angular/core'; import {ActivatedRoute, Router} from "@angular/router"; import {Subscriber, Subscription} from "rxjs"; import {OrcidService} from "./orcid.service"; import {ResultLandingService} from "../landingPages/result/resultLanding.service"; import {ResultLandingInfo} from "../utils/entities/resultLandingInfo"; import {properties} from "../../../environments/environment"; @Component({ selector: 'orcid', template: `
{{orcidMessage}}
` }) export class OrcidComponent { private clientId: string = "APP-A5M3KTX6NCN67L91"; //Client secret: 96b20d71-ae06-4286-bb00-9172536c1ad4 public tokenUrl: string = "";//"https://sandbox.orcid.org/oauth/authorize?client_id="+this.clientId+"&response_type=code&scope=/authenticate&redirect_uri="+location.href; public testingUserToken: any = "ac2e24e2-cd7e-4874-8cb8-d56395b9f3e2";// = "70a0274a-5b28-49dc-b6fd-2b427727a0da";// = "94634687-f5ea-4a0d-91ab-da8268287f72"; public testingUserOrcid: string = "0000-0001-9541-4617"; public testingUserRecord: any; public resultId: string = "dedup_wf_001::35c93a04a93b87f3a5954c1387aa7588"; public testingPutCode: string = "1167642"; // invalid: //code: gpq2pG // {"access_token":"c4a81d38-4a32-4160-887d-9b6f39ce2d75","token_type":"bearer","refresh_token":"0ba698e9-f73b-40ca-a0c3-f7b8e1123f3c","expires_in":631138518,"scope":"/authenticate","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"f4d8f230-fe1a-4d4e-af52-6ee67556ad2c","token_type":"bearer","refresh_token":"dc041582-33f4-476a-851d-f8d7e44de84c","expires_in":631138518,"scope":"/authenticate","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"91eced53-0c44-4e5b-b49e-b32cc4548988","token_type":"bearer","refresh_token":"d9c35f21-1f67-4c1a-99af-fc445ead37c4","expires_in":631138518,"scope":"/authenticate","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"c953699e-06bf-41a3-98a2-4ad3241a6592","token_type":"bearer","refresh_token":"75341fe0-26f6-41b8-85b0-3add39d7891e","expires_in":631138518,"scope":"/authenticate /read-limited /activities/update /person/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"3ad4cadd-3429-4a6d-acc8-95fecf110917","token_type":"bearer","refresh_token":"ff0d26c1-6f42-4f25-8eae-51b84b83f0cc","expires_in":631138518,"scope":"/authenticate /read-limited /activities/update /person/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"f77deae6-a8cd-4070-b409-eb459ed22cd1","token_type":"bearer","refresh_token":"70c6ae8f-0de6-4ebf-ac0e-409beda5d17f","expires_in":631138518,"scope":"/authenticate","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"d5c7d36e-fdbb-44b4-bb4e-1364286ba73a","token_type":"bearer","refresh_token":"db85dc40-c8dc-4ed5-81de-e98fb8d35228","expires_in":631138518,"scope":"/authenticate /read-limited /activities/update /person/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"94634687-f5ea-4a0d-91ab-da8268287f72","token_type":"bearer","refresh_token":"1d4c01f2-a1ef-4f01-8187-3fc26cbc5b78","expires_in":631138518,"scope":"/authenticate /read-limited /activities/update /person/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"70a0274a-5b28-49dc-b6fd-2b427727a0da","token_type":"bearer","refresh_token":"b973c6fd-99b3-415e-af0c-6944500f8af3","expires_in":631138518,"scope":"/activities/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"d1847264-a7e0-4f26-98e5-f193362ee7e2","token_type":"bearer","refresh_token":"2d1e1bfe-54d0-4e7c-984b-8af16609f6ae","expires_in":631138518,"scope":"/authenticate /read-limited /activities/update /person/update","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} // {"access_token":"77c17e47-bbe7-4a05-a0e6-5c7920a8cc26","token_type":"bearer","refresh_token":"6ae41ee9-ef94-4f8b-bb08-a241e720d3c5","expires_in":631138518,"scope":"/authenticate","name":"OpenAIRE OpenAIRE","orcid":"0000-0001-9541-4617"} public subscriptions: Subscription[] = []; public resultLandingInfo: ResultLandingInfo; public work: any; public works: any; public showLoading: boolean = false; public message: string = ""; public orcidMessage: string = ""; constructor(private route: ActivatedRoute, private _router: Router, private orcidService: OrcidService, private resultLandingService: ResultLandingService) { if(typeof location !== undefined) { console.debug(location); this.tokenUrl = "https://sandbox.orcid.org/oauth/authorize?" + "client_id="+this.clientId // + "&response_type=code&scope=/activities/update" + "&response_type=code&scope=/authenticate /activities/update /person/update /read-limited" + "&redirect_uri="+location.origin+"/orcid"; } } ngOnInit() { this.subscriptions.push(this.route.queryParams.subscribe(params => { if (params['code']) { this.getToken(params['code']); } else if(params['error']) { this.showLoading = false; this.orcidMessage = params['error_description']; this.message = "
An error occured while trying to grant access OpenAIRE.
" + "
Please close this window and try again!
"; } else { this.message = "No code provided to connect your ORCID with OpenAIRE. Please try again!" } })); } ngOnDestroy() { this.subscriptions.forEach(subscription => { if (subscription instanceof Subscriber) { console.debug("subscription closing..."); subscription.unsubscribe(); } }); } // the following method uses client ID and client Secret, which are sessitive data. // Our API should return the response, without revealing the call to ORCID. private getToken(code: string) { this.showLoading = true; this.orcidService.getToken(code).subscribe( tokens => { console.debug(tokens); this.testingUserToken = tokens; if(tokens == null) { this.showLoading = false; this.message = "An error occured while trying to connect your ORCID iD with OpenAIRE. Please try again!"; } else { window.opener.postMessage("success"); window.close(); this.message = "Thank you for connecting your ORCID iD with OpenAIRE! Please close this window and continue!"; } }, error => { console.error("Error getting token from code: "+code, error); this.message = "An error occured while trying to connect your ORCID iD with OpenAIRE. Please try again!"; }, () => { this.showLoading = false; } ) } private getRecord() { //this.orcidService.getMyRecord(this.testingUserToken, this.testingUserOrcid).subscribe( this.subscriptions.push(this.orcidService.getRecord().subscribe( record => { this.testingUserRecord = record; console.debug(record); }, error => { console.error("Error getting record info for ORCID iD: "+this.testingUserOrcid + " with token: "+this.testingUserToken, error); } )); } private getLanding() { this.subscriptions.push(this.resultLandingService.getResultLandingInfo(this.resultId, null, "publication", null, properties).subscribe( data => { this.resultLandingInfo = data; this.postWork(); console.debug(this.resultLandingInfo); }, error => { console.error("Error getting landing info for publication id: "+this.resultId, error); } )); } private postWork() { let pids: string[] = []; if(this.resultLandingInfo && this.resultLandingInfo.identifiers) { for (let key of Array.from(this.resultLandingInfo.identifiers.keys())) { pids = pids.concat(this.resultLandingInfo.identifiers.get(key)); } } this.subscriptions.push(this.orcidService.saveWork(this.resultLandingInfo, pids.join()).subscribe( response => { console.debug(response); //this.work = this.orcidService.parse(this.resultLandingInfo); //this.work['put-code'] = response; this.work = response; }, error => { console.error("Error posting landing info", error); } )); } // private updateWork() { // this.subscriptions.push(this.orcidService.updateWork(this.resultLandingInfo, this.testingUserOrcid, this.testingPutCode).subscribe( // response => { // console.debug(response); // //this.work = this.orcidService.parse(this.resultLandingInfo); // //this.work['put-code'] = response; // this.work = response; // }, // error => { // console.error("Error updating landing info", error); // } // )); // } // private getWorks() { // this.subscriptions.push(this.orcidService.getWorks().subscribe( // response => { // console.debug(response); // this.works = response; // }, // error => { // console.error("Error getting works", error); // } // )); // } // private getWork() { // this.subscriptions.push(this.orcidService.getWork(this.resultId).subscribe( // response => { // console.debug(response); // this.work = response; // }, // error => { // console.error("Error getting work", error); // } // )); // } private deleteWork() { let put_code = this.testingPutCode; if(this.work && this.work['put-code']) { put_code = this.work['put-code']; } this.subscriptions.push(this.orcidService.deleteWork(put_code).subscribe( response => { console.debug(response); this.work = null; }, error => { console.error("Error deleting work", error); } )); } }