Skip to content
This repository was archived by the owner on Apr 14, 2026. It is now read-only.

Commit caa9f84

Browse files
committed
WIP redirect service
1 parent 233ec4f commit caa9f84

13 files changed

Lines changed: 126 additions & 7 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import AddonServiceAdapter from './addon-service';
2+
3+
export default class ExternalRedirectServiceAdapter extends AddonServiceAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'external-redirect-service': ExternalRedirectServiceAdapter;
9+
} // eslint-disable-line semi
10+
}

app/guid-node/addons/index/template.hbs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,13 @@
2727
data-analytics-scope='Addon - {{provider.provider.displayName}}'
2828
>
2929
{{#if (eq manager.pageMode 'terms')}}
30-
<AddonsService::TermsOfService
31-
@provider={{provider.provider}}
32-
/>
30+
{{#if manager.selectedProviderIsRedirectService}}
31+
{{t 'addons.terms.redirect.disclaimer'}}
32+
{{else}}
33+
<AddonsService::TermsOfService
34+
@provider={{provider.provider}}
35+
/>
36+
{{/if}}
3337
<div
3438
data-analytics-scope='Addon terms'
3539
local-class='float-right'
@@ -51,7 +55,11 @@
5155
{{#if provider.getAuthorizedAccounts.isRunning}}
5256
{{t 'addons.terms.accepting'}}
5357
{{else}}
54-
{{t 'general.confirm'}}
58+
{{#if manager.selectedProviderIsRedirectService}}
59+
{{t 'addons.terms.go-to-service' providerName=provider.provider.displayName}}
60+
{{else}}
61+
{{t 'general.confirm'}}
62+
{{/if}}
5563
{{/if}}
5664
</Button>
5765
</div>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { attr } from '@ember-data/model';
2+
3+
import ExternalServiceModel from './external-service';
4+
5+
export default class ExternalRedirectServiceModel extends ExternalServiceModel {
6+
@attr('string') redirectUrl!: string;
7+
// TODO: actually need some attrs here for redirect options
8+
}
9+
10+
declare module 'ember-data/types/registries/model' {
11+
export default interface ModelRegistry {
12+
'external-redirect-service': ExternalRedirectServiceModel;
13+
} // eslint-disable-line semi
14+
}

app/packages/addons-service/provider.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { getOwner, setOwner } from '@ember/application';
22
import EmberArray from '@ember/array';
3+
import { notifyPropertyChange } from '@ember/object';
34
import { inject as service } from '@ember/service';
45
import { waitFor } from '@ember/test-waiters';
56
import Store from '@ember-data/store';
@@ -23,7 +24,7 @@ import AuthorizedComputingAccountModel from 'ember-osf-web/models/authorized-com
2324
import ExternalStorageServiceModel from 'ember-osf-web/models/external-storage-service';
2425
import ExternalComputingServiceModel from 'ember-osf-web/models/external-computing-service';
2526
import ExternalCitationServiceModel from 'ember-osf-web/models/external-citation-service';
26-
import { notifyPropertyChange } from '@ember/object';
27+
import ExternalRedirectServiceModel from 'ember-osf-web/models/external-redirect-service';
2728
import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception';
2829
import ExternalLinkServiceModel from 'ember-osf-web/models/external-link-service';
2930
import AuthorizedLinkAccountModel from 'ember-osf-web/models/authorized-link-account';
@@ -33,7 +34,8 @@ export type AllProviderTypes =
3334
ExternalStorageServiceModel |
3435
ExternalComputingServiceModel |
3536
ExternalCitationServiceModel |
36-
ExternalLinkServiceModel;
37+
ExternalLinkServiceModel |
38+
ExternalRedirectServiceModel;
3739
export type AllAuthorizedAccountTypes =
3840
AuthorizedStorageAccountModel |
3941
AuthorizedCitationAccountModel |
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import GravyValetSerializer from './gravy-valet-serializer';
2+
3+
export default class ExternalRedirectServiceSerializer extends GravyValetSerializer {
4+
}
5+
6+
declare module 'ember-data/types/registries/serializer' {
7+
export default interface SerializerRegistry {
8+
'external-redirect-service': ExternalRedirectServiceSerializer;
9+
} // eslint-disable-line semi
10+
}

lib/osf-components/addon/components/addons-service/manager/component.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import AuthorizedStorageAccountModel from 'ember-osf-web/models/authorized-stora
2424
import ConfiguredCitationAddonModel from 'ember-osf-web/models/configured-citation-addon';
2525
import UserReferenceModel from 'ember-osf-web/models/user-reference';
2626
import ConfiguredLinkAddonModel from 'ember-osf-web/models/configured-link-addon';
27+
import ExternalRedirectServiceModel from 'ember-osf-web/models/external-redirect-service';
2728

2829
interface FilterSpecificObject {
2930
modelName: string;
@@ -47,6 +48,7 @@ export enum FilterTypes {
4748
CITATION_MANAGER = 'citation-manager',
4849
VERIFIED_LINK = 'verified-link',
4950
// CLOUD_COMPUTING = 'cloud-computing', // disabled because BOA is down
51+
REDIRECT_SERVICE = 'redirect-service',
5052
}
5153

5254
interface Args {
@@ -92,6 +94,12 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
9294
// list: A([]),
9395
// configuredAddons: A([]),
9496
// },
97+
[FilterTypes.REDIRECT_SERVICE]: {
98+
modelName: 'external-redirect-service',
99+
task: taskFor(this.getRedirectAddonProviders),
100+
list: A([]),
101+
// configuredAddons: A([]),
102+
},
95103
};
96104
filterTypeMapper = new TrackedObject(this.mapper);
97105
@tracked filterText = '';
@@ -152,6 +160,10 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
152160
return activeFilterObject.task.isRunning || taskFor(this.initialize).isRunning;
153161
}
154162

163+
get selectedProviderIsRedirectService() {
164+
return this.selectedProvider?.provider instanceof ExternalRedirectServiceModel;
165+
}
166+
155167
@action
156168
async configureProvider(provider: Provider, configuredAddon: AllConfiguredAddonTypes) {
157169
this.cancelSetup();
@@ -204,6 +216,23 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
204216

205217
@action
206218
async acceptTerms() {
219+
if (this.selectedProviderIsRedirectService) {
220+
const openURL = new URL((this.selectedProvider!.provider as ExternalRedirectServiceModel).redirectUrl);
221+
openURL.searchParams.set('nodeIri', this.node.links.iri!.toString());
222+
const newWindow = window.open(
223+
openURL.toString(),
224+
'_blank', 'popup,width=600,height=600,scrollbars=yes,resizable=yes',
225+
);
226+
if (newWindow) {
227+
newWindow.focus();
228+
} else {
229+
// this.toast.error(this.intl.t('addons.redirect.error'));
230+
this.toast.error('You got ad blockers on this thing?');
231+
}
232+
233+
this.cancelSetup();
234+
return;
235+
}
207236
await taskFor(this.selectedProvider!.getAuthorizedAccounts).perform();
208237
if(this.selectedProvider!.authorizedAccounts!.length > 0){
209238
this.pageMode = PageMode.NEW_OR_EXISTING_ACCOUNT;
@@ -431,6 +460,17 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
431460
activeFilterObject.list = serviceCitationProviders.sort(this.providerSorter);
432461
}
433462

463+
@task
464+
@waitFor
465+
async getRedirectAddonProviders() {
466+
const activeFilterObject = this.filterTypeMapper[FilterTypes.REDIRECT_SERVICE];
467+
468+
const serviceRedirectProviders: Provider[] =
469+
await taskFor(this.getExternalProviders)
470+
.perform(activeFilterObject.modelName, activeFilterObject.configuredAddons);
471+
activeFilterObject.list = serviceRedirectProviders.sort(this.providerSorter);
472+
}
473+
434474
providerSorter(a: Provider, b: Provider) {
435475
return a.provider.displayName.localeCompare(b.provider.displayName);
436476
}

lib/osf-components/addon/components/addons-service/manager/template.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
currentListIsLoading=this.currentListIsLoading
1111
projectEnabledAddons=this.projectEnabledAddons
1212
selectedProvider=this.selectedProvider
13+
selectedProviderIsRedirectService=this.selectedProviderIsRedirectService
1314
configureProvider=this.configureProvider
1415
beginAccountSetup=this.beginAccountSetup
1516
acceptTerms=this.acceptTerms

mirage/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,8 @@ export default function(this: Server) {
572572
this.resource('external-storage-services', { only: ['index', 'show'] });
573573
this.resource('external-citation-services', { only: ['index', 'show'] });
574574
this.resource('external-computing-services', { only: ['index', 'show'] });
575+
this.resource('external-redirect-services', { only: ['index', 'show'] });
576+
this.resource('external-link-services', { only: ['index', 'show'] });
575577
this.resource('user-references', { only: ['index', 'show'] });
576578
this.get('/user-references/:userGuid/authorized_storage_accounts/',
577579
addons.userReferenceAuthorizedStorageAccountList);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { CredentialsFormat } from 'ember-osf-web/models/external-service';
2+
export default [
3+
{
4+
id: 'dataverse',
5+
displayName: 'Dataverse',
6+
credentialsFormat: CredentialsFormat.OAUTH2,
7+
iconUrl: 'https://dataverse.org/logo.png',
8+
},
9+
];
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* eslint-disable max-len */
2+
import { CredentialsFormat } from 'ember-osf-web/models/external-service';
3+
export default [
4+
{
5+
id: 'datapipe',
6+
displayName: 'DataPipe',
7+
credentialsFormat: CredentialsFormat.OAUTH2,
8+
redirectUrl: 'https://pipe.jspsych.org/',
9+
iconUrl: 'https://pipe.jspsych.org/logo.png',
10+
},
11+
];

0 commit comments

Comments
 (0)