From 574e666d64f46917ada338b8cac3a355ce5070d9 Mon Sep 17 00:00:00 2001
From: Steve Reis <stevereis93@gmail.com>
Date: Fri, 15 Apr 2022 12:28:31 +0000
Subject: [PATCH] feat: Matomo integration

---
 api/src/config/matomo.config.ts                     |  9 +++++++++
 api/src/engine/engine.resolver.ts                   | 12 +++++++-----
 api/src/engine/models/configuration.model.ts        |  4 ++++
 api/src/engine/models/configuration/matomo.model.ts | 13 +++++++++++++
 api/src/main/app.module.ts                          |  3 ++-
 api/src/schema.gql                                  |  7 +++++++
 6 files changed, 42 insertions(+), 6 deletions(-)
 create mode 100644 api/src/config/matomo.config.ts
 create mode 100644 api/src/engine/models/configuration/matomo.model.ts

diff --git a/api/src/config/matomo.config.ts b/api/src/config/matomo.config.ts
new file mode 100644
index 0000000..274ae8c
--- /dev/null
+++ b/api/src/config/matomo.config.ts
@@ -0,0 +1,9 @@
+import { registerAs } from '@nestjs/config';
+
+export default registerAs('matomo', () => {
+  return {
+    enabled: process.env.MATOMO_ENABLED || false,
+    urlBase: process.env.MAMOTO_URL || undefined,
+    siteId: process.env.MATOMO_SITEID || undefined,
+  };
+});
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index 2ea02a1..6260111 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -41,18 +41,20 @@ export class EngineResolver {
   @Public()
   configuration(): Configuration {
     const config = this.engineService.getConfiguration?.();
+    const matomo = this.configSerivce.get('matomo');
 
     const data = {
       ...(config ?? {}),
-      skipAuth: parseToBoolean(
-        this.configSerivce.get(authConstants.skipAuth),
-        true,
-      ),
+      connectorId: this.engineOptions.type,
       skipTos: parseToBoolean(this.configSerivce.get(ENGINE_SKIP_TOS)),
       enableSSO: parseToBoolean(
         this.configSerivce.get(authConstants.enableSSO),
       ),
-      connectorId: this.engineOptions.type,
+      skipAuth: parseToBoolean(
+        this.configSerivce.get(authConstants.skipAuth),
+        true,
+      ),
+      matomo,
     };
 
     const version = Md5.hashStr(JSON.stringify(data));
diff --git a/api/src/engine/models/configuration.model.ts b/api/src/engine/models/configuration.model.ts
index d2d390d..6ffe779 100644
--- a/api/src/engine/models/configuration.model.ts
+++ b/api/src/engine/models/configuration.model.ts
@@ -1,4 +1,5 @@
 import { Field, ObjectType } from '@nestjs/graphql';
+import { Matomo } from './configuration/matomo.model';
 @ObjectType()
 export class Configuration {
   @Field()
@@ -21,4 +22,7 @@ export class Configuration {
 
   @Field({ nullable: true, defaultValue: true })
   enableSSO?: boolean;
+
+  @Field(() => Matomo, { nullable: true })
+  matomo?: Matomo;
 }
diff --git a/api/src/engine/models/configuration/matomo.model.ts b/api/src/engine/models/configuration/matomo.model.ts
new file mode 100644
index 0000000..62782ce
--- /dev/null
+++ b/api/src/engine/models/configuration/matomo.model.ts
@@ -0,0 +1,13 @@
+import { Field, ObjectType } from '@nestjs/graphql';
+
+@ObjectType()
+export class Matomo {
+  @Field({ nullable: true, defaultValue: false })
+  enabled?: boolean;
+
+  @Field({ nullable: true })
+  siteId?: string;
+
+  @Field({ nullable: true })
+  urlBase?: string;
+}
diff --git a/api/src/main/app.module.ts b/api/src/main/app.module.ts
index 4f784ef..ebc1be9 100644
--- a/api/src/main/app.module.ts
+++ b/api/src/main/app.module.ts
@@ -7,6 +7,7 @@ import { GraphQLError } from 'graphql';
 import { join } from 'path';
 import { AuthModule } from 'src/auth/auth.module';
 import dbConfig from 'src/config/db.config';
+import matomoConfig from 'src/config/matomo.config';
 import { EngineModule } from 'src/engine/engine.module';
 import { FilesModule } from 'src/files/files.module';
 import { UsersModule } from 'src/users/users.module';
@@ -18,7 +19,7 @@ import { AppService } from './app.service';
     ConfigModule.forRoot({
       isGlobal: true,
       envFilePath: ['.env', '.env.defaults'],
-      load: [dbConfig],
+      load: [dbConfig, matomoConfig],
     }),
     GraphQLModule.forRoot<ApolloDriverConfig>({
       driver: ApolloDriver,
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 95da149..8f5b0fe 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -14,6 +14,12 @@ type AuthenticationOutput {
   accessToken: String!
 }
 
+type Matomo {
+  enabled: Boolean
+  siteId: String
+  urlBase: String
+}
+
 type Configuration {
   connectorId: String!
   hasGalaxy: Boolean
@@ -22,6 +28,7 @@ type Configuration {
   skipAuth: Boolean
   skipTos: Boolean
   enableSSO: Boolean
+  matomo: Matomo
 }
 
 type Dataset {
-- 
GitLab