Skip to content

Commit

Permalink
feat: Support Canonical email block (#759)
Browse files Browse the repository at this point in the history
* adding new v4 admin endpoit admin-ip-block

* removing spaces

* adding new v4 andpoint canonical-email-block

* changing logic of the create canonical-email-blocks
  • Loading branch information
JacksonSamuel42 committed Dec 20, 2022
1 parent e957388 commit 464f4fe
Show file tree
Hide file tree
Showing 5 changed files with 120 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/clients/admin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ export class MastoAdminClient {
readonly domainAllows: AdminRepositories.DomainAllowRepository;
readonly domainEmailBlocks: AdminRepositories.EmailDomainBlockRepository;
readonly ipBlocks: AdminRepositories.IpBlockRepository;
readonly canonicalEmailBlocks: AdminRepositories.CanonicalEmailBlockRepository;

constructor(
private readonly http: Http,
Expand Down Expand Up @@ -50,6 +51,13 @@ export class MastoAdminClient {
this.version,
this.config,
);

this.canonicalEmailBlocks =
new AdminRepositories.CanonicalEmailBlockRepository(
this.http,
this.version,
this.config,
);
}
}

Expand Down
6 changes: 6 additions & 0 deletions src/entities/admin/canonical-email-block.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export interface CanonicalEmailBlock {
/** The ID of email block in the database. */
id: string;
/** The hash to test against. */
canonicalEmailHash: string;
}
1 change: 1 addition & 0 deletions src/entities/admin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ export type {
EmailDomainBlockHistory,
} from './domain-email-block';
export type { IpBlock, IpBlockSeverity } from './ip-block';
export type { CanonicalEmailBlock } from './canonical-email-block';
104 changes: 104 additions & 0 deletions src/repositories/admin/canonical-email-block-repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import type { MastoConfig } from '../../config';
import { version } from '../../decorators';
import type { Admin } from '../../entities';
import type { Http } from '../../http';
import { Paginator } from '../../paginator';
import { IterableRepository } from '../iterable-repository';
import type { DefaultPaginationParams } from '../repository';

export interface TestCanonicalEmailBlockParams {
/** The email to canonicalize and hash */
readonly email: string;
}

export interface CreateCanonicalEmailBlockParamsWithEmail {
/** The email to canonicalize, hash, and block. If this parameter is provided, canonical_email_hash will be ignored. */
readonly email: string;
}

export interface CreateCanonicalEmailBlockParamsWithCanonicalEmailHash {
/** The hash to test against. If email is not provided, this parameter is required. */
readonly canonicalEmailHash: string;
}

export type CreateCanonicalEmailBlockParams =
| CreateCanonicalEmailBlockParamsWithEmail
| CreateCanonicalEmailBlockParamsWithCanonicalEmailHash;

export class CanonicalEmailBlockRepository extends IterableRepository<
Admin.CanonicalEmailBlock,
CreateCanonicalEmailBlockParams
> {
constructor(
private readonly http: Http,
readonly version: string,
readonly config: MastoConfig,
) {
super();
}

/**
* List all canonical email blocks.
* @param params Parameters
* @return Array of CanonicalEmailBlock
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks/
*/
@version({ since: '4.0.0' })
iterate(
params?: DefaultPaginationParams,
): Paginator<DefaultPaginationParams, Admin.CanonicalEmailBlock[]> {
return new Paginator(
this.http,
'/api/v1/admin/canonical_email_blocks',
params,
);
}

/**
* Show a single canonical email block
* @param id id of the canonical email
* @return CanonicalEmailBlock
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
*/
@version({ since: '4.0.0' })
fetch(id: string): Promise<Admin.CanonicalEmailBlock> {
return this.http.get(`/api/v1/admin/canonical_email_blocks/${id}`);
}

/**
* Canonicalize and hash an email address.
* @param params Parameters
* @return Array of CanonicalEmailBlock
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
*/
@version({ since: '4.0.0' })
test(
params: TestCanonicalEmailBlockParams,
): Promise<Admin.CanonicalEmailBlock> {
return this.http.post('/api/v1/admin/canonical_email_blocks/test', params);
}

/**
* Block a canonical email.
* @param params Parameters
* @return CanonicalEmailBlock
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
*/
@version({ since: '4.0.0' })
create(
params: CreateCanonicalEmailBlockParams,
): Promise<Admin.CanonicalEmailBlock> {
return this.http.post('/api/v1/admin/canonical_email_blocks', params);
}

/**
* Lift a block a canonical email.
* @param id id of canonical email
* @return null
* @see https://docs.joinmastodon.org/methods/admin/canonical_email_blocks
*/
@version({ since: '4.0.0' })
remove(id: string): Promise<void> {
return this.http.delete(`/api/v1/admin/canonical_email_blocks/${id}`);
}
}
1 change: 1 addition & 0 deletions src/repositories/admin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export * from './domain-block-repository';
export * from './domain-allow-repository';
export * from './email-domain-block-repository';
export * from './ip-block-repository';
export * from './canonical-email-block-repository';

0 comments on commit 464f4fe

Please sign in to comment.