Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 00b2c5db85 | |||
| 46a1e82cfa | |||
| 701fb58fba | |||
| 3fd5c6fbd2 | |||
| 1477c30c67 | |||
| 67b41e7bdb | |||
| 92e67d0769 | |||
| ea1705d3b0 |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"enabledPlugins": {
|
||||||
|
"expo@claude-plugins-official": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Valeurs de développement local UNIQUEMENT
|
||||||
|
# NE JAMAIS committer .env avec de vraies valeurs
|
||||||
|
# En production, tous les secrets transitent par expo-secure-store (Android Keystore)
|
||||||
|
|
||||||
|
# URL de l'instance n8n — doit utiliser HTTPS en production
|
||||||
|
N8N_BASE_URL=https://n8n.votre-domaine.com
|
||||||
|
|
||||||
|
# Clé API n8n (Settings > API Keys dans l'interface n8n)
|
||||||
|
# Scope minimal recommandé : lecture workflows + exécutions uniquement
|
||||||
|
N8N_API_KEY=votre-cle-api-n8n
|
||||||
|
|
||||||
|
# Token custom injecté par HAProxy (header X-App-Token)
|
||||||
|
# Tourner régulièrement selon la procédure dans docs/HAPROXY.md
|
||||||
|
N8N_APP_TOKEN=votre-token-haproxy
|
||||||
+46
@@ -0,0 +1,46 @@
|
|||||||
|
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Expo
|
||||||
|
.expo/
|
||||||
|
dist/
|
||||||
|
web-build/
|
||||||
|
expo-env.d.ts
|
||||||
|
|
||||||
|
# Native
|
||||||
|
.kotlin/
|
||||||
|
*.orig.*
|
||||||
|
*.jks
|
||||||
|
*.p8
|
||||||
|
*.p12
|
||||||
|
*.key
|
||||||
|
*.mobileprovision
|
||||||
|
|
||||||
|
# Metro
|
||||||
|
.metro-health-check*
|
||||||
|
|
||||||
|
# debug
|
||||||
|
npm-debug.*
|
||||||
|
yarn-debug.*
|
||||||
|
yarn-error.*
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
*.pem
|
||||||
|
|
||||||
|
# local env files — NE JAMAIS committer les vraies valeurs
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env*.local
|
||||||
|
|
||||||
|
# EAS credentials — keystore critique, sauvegarder hors git
|
||||||
|
credentials.json
|
||||||
|
|
||||||
|
# typescript
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# generated native folders
|
||||||
|
/ios
|
||||||
|
/android
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Expo HAS CHANGED
|
||||||
|
|
||||||
|
Read the exact versioned docs at https://docs.expo.dev/versions/v54.0.0/ before writing any code.
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"name": "n8n Pilot",
|
||||||
|
"slug": "n8n-pilot",
|
||||||
|
"scheme": "n8npilot",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"orientation": "portrait",
|
||||||
|
"icon": "./assets/icon.png",
|
||||||
|
"userInterfaceStyle": "dark",
|
||||||
|
"newArchEnabled": true,
|
||||||
|
"splash": {
|
||||||
|
"image": "./assets/splash-icon.png",
|
||||||
|
"resizeMode": "contain",
|
||||||
|
"backgroundColor": "#121212"
|
||||||
|
},
|
||||||
|
"ios": {
|
||||||
|
"supportsTablet": false
|
||||||
|
},
|
||||||
|
"android": {
|
||||||
|
"adaptiveIcon": {
|
||||||
|
"foregroundImage": "./assets/adaptive-icon.png",
|
||||||
|
"backgroundColor": "#121212"
|
||||||
|
},
|
||||||
|
"edgeToEdgeEnabled": true,
|
||||||
|
"package": "com.n8npilot.app",
|
||||||
|
"permissions": [
|
||||||
|
"android.permission.USE_BIOMETRIC",
|
||||||
|
"android.permission.USE_FINGERPRINT"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"web": {
|
||||||
|
"favicon": "./assets/favicon.png"
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"expo-router",
|
||||||
|
"expo-secure-store",
|
||||||
|
[
|
||||||
|
"expo-local-authentication",
|
||||||
|
{
|
||||||
|
"faceIDPermission": "Autoriser n8n Pilot à utiliser Face ID"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"extra": {
|
||||||
|
"router": {},
|
||||||
|
"eas": {
|
||||||
|
"projectId": "4d160555-ded1-4a82-87a7-718d02a52e69"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"owner": "billisdead"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Tabs } from 'expo-router';
|
||||||
|
import { useTheme } from 'react-native-paper';
|
||||||
|
import { MaterialCommunityIcons } from '@expo/vector-icons';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Props pour les icônes de tab — typage strict MaterialCommunityIcons.
|
||||||
|
*/
|
||||||
|
interface TabIconProps {
|
||||||
|
name: React.ComponentProps<typeof MaterialCommunityIcons>['name'];
|
||||||
|
color: string;
|
||||||
|
size: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Composant d'icône de tab — évite la répétition du rendu inline */
|
||||||
|
const TabIcon: React.FC<TabIconProps> = ({ name, color, size }) => (
|
||||||
|
<MaterialCommunityIcons name={name} size={size} color={color} />
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layout de navigation par onglets (4 tabs principaux).
|
||||||
|
* Les logs d'exécution sont accessibles via le Stack navigator (pas de tab dédié)
|
||||||
|
* pour garder la nav propre et hiérarchiquement correcte.
|
||||||
|
*/
|
||||||
|
export default function TabsLayout() {
|
||||||
|
const theme = useTheme();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tabs
|
||||||
|
screenOptions={{
|
||||||
|
tabBarStyle: {
|
||||||
|
backgroundColor: theme.colors.surface,
|
||||||
|
borderTopColor: theme.colors.surfaceVariant,
|
||||||
|
borderTopWidth: 1,
|
||||||
|
},
|
||||||
|
tabBarActiveTintColor: theme.colors.primary,
|
||||||
|
tabBarInactiveTintColor: theme.colors.onSurfaceVariant,
|
||||||
|
headerStyle: { backgroundColor: theme.colors.surface },
|
||||||
|
headerTintColor: theme.colors.onSurface,
|
||||||
|
headerTitleStyle: { color: theme.colors.onSurface },
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Tabs.Screen
|
||||||
|
name="index"
|
||||||
|
options={{
|
||||||
|
title: 'Dashboard',
|
||||||
|
tabBarIcon: ({ color, size }) => (
|
||||||
|
<TabIcon name="view-dashboard-outline" color={color} size={size} />
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Tabs.Screen
|
||||||
|
name="workflows"
|
||||||
|
options={{
|
||||||
|
title: 'Workflows',
|
||||||
|
tabBarIcon: ({ color, size }) => (
|
||||||
|
<TabIcon name="sitemap-outline" color={color} size={size} />
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Tabs.Screen
|
||||||
|
name="executions"
|
||||||
|
options={{
|
||||||
|
title: 'Exécutions',
|
||||||
|
tabBarIcon: ({ color, size }) => (
|
||||||
|
<TabIcon name="history" color={color} size={size} />
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Tabs.Screen
|
||||||
|
name="settings"
|
||||||
|
options={{
|
||||||
|
title: 'Paramètres',
|
||||||
|
tabBarIcon: ({ color, size }) => (
|
||||||
|
<TabIcon name="cog-outline" color={color} size={size} />
|
||||||
|
),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Tabs>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import ExecutionsScreen from '../../src/screens/ExecutionsScreen';
|
||||||
|
|
||||||
|
export default ExecutionsScreen;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import DashboardScreen from '../../src/screens/DashboardScreen';
|
||||||
|
|
||||||
|
export default DashboardScreen;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import SettingsScreen from '../../src/screens/SettingsScreen';
|
||||||
|
|
||||||
|
export default SettingsScreen;
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import WorkflowsScreen from '../../src/screens/WorkflowsScreen';
|
||||||
|
|
||||||
|
export default WorkflowsScreen;
|
||||||
+123
@@ -0,0 +1,123 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { View } from 'react-native';
|
||||||
|
import { Stack, useRouter, useSegments } from 'expo-router';
|
||||||
|
import { PaperProvider, MD3DarkTheme, ActivityIndicator, Snackbar } from 'react-native-paper';
|
||||||
|
import { SafeAreaProvider } from 'react-native-safe-area-context';
|
||||||
|
import { GestureHandlerRootView } from 'react-native-gesture-handler';
|
||||||
|
import { useAppStore } from '../src/store/appStore';
|
||||||
|
import { registerToastCallback } from '../src/utils/errorHandler';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Thème Material Design 3 sombre personnalisé pour n8n Pilot.
|
||||||
|
* L'orange (#FF6D3E) est la couleur d'accent principale — cohérente avec l'identité n8n.
|
||||||
|
*/
|
||||||
|
const APP_THEME = {
|
||||||
|
...MD3DarkTheme,
|
||||||
|
colors: {
|
||||||
|
...MD3DarkTheme.colors,
|
||||||
|
primary: '#FF6D3E',
|
||||||
|
primaryContainer: '#5C1C00',
|
||||||
|
secondary: '#FF9E7D',
|
||||||
|
background: '#121212',
|
||||||
|
surface: '#1E1E1E',
|
||||||
|
surfaceVariant: '#2C2C2C',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layout racine de l'application.
|
||||||
|
* Responsabilités :
|
||||||
|
* 1. Fournit les providers globaux (GestureHandler, SafeArea, Paper)
|
||||||
|
* 2. Charge la configuration au démarrage depuis le secure store
|
||||||
|
* 3. Redirige vers /setup si aucune configuration n'existe
|
||||||
|
* 4. Enregistre le callback de toast pour l'errorHandler global
|
||||||
|
* 5. Affiche le toast d'erreur global en overlay
|
||||||
|
*/
|
||||||
|
export default function RootLayout() {
|
||||||
|
const router = useRouter();
|
||||||
|
const segments = useSegments();
|
||||||
|
const { config, loadConfig } = useAppStore();
|
||||||
|
const [isReady, setIsReady] = useState(false);
|
||||||
|
const [toastMessage, setToastMessage] = useState('');
|
||||||
|
const [toastVisible, setToastVisible] = useState(false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enregistre le callback de toast dans l'errorHandler au premier montage.
|
||||||
|
* Permet à toute la couche API de remonter des erreurs vers l'UI sans couplage direct.
|
||||||
|
*/
|
||||||
|
useEffect(() => {
|
||||||
|
registerToastCallback((message) => {
|
||||||
|
setToastMessage(message);
|
||||||
|
setToastVisible(true);
|
||||||
|
});
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
/** Charge la configuration depuis le secure store puis marque l'app comme prête */
|
||||||
|
useEffect(() => {
|
||||||
|
loadConfig().finally(() => setIsReady(true));
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gère la redirection initiale selon l'état de configuration.
|
||||||
|
* - Pas configuré et hors /setup → redirige vers /setup
|
||||||
|
* - Configuré et dans /setup → redirige vers les tabs
|
||||||
|
*/
|
||||||
|
useEffect(() => {
|
||||||
|
if (!isReady) return;
|
||||||
|
const inSetup = segments[0] === 'setup';
|
||||||
|
if (!config.isConfigured && !inSetup) {
|
||||||
|
router.replace('/setup');
|
||||||
|
} else if (config.isConfigured && inSetup) {
|
||||||
|
router.replace('/(tabs)');
|
||||||
|
}
|
||||||
|
}, [isReady, config.isConfigured, segments]);
|
||||||
|
|
||||||
|
if (!isReady) {
|
||||||
|
return (
|
||||||
|
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center', backgroundColor: '#121212' }}>
|
||||||
|
<ActivityIndicator color="#FF6D3E" size="large" />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<GestureHandlerRootView style={{ flex: 1 }}>
|
||||||
|
<SafeAreaProvider>
|
||||||
|
<PaperProvider theme={APP_THEME}>
|
||||||
|
<Stack screenOptions={{ headerShown: false }}>
|
||||||
|
<Stack.Screen name="(tabs)" />
|
||||||
|
<Stack.Screen
|
||||||
|
name="setup"
|
||||||
|
options={{
|
||||||
|
headerShown: true,
|
||||||
|
headerTitle: 'Configuration',
|
||||||
|
headerStyle: { backgroundColor: '#1E1E1E' },
|
||||||
|
headerTintColor: '#FF6D3E',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Stack.Screen
|
||||||
|
name="execution/[id]"
|
||||||
|
options={{
|
||||||
|
headerShown: true,
|
||||||
|
headerTitle: "Logs d'exécution",
|
||||||
|
headerStyle: { backgroundColor: '#1E1E1E' },
|
||||||
|
headerTintColor: '#FF6D3E',
|
||||||
|
presentation: 'card',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</Stack>
|
||||||
|
|
||||||
|
{/* Toast global pour toutes les erreurs remontées par l'errorHandler */}
|
||||||
|
<Snackbar
|
||||||
|
visible={toastVisible}
|
||||||
|
onDismiss={() => setToastVisible(false)}
|
||||||
|
duration={4000}
|
||||||
|
style={{ backgroundColor: '#4A0000' }}
|
||||||
|
>
|
||||||
|
{toastMessage}
|
||||||
|
</Snackbar>
|
||||||
|
</PaperProvider>
|
||||||
|
</SafeAreaProvider>
|
||||||
|
</GestureHandlerRootView>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import LogsScreen from '../../src/screens/LogsScreen';
|
||||||
|
|
||||||
|
export default LogsScreen;
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { View, StyleSheet } from 'react-native';
|
||||||
|
import { Text, useTheme } from 'react-native-paper';
|
||||||
|
import SettingsScreen from '../src/screens/SettingsScreen';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran d'installation initiale — affiché au premier lancement.
|
||||||
|
* Partage le composant SettingsScreen avec un en-tête de bienvenue.
|
||||||
|
* Après sauvegarde, le root layout redirige automatiquement vers les tabs.
|
||||||
|
*/
|
||||||
|
export default function SetupScreen() {
|
||||||
|
const theme = useTheme();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||||
|
<View style={styles.header}>
|
||||||
|
<Text
|
||||||
|
variant="headlineMedium"
|
||||||
|
style={[styles.title, { color: theme.colors.primary }]}
|
||||||
|
>
|
||||||
|
n8n Pilot
|
||||||
|
</Text>
|
||||||
|
<Text
|
||||||
|
variant="bodyMedium"
|
||||||
|
style={{ color: theme.colors.onSurfaceVariant, textAlign: 'center' }}
|
||||||
|
>
|
||||||
|
Configurez votre instance n8n pour commencer
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
<SettingsScreen />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
paddingHorizontal: 24,
|
||||||
|
paddingTop: 24,
|
||||||
|
paddingBottom: 8,
|
||||||
|
alignItems: 'center',
|
||||||
|
gap: 4,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
fontWeight: '700',
|
||||||
|
},
|
||||||
|
});
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
module.exports = function (api) {
|
||||||
|
api.cache(true);
|
||||||
|
return {
|
||||||
|
presets: ['babel-preset-expo'],
|
||||||
|
plugins: ['react-native-reanimated/plugin'],
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Chemin vers le fichier de valeurs
|
|
||||||
RULES_FILE="firewall_rules.txt"
|
|
||||||
|
|
||||||
# Vérifier si le fichier de valeurs existe
|
|
||||||
if [[ ! -f "$RULES_FILE" ]]; then
|
|
||||||
echo "Le fichier de valeurs $RULES_FILE n'existe pas."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Sauvegarder la configuration actuelle de firewalld
|
|
||||||
TIMESTAMP=$(date +%Y%m%d%H%M%S)
|
|
||||||
BACKUP_DIR="/etc/firewalld/backup"
|
|
||||||
BACKUP_FILE="$BACKUP_DIR/firewalld_backup_$TIMESTAMP"
|
|
||||||
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
cp -r /etc/firewalld/* "$BACKUP_FILE"
|
|
||||||
|
|
||||||
echo "Configuration actuelle sauvegardée dans $BACKUP_FILE"
|
|
||||||
|
|
||||||
# Lire le fichier de valeurs et ajouter les règles
|
|
||||||
while IFS=: read -r IP PORT; do
|
|
||||||
# Ajouter la règle sans supprimer les règles existantes
|
|
||||||
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='$IP' port port='$PORT' protocol='tcp' accept"
|
|
||||||
done < "$RULES_FILE"
|
|
||||||
|
|
||||||
# Recharger la configuration de firewalld pour appliquer les changements
|
|
||||||
firewall-cmd --reload
|
|
||||||
|
|
||||||
echo "Les nouvelles règles ont été ajoutées et la configuration a été rechargée."
|
|
||||||
-247
@@ -1,247 +0,0 @@
|
|||||||
--
|
|
||||||
-- Cross-origin Request Sharing (CORS) implementation for HAProxy Lua host
|
|
||||||
--
|
|
||||||
-- CORS RFC:
|
|
||||||
-- https://www.w3.org/TR/cors/
|
|
||||||
--
|
|
||||||
-- Copyright (c) 2019. Nick Ramirez <nramirez@haproxy.com>
|
|
||||||
-- Copyright (c) 2019. HAProxy Technologies, LLC.
|
|
||||||
|
|
||||||
local M={}
|
|
||||||
|
|
||||||
-- Loops through array to find the given string.
|
|
||||||
-- items: array of strings
|
|
||||||
-- test_str: string to search for
|
|
||||||
function contains(items, test_str)
|
|
||||||
for _,item in pairs(items) do
|
|
||||||
if item == test_str then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
M.wildcard_origin_allowed = function(allowed_origins)
|
|
||||||
if contains(allowed_origins, "*") then
|
|
||||||
return "*"
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
M.specifies_scheme = function(s)
|
|
||||||
return string.find(s, "^%a+://") ~= nil
|
|
||||||
end
|
|
||||||
|
|
||||||
M.specifies_generic_scheme = function(s)
|
|
||||||
return string.find(s, "^//") ~= nil
|
|
||||||
end
|
|
||||||
|
|
||||||
M.begins_with_dot = function(s)
|
|
||||||
return string.find(s, "^%.") ~= nil
|
|
||||||
end
|
|
||||||
|
|
||||||
M.trim = function(s)
|
|
||||||
return s:gsub("%s+", "")
|
|
||||||
end
|
|
||||||
|
|
||||||
M.build_pattern = function(pattern)
|
|
||||||
-- remove spaces
|
|
||||||
pattern = M.trim(pattern)
|
|
||||||
|
|
||||||
if pattern ~= nil and pattern ~= '' then
|
|
||||||
-- if there is no scheme and the pattern does not begin with a dot,
|
|
||||||
-- add the generic scheme to the beginning of the pattern
|
|
||||||
if M.specifies_scheme(pattern) == false and M.specifies_generic_scheme(pattern) == false and M.begins_with_dot(pattern) == false then
|
|
||||||
pattern = "//" .. pattern
|
|
||||||
end
|
|
||||||
|
|
||||||
-- escape dots and dashes in pattern
|
|
||||||
pattern = pattern:gsub("([%.%-])", "%%%1")
|
|
||||||
|
|
||||||
-- an asterisk for the port means allow all ports
|
|
||||||
if string.find(pattern, "[:]+%*$") ~= nil then
|
|
||||||
pattern = pattern:gsub("[:]+%*$", "[:]+[0-9]+")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- append end character
|
|
||||||
pattern = pattern .. "$"
|
|
||||||
return pattern
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- If the given origin is found within the allowed_origins string, it is returned. Otherwise, nil is returned.
|
|
||||||
-- origin: The value from the 'origin' request header
|
|
||||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,https://localhost:8080,//test.com)
|
|
||||||
-- e.g. localhost : allow http(s)://localhost
|
|
||||||
-- e.g. //localhost : allow http(s)://localhost
|
|
||||||
-- e.g. https://mydomain.com : allow only HTTPS of mydomain.com
|
|
||||||
-- e.g. http://mydomain.com : allow only HTTP of mydomain.com
|
|
||||||
-- e.g. http://mydomain.com:8080 : allow only HTTP of mydomain.com from port 8080
|
|
||||||
-- e.g. //mydomain.com : allow only http(s)://mydomain.com
|
|
||||||
-- e.g. .mydomain.com : allow ALL subdomains of mydomain.com from ALL source ports
|
|
||||||
-- e.g. .mydomain.com:443 : allow ALL subdomains of mydomain.com from default HTTPS source port
|
|
||||||
--
|
|
||||||
-- e.g. ".mydomain.com:443, //mydomain.com:443, //localhost"
|
|
||||||
-- allows all subdomains and main domain of mydomain.com only for HTTPS from default HTTPS port and allows
|
|
||||||
-- all HTTP and HTTPS connections from ALL source port for localhost
|
|
||||||
--
|
|
||||||
M.get_allowed_origin = function(origin, allowed_origins)
|
|
||||||
if origin ~= nil then
|
|
||||||
-- if wildcard (*) is allowed, return it, which allows all origins
|
|
||||||
wildcard_origin = M.wildcard_origin_allowed(allowed_origins)
|
|
||||||
if wildcard_origin ~= nil then
|
|
||||||
return wildcard_origin
|
|
||||||
end
|
|
||||||
|
|
||||||
for index, allowed_origin in ipairs(allowed_origins) do
|
|
||||||
pattern = M.build_pattern(allowed_origin)
|
|
||||||
|
|
||||||
if pattern ~= nil then
|
|
||||||
if origin:match(pattern) then
|
|
||||||
core.Debug("Test: " .. pattern .. ", Origin: " .. origin .. ", Match: yes")
|
|
||||||
return origin
|
|
||||||
else
|
|
||||||
core.Debug("Test: " .. pattern .. ", Origin: " .. origin .. ", Match: no")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Adds headers for CORS preflight request and then attaches them to the response
|
|
||||||
-- after it comes back from the server. This works with versions of HAProxy prior to 2.2.
|
|
||||||
-- The downside is that the OPTIONS request must be sent to the backend server first and can't
|
|
||||||
-- be intercepted and returned immediately.
|
|
||||||
-- txn: The current transaction object that gives access to response properties
|
|
||||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
|
||||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
|
||||||
function preflight_request_ver1(txn, allowed_methods, allowed_headers)
|
|
||||||
core.Debug("CORS: preflight request received")
|
|
||||||
txn.http:res_set_header("Access-Control-Allow-Methods", allowed_methods)
|
|
||||||
txn.http:res_set_header("Access-Control-Allow-Headers", allowed_headers)
|
|
||||||
txn.http:res_set_header("Access-Control-Max-Age", 600)
|
|
||||||
core.Debug("CORS: attaching allowed methods to response")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Add headers for CORS preflight request and then returns a 204 response.
|
|
||||||
-- The 'reply' function used here is available in HAProxy 2.2+. It allows HAProxy to return
|
|
||||||
-- a reply without contacting the server.
|
|
||||||
-- txn: The current transaction object that gives access to response properties
|
|
||||||
-- origin: The value from the 'origin' request header
|
|
||||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
|
||||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,localhost:8080,test.com)
|
|
||||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
|
||||||
function preflight_request_ver2(txn, origin, allowed_methods, allowed_origins, allowed_headers)
|
|
||||||
core.Debug("CORS: preflight request received")
|
|
||||||
|
|
||||||
local reply = txn:reply()
|
|
||||||
reply:set_status(204, "No Content")
|
|
||||||
reply:add_header("Content-Type", "text/html")
|
|
||||||
reply:add_header("Access-Control-Allow-Methods", allowed_methods)
|
|
||||||
reply:add_header("Access-Control-Allow-Headers", allowed_headers)
|
|
||||||
reply:add_header("Access-Control-Max-Age", 600)
|
|
||||||
|
|
||||||
local allowed_origin = M.get_allowed_origin(origin, allowed_origins)
|
|
||||||
|
|
||||||
if allowed_origin == nil then
|
|
||||||
core.Debug("CORS: " .. origin .. " not allowed")
|
|
||||||
else
|
|
||||||
core.Debug("CORS: " .. origin .. " allowed")
|
|
||||||
reply:add_header("Access-Control-Allow-Origin", allowed_origin)
|
|
||||||
|
|
||||||
if allowed_origin ~= "*" then
|
|
||||||
reply:add_header("Vary", "Accept-Encoding,Origin")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
core.Debug("CORS: Returning reply to preflight request")
|
|
||||||
txn:done(reply)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- When invoked during a request, captures the origin header if present and stores it in a private variable.
|
|
||||||
-- If the request is OPTIONS and it is a supported version of HAProxy, returns a preflight request reply.
|
|
||||||
-- Otherwise, the preflight request header is added to the response after it has returned from the server.
|
|
||||||
-- txn: The current transaction object that gives access to response properties
|
|
||||||
-- allowed_methods: Comma-delimited list of allowed HTTP methods. (e.g. GET,POST,PUT,DELETE)
|
|
||||||
-- allowed_origins: Comma-delimited list of allowed origins. (e.g. localhost,localhost:8080,test.com)
|
|
||||||
-- allowed_headers: Comma-delimited list of allowed headers. (e.g. X-Header1,X-Header2)
|
|
||||||
function cors_request(txn, allowed_methods, allowed_origins, allowed_headers)
|
|
||||||
local headers = txn.http:req_get_headers()
|
|
||||||
local transaction_data = {}
|
|
||||||
local origin = nil
|
|
||||||
local allowed_origins = core.tokenize(allowed_origins, ",")
|
|
||||||
|
|
||||||
if headers["origin"] ~= nil and headers["origin"][0] ~= nil then
|
|
||||||
core.Debug("CORS: Got 'Origin' header: " .. headers["origin"][0])
|
|
||||||
origin = headers["origin"][0]
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Bail if client did not send an Origin
|
|
||||||
-- for example, it may be a regular OPTIONS request that is not a CORS preflight request
|
|
||||||
if origin == nil or origin == '' then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
transaction_data["origin"] = origin
|
|
||||||
transaction_data["allowed_methods"] = allowed_methods
|
|
||||||
transaction_data["allowed_origins"] = allowed_origins
|
|
||||||
transaction_data["allowed_headers"] = allowed_headers
|
|
||||||
|
|
||||||
txn:set_priv(transaction_data)
|
|
||||||
|
|
||||||
local method = txn.sf:method()
|
|
||||||
transaction_data["method"] = method
|
|
||||||
|
|
||||||
if method == "OPTIONS" and txn.reply ~= nil then
|
|
||||||
preflight_request_ver2(txn, origin, allowed_methods, allowed_origins, allowed_headers)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- When invoked during a response, sets CORS headers so that the browser can read the response from permitted domains.
|
|
||||||
-- txn: The current transaction object that gives access to response properties.
|
|
||||||
function cors_response(txn)
|
|
||||||
local transaction_data = txn:get_priv()
|
|
||||||
|
|
||||||
if transaction_data == nil then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local origin = transaction_data["origin"]
|
|
||||||
local allowed_origins = transaction_data["allowed_origins"]
|
|
||||||
local allowed_methods = transaction_data["allowed_methods"]
|
|
||||||
local allowed_headers = transaction_data["allowed_headers"]
|
|
||||||
local method = transaction_data["method"]
|
|
||||||
|
|
||||||
-- Bail if client did not send an Origin
|
|
||||||
if origin == nil or origin == '' then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local allowed_origin = M.get_allowed_origin(origin, allowed_origins)
|
|
||||||
|
|
||||||
if allowed_origin == nil then
|
|
||||||
core.Debug("CORS: " .. origin .. " not allowed")
|
|
||||||
else
|
|
||||||
if method == "OPTIONS" and txn.reply == nil then
|
|
||||||
preflight_request_ver1(txn, allowed_methods, allowed_headers)
|
|
||||||
end
|
|
||||||
|
|
||||||
core.Debug("CORS: " .. origin .. " allowed")
|
|
||||||
txn.http:res_set_header("Access-Control-Allow-Origin", allowed_origin)
|
|
||||||
|
|
||||||
if allowed_origin ~= "*" then
|
|
||||||
txn.http:res_add_header("Vary", "Accept-Encoding,Origin")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Register the actions with HAProxy
|
|
||||||
core.register_action("cors", {"http-req"}, cors_request, 3)
|
|
||||||
core.register_action("cors", {"http-res"}, cors_response, 0)
|
|
||||||
|
|
||||||
return M
|
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
# Sauvegarde de n8n Pilot
|
||||||
|
|
||||||
|
## Ce qu'il faut sauvegarder
|
||||||
|
|
||||||
|
### 1. Credentials de signature EAS (`credentials.json`)
|
||||||
|
|
||||||
|
**Où** : généré par EAS lors du premier build dans `~/.eas/` ou téléchargeable depuis le dashboard Expo.
|
||||||
|
|
||||||
|
**Pourquoi** : sans le keystore de signature, il est **impossible** de mettre à jour l'APK sur un appareil
|
||||||
|
qui a déjà la version signée avec ce keystore. Android refuse les mises à jour avec un keystore différent.
|
||||||
|
|
||||||
|
**Comment sauvegarder** :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Télécharger les credentials depuis EAS
|
||||||
|
eas credentials
|
||||||
|
|
||||||
|
# Choisir : Android > Keystore > Download
|
||||||
|
# Sauvegarder le fichier .jks et les mots de passe associés
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Criticalité : MAXIMALE** — perte du keystore = obligation de désinstaller l'app sur tous les appareils
|
||||||
|
> avant de pouvoir installer une nouvelle version.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. Fichier `.env` de développement
|
||||||
|
|
||||||
|
**Où** : racine du projet (jamais dans git)
|
||||||
|
|
||||||
|
**Pourquoi** : contient l'URL de l'instance, la clé API et le token HAProxy pour l'environnement de dev.
|
||||||
|
Sans ce fichier, les développeurs doivent reconfigurer manuellement l'environnement.
|
||||||
|
|
||||||
|
**Comment sauvegarder** : gestionnaire de mots de passe (Bitwarden, 1Password, Vault) avec les champs :
|
||||||
|
- `N8N_BASE_URL`
|
||||||
|
- `N8N_API_KEY`
|
||||||
|
- `N8N_APP_TOKEN`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Configuration EAS (`eas.json`)
|
||||||
|
|
||||||
|
**Où** : racine du projet, **committé dans git**
|
||||||
|
|
||||||
|
**Pourquoi** : définit les profils de build (development, preview, production).
|
||||||
|
|
||||||
|
**Statut** : déjà sauvegardé via git — aucune action supplémentaire requise.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. Données utilisateur sur l'appareil
|
||||||
|
|
||||||
|
Les credentials (URL, clé API, token) sont chiffrés dans l'**Android Keystore** de l'appareil.
|
||||||
|
Ils ne sont **pas** sauvegardés dans les sauvegardes Android standard (par conception de sécurité).
|
||||||
|
|
||||||
|
**Conséquence** : après réinitialisation usine ou changement d'appareil, l'utilisateur doit
|
||||||
|
reconfigurer l'app depuis l'écran Paramètres.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fréquence recommandée
|
||||||
|
|
||||||
|
| Élément | Fréquence | Stockage |
|
||||||
|
|---------|-----------|----------|
|
||||||
|
| Keystore EAS | À chaque rotation + après génération | Coffre chiffré hors-ligne |
|
||||||
|
| `.env` dev | À chaque rotation des tokens | Gestionnaire de mots de passe |
|
||||||
|
| Code source | En continu via git push | Gitea self-hosted |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Procédure de restauration
|
||||||
|
|
||||||
|
### Restaurer le keystore
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Uploader le keystore sauvegardé vers EAS
|
||||||
|
eas credentials
|
||||||
|
# Choisir : Android > Keystore > Upload existing keystore
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restaurer l'environnement de développement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://homegit.gyozamancave.fr/billisdead/n8n-mobile.git
|
||||||
|
cd n8n-mobile
|
||||||
|
cp .env.example .env
|
||||||
|
# Remplir .env depuis le gestionnaire de mots de passe
|
||||||
|
npm install --legacy-peer-deps
|
||||||
|
```
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
# Configuration HAProxy pour n8n Pilot
|
||||||
|
|
||||||
|
## Contexte
|
||||||
|
|
||||||
|
n8n est déjà exposé via HAProxy à `https://n8n.gyozamancave.fr`.
|
||||||
|
Il suffit d'ajouter la validation du `X-App-Token` dans le backend existant **sans toucher au frontend**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modification à apporter — backend n8n uniquement
|
||||||
|
|
||||||
|
Remplacer le backend `n8n-backend` actuel par :
|
||||||
|
|
||||||
|
```haproxy
|
||||||
|
backend n8n-backend
|
||||||
|
mode http
|
||||||
|
balance source
|
||||||
|
|
||||||
|
# IPs qui ne nécessitent pas le X-App-Token (LAN + IP fixe perso)
|
||||||
|
acl is_local src 192.168.1.0/24 192.168.2.0/24 82.67.3.126/32
|
||||||
|
|
||||||
|
# Validation du token pour les accès extérieurs (mobile app)
|
||||||
|
acl valid_app_token req.hdr(X-App-Token) -m str "VOTRE_TOKEN_ICI"
|
||||||
|
http-request deny deny_status 403 if !is_local !valid_app_token
|
||||||
|
|
||||||
|
# Supprimer le token avant de forwarder à n8n (n8n ne doit pas le voir)
|
||||||
|
http-request del-header X-App-Token
|
||||||
|
|
||||||
|
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
||||||
|
http-request set-header X-Real-IP %[src]
|
||||||
|
http-request set-header X-Forwarded-For %[src]
|
||||||
|
http-request set-header Host %[req.hdr(host)]
|
||||||
|
option forwardfor
|
||||||
|
server n8n 192.168.1.56:5678
|
||||||
|
```
|
||||||
|
|
||||||
|
**Logique** :
|
||||||
|
- Depuis le LAN (`192.168.1/2.x`) ou ton IP fixe → accès direct, pas de token requis (navigation normale dans n8n)
|
||||||
|
- Depuis l'extérieur (mobile app 4G/5G) → `X-App-Token` obligatoire, sinon 403
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Appliquer la modification
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Valider la syntaxe avant rechargement
|
||||||
|
haproxy -f /etc/haproxy/haproxy.cfg -c
|
||||||
|
|
||||||
|
# Rechargement gracieux (sans coupure)
|
||||||
|
systemctl reload haproxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Générer un token solide
|
||||||
|
|
||||||
|
```bash
|
||||||
|
openssl rand -hex 32
|
||||||
|
```
|
||||||
|
|
||||||
|
Copier la valeur générée dans :
|
||||||
|
1. La config HAProxy (`VOTRE_TOKEN_ICI` ci-dessus)
|
||||||
|
2. L'app Android : Paramètres > Token HAProxy > Sauvegarder
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rotation du token
|
||||||
|
|
||||||
|
1. Générer un nouveau token (`openssl rand -hex 32`)
|
||||||
|
2. Ajouter temporairement les **deux** ACLs dans HAProxy pour éviter les coupures :
|
||||||
|
|
||||||
|
```haproxy
|
||||||
|
acl valid_app_token req.hdr(X-App-Token) -m str "ANCIEN_TOKEN"
|
||||||
|
acl valid_app_token_new req.hdr(X-App-Token) -m str "NOUVEAU_TOKEN"
|
||||||
|
http-request deny deny_status 403 if !is_local !valid_app_token !valid_app_token_new
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Mettre à jour le token dans l'app (Paramètres > Token HAProxy)
|
||||||
|
4. Retirer l'ancien token de la config HAProxy
|
||||||
|
5. `systemctl reload haproxy`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**403 depuis l'app** → token absent ou incorrect. Tester :
|
||||||
|
```bash
|
||||||
|
curl -v -H "X-App-Token: VOTRE_TOKEN" https://n8n.gyozamancave.fr/api/v1/workflows
|
||||||
|
```
|
||||||
|
|
||||||
|
**403 depuis le navigateur** → vérifier que l'IP source est bien dans `is_local`. Depuis un VPN ou tethering, l'IP peut ne pas matcher.
|
||||||
|
|
||||||
|
**Logs HAProxy en direct** :
|
||||||
|
```bash
|
||||||
|
journalctl -u haproxy -f
|
||||||
|
```
|
||||||
+136
@@ -0,0 +1,136 @@
|
|||||||
|
# Installation de n8n Pilot
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
| Outil | Version minimale | Rôle |
|
||||||
|
|-------|-----------------|------|
|
||||||
|
| Node.js | 20 LTS | Runtime JS |
|
||||||
|
| npm | 10+ | Gestionnaire de paquets |
|
||||||
|
| EAS CLI | 3.0+ | Build cloud Expo |
|
||||||
|
| Android | 8.0 (API 26) | Cible minimum |
|
||||||
|
| Compte Expo | gratuit | Build EAS |
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier les prérequis
|
||||||
|
node --version # >= 20
|
||||||
|
npm --version # >= 10
|
||||||
|
eas --version # >= 3.0 (après install)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Cloner le dépôt
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://homegit.gyozamancave.fr/billisdead/n8n-mobile.git
|
||||||
|
cd n8n-mobile
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Installer les dépendances
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install --legacy-peer-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Configurer l'environnement de développement
|
||||||
|
|
||||||
|
Copiez le fichier exemple et remplissez vos valeurs **localement uniquement** :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
# Éditez .env avec votre URL, clé API et token HAProxy
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠️ Le fichier `.env` est dans `.gitignore` — ne jamais le committer.
|
||||||
|
> En production, les secrets transitent **uniquement** par `expo-secure-store`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Lancer en développement
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Démarrer le serveur Metro
|
||||||
|
npm start
|
||||||
|
|
||||||
|
# Sur appareil Android (USB ou WiFi) ou émulateur
|
||||||
|
npm run android
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour le développement, l'app vous demandera de saisir l'URL et la clé API
|
||||||
|
directement dans l'écran Paramètres — elles seront stockées dans le Keystore Android.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Installer EAS CLI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install -g eas-cli
|
||||||
|
eas login # Connectez-vous avec votre compte Expo
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Configurer le projet EAS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Initialise l'ID de projet Expo (première fois uniquement)
|
||||||
|
eas init
|
||||||
|
|
||||||
|
# Vérifie la configuration
|
||||||
|
eas build:configure
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Builder l'APK (profil preview)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build Android APK — exécuté dans le cloud Expo
|
||||||
|
eas build --platform android --profile preview
|
||||||
|
```
|
||||||
|
|
||||||
|
Le build prend environ 10–15 minutes. EAS envoie un email avec le lien de téléchargement.
|
||||||
|
|
||||||
|
Pour un build local (nécessite Android Studio + JDK 17) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas build --platform android --profile preview --local
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Sideloader l'APK sur Android
|
||||||
|
|
||||||
|
### Via ADB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Connecter l'appareil en USB avec le débogage USB activé
|
||||||
|
adb devices
|
||||||
|
|
||||||
|
# Installer l'APK
|
||||||
|
adb install chemin/vers/n8n-pilot.apk
|
||||||
|
```
|
||||||
|
|
||||||
|
### Manuellement
|
||||||
|
|
||||||
|
1. Transférez l'APK sur l'appareil (câble, Google Drive, etc.)
|
||||||
|
2. Ouvrez l'APK depuis le gestionnaire de fichiers
|
||||||
|
3. Autorisez l'installation depuis des sources inconnues si demandé
|
||||||
|
4. Suivez l'assistant d'installation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9. Premier lancement
|
||||||
|
|
||||||
|
Au premier démarrage, l'écran de configuration apparaît automatiquement :
|
||||||
|
|
||||||
|
1. Saisissez l'URL HTTPS de votre instance n8n
|
||||||
|
2. Collez votre clé API n8n (Settings > API Keys dans n8n)
|
||||||
|
3. Saisissez le token HAProxy si applicable
|
||||||
|
4. Appuyez sur **Sauvegarder**
|
||||||
|
|
||||||
|
Les credentials sont chiffrés dans l'Android Keystore — ils ne quittent jamais l'appareil.
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
# Sécurité — n8n Pilot
|
||||||
|
|
||||||
|
## Modèle de menaces
|
||||||
|
|
||||||
|
### Acteurs et vecteurs
|
||||||
|
|
||||||
|
| Menace | Impact | Probabilité | Mitigation |
|
||||||
|
|--------|--------|-------------|-----------|
|
||||||
|
| Vol de l'appareil Android | Accès aux credentials n8n | Moyen | Android Keystore chiffré, biométrie optionnelle |
|
||||||
|
| Interception réseau (MITM) | Exposition de la clé API | Faible (TLS) | TLS obligatoire, refus HTTP |
|
||||||
|
| Fuite du token HAProxy | Accès non autorisé à n8n | Moyen | Rotation régulière, token hors bundle |
|
||||||
|
| Compromission du build APK | Backdoor dans l'app | Faible | Keystore signé, builds EAS reproductibles |
|
||||||
|
| Brute force API | Épuisement quotas n8n | Faible | Rate limiting HAProxy (429) |
|
||||||
|
| Logs applicatifs exposés | Fuite de secrets | Faible | Jamais de log de secrets, même en dev |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Principes appliqués
|
||||||
|
|
||||||
|
### Least Privilege (moindre privilège)
|
||||||
|
|
||||||
|
La clé API n8n doit être créée avec le **scope minimal** nécessaire :
|
||||||
|
|
||||||
|
```
|
||||||
|
Recommandé :
|
||||||
|
✓ workflows:list — lister les workflows
|
||||||
|
✓ workflows:read — lire les détails
|
||||||
|
✓ workflows:update — activer/désactiver (toggle)
|
||||||
|
✓ executions:list — voir l'historique
|
||||||
|
✓ executions:read — lire les logs
|
||||||
|
✓ executions:delete — supprimer des exécutions
|
||||||
|
✓ workflows:run — déclencher manuellement
|
||||||
|
|
||||||
|
Non recommandé :
|
||||||
|
✗ credentials:* — inutile pour cette app
|
||||||
|
✗ users:* — inutile pour cette app
|
||||||
|
✗ admin:* — jamais
|
||||||
|
```
|
||||||
|
|
||||||
|
**Comment créer la clé** dans n8n :
|
||||||
|
1. Settings > n8n API
|
||||||
|
2. Create API Key
|
||||||
|
3. Nommer la clé "n8n-pilot-mobile"
|
||||||
|
4. Définir les scopes minimaux ci-dessus
|
||||||
|
5. Copier la clé — elle n'est affichée qu'une seule fois
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Defense in Depth (défense en profondeur)
|
||||||
|
|
||||||
|
L'accès à l'API n8n passe par **deux barrières indépendantes** :
|
||||||
|
|
||||||
|
```
|
||||||
|
Requête → [TLS] → [X-App-Token HAProxy] → [X-N8N-API-KEY n8n] → Données
|
||||||
|
```
|
||||||
|
|
||||||
|
Si un token est compromis :
|
||||||
|
- Compromission du `X-App-Token` seul → HAProxy bloque, n8n jamais atteint
|
||||||
|
- Compromission de la clé API seul → sans le `X-App-Token`, HAProxy bloque à 403
|
||||||
|
- Les deux compromis → rotation immédiate des deux (procédures dans HAPROXY.md et BACKUP.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Zero Trust (réseau local inclus)
|
||||||
|
|
||||||
|
n8n ne doit **pas** être accessible directement sur le réseau, même en local.
|
||||||
|
Toutes les requêtes passent par HAProxy qui valide le token.
|
||||||
|
|
||||||
|
```
|
||||||
|
# Bloquer l'accès direct au port n8n (iptables)
|
||||||
|
iptables -A INPUT -p tcp --dport 5678 -s 127.0.0.1 -j ACCEPT
|
||||||
|
iptables -A INPUT -p tcp --dport 5678 -j DROP
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gestion des secrets — cycle de vie
|
||||||
|
|
||||||
|
### Stockage
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────┐
|
||||||
|
│ Appareil Android │
|
||||||
|
│ ┌─────────────────────────────────────────────┐ │
|
||||||
|
│ │ Android Keystore (expo-secure-store) │ │
|
||||||
|
│ │ n8n_base_url → https://n8n.example.com │ │
|
||||||
|
│ │ n8n_api_key → clé API (chiffrée) │ │
|
||||||
|
│ │ n8n_app_token → token HAProxy (chiffré) │ │
|
||||||
|
│ └─────────────────────────────────────────────┘ │
|
||||||
|
│ │
|
||||||
|
│ État React (Zustand) — en mémoire uniquement : │
|
||||||
|
│ config.baseUrl → copie non sensible │
|
||||||
|
│ config.isConfigured → booléen │
|
||||||
|
│ JAMAIS : apiKey, appToken en mémoire JS │
|
||||||
|
└─────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Transit
|
||||||
|
|
||||||
|
- Les secrets sont lus depuis le Keystore **à chaque requête** HTTP dans `client.ts`
|
||||||
|
- Ils sont injectés dans les headers HTTP et **ne sont pas loggués**
|
||||||
|
- Ils ne sont **jamais** :
|
||||||
|
- Sérialisés dans AsyncStorage
|
||||||
|
- Inclus dans des logs (même en dev)
|
||||||
|
- Embarqués dans le bundle JS (`app.json`, `package.json`, code source)
|
||||||
|
- Envoyés à des services tiers (analytics, crash reporters)
|
||||||
|
|
||||||
|
### Rotation
|
||||||
|
|
||||||
|
| Secret | Fréquence recommandée | Procédure |
|
||||||
|
|--------|-----------------------|-----------|
|
||||||
|
| Clé API n8n | Tous les 180 jours, ou en cas de compromission | Créer nouvelle clé dans n8n, mettre à jour dans l'app |
|
||||||
|
| X-App-Token | Tous les 90 jours | Voir docs/HAPROXY.md |
|
||||||
|
| Keystore EAS | Jamais (sauf compromission) | Voir docs/BACKUP.md |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist avant mise en production
|
||||||
|
|
||||||
|
### Application
|
||||||
|
|
||||||
|
- [ ] `app.json` : `userInterfaceStyle` = `"dark"` (pas d'info sensible en clair)
|
||||||
|
- [ ] `.env` non commité dans git (`git status` ne montre pas `.env`)
|
||||||
|
- [ ] Aucun `console.log` de valeurs sensibles dans le code
|
||||||
|
- [ ] `__DEV__` gate sur tous les logs dans `errorHandler.ts`
|
||||||
|
- [ ] Expo SDK à jour — vérifier les CVE : `npx expo-doctor`
|
||||||
|
- [ ] Dépendances à jour : `npm audit`
|
||||||
|
|
||||||
|
### Infrastructure
|
||||||
|
|
||||||
|
- [ ] HAProxy : TLS 1.2 minimum, TLS 1.0/1.1 désactivés
|
||||||
|
- [ ] Certificat TLS valide et non expiré
|
||||||
|
- [ ] n8n inaccessible directement sur le port 5678 depuis l'extérieur
|
||||||
|
- [ ] Rate limiting HAProxy activé (429 configuré)
|
||||||
|
- [ ] Logs HAProxy ne contiennent pas les valeurs des headers secrets
|
||||||
|
|
||||||
|
### n8n
|
||||||
|
|
||||||
|
- [ ] Clé API avec scope minimal (voir § Least Privilege ci-dessus)
|
||||||
|
- [ ] n8n mis à jour vers la dernière version stable
|
||||||
|
- [ ] Sauvegardes n8n actives (workflows, credentials n8n)
|
||||||
|
|
||||||
|
### Appareil
|
||||||
|
|
||||||
|
- [ ] Verrouillage d'écran activé (PIN, pattern ou biométrie)
|
||||||
|
- [ ] Biométrie configurée dans l'app si disponible
|
||||||
|
- [ ] Appareil Android 8+ (API 26+) pour garantir la robustesse du Keystore
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
# Mise à jour de n8n Pilot
|
||||||
|
|
||||||
|
## Processus de mise à jour
|
||||||
|
|
||||||
|
### 1. Récupérer les changements
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull origin main
|
||||||
|
npm install --legacy-peer-deps
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Bumper la version
|
||||||
|
|
||||||
|
Éditez `app.json` et incrémentez `version` :
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"expo": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"android": {
|
||||||
|
"versionCode": 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Règle** : `versionCode` doit être strictement supérieur à la version précédente.
|
||||||
|
> `version` suit [semver](https://semver.org/) : MAJEUR.MINEUR.CORRECTIF
|
||||||
|
|
||||||
|
### 3. Rebuilder l'APK
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas build --platform android --profile preview
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Distribuer la mise à jour
|
||||||
|
|
||||||
|
#### Option A — Sideload manuel
|
||||||
|
|
||||||
|
Répétez la procédure de sideload (voir INSTALL.md § 8) avec le nouvel APK.
|
||||||
|
L'Android Package Manager gère la mise à jour en place si le `versionCode` est supérieur.
|
||||||
|
|
||||||
|
#### Option B — OTA (Over The Air) via Expo Updates
|
||||||
|
|
||||||
|
Pour les mises à jour mineures (JS uniquement, pas de changements natifs) :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
eas update --branch production --message "Fix: correction du polling"
|
||||||
|
```
|
||||||
|
|
||||||
|
L'app télécharge la mise à jour au prochain démarrage si elle est connectée.
|
||||||
|
|
||||||
|
> **Important** : les changements dans `app.json`, l'ajout de plugins natifs
|
||||||
|
> ou la modification des permissions nécessitent un rebuild APK complet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vérifications avant release
|
||||||
|
|
||||||
|
- [ ] Tests sur appareil physique (pas seulement émulateur)
|
||||||
|
- [ ] Vérifier que la connexion à l8n fonctionne avec les nouvelles données
|
||||||
|
- [ ] Valider le polling sur WiFi et données mobiles
|
||||||
|
- [ ] Vérifier que les secrets restent dans le Keystore après mise à jour
|
||||||
|
- [ ] Contrôler les logs Android (`adb logcat`) pour des erreurs inattendues
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Rollback
|
||||||
|
|
||||||
|
En cas de régression critique :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Revenir au commit précédent
|
||||||
|
git revert HEAD
|
||||||
|
|
||||||
|
# Rebuilder et redéployer la version précédente
|
||||||
|
eas build --platform android --profile preview
|
||||||
|
```
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"cli": {
|
||||||
|
"version": ">= 3.0.0"
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"development": {
|
||||||
|
"developmentClient": true,
|
||||||
|
"distribution": "internal",
|
||||||
|
"android": {
|
||||||
|
"buildType": "apk"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"preview": {
|
||||||
|
"distribution": "internal",
|
||||||
|
"android": {
|
||||||
|
"buildType": "apk",
|
||||||
|
"gradleCommand": ":app:assembleRelease"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"production": {
|
||||||
|
"android": {
|
||||||
|
"buildType": "apk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"submit": {
|
||||||
|
"production": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
192.168.1.130:8123
|
|
||||||
192.168.1.250:2369
|
|
||||||
192.168.1.112:8065
|
|
||||||
127.0.0.1:9080
|
|
||||||
127.0.0.1:22
|
|
||||||
192.168.1.18:32149
|
|
||||||
192.168.1.18:32133
|
|
||||||
192.168.1.13:5080
|
|
||||||
192.168.1.18:32120
|
|
||||||
192.168.1.108:5002
|
|
||||||
|
|
||||||
|
|
||||||
-359
@@ -1,359 +0,0 @@
|
|||||||
global
|
|
||||||
lua-load /etc/haproxy/cors/cors.lua
|
|
||||||
log /dev/log local0
|
|
||||||
log /dev/log local1 notice
|
|
||||||
log 127.0.0.1 local2
|
|
||||||
log-send-hostname
|
|
||||||
chroot /var/lib/haproxy
|
|
||||||
pidfile /var/run/haproxy.pid
|
|
||||||
stats socket /var/run/haproxy.sock mode 660 level admin expose-fd listeners
|
|
||||||
stats timeout 30s
|
|
||||||
maxconn 30000
|
|
||||||
user haproxy
|
|
||||||
group haproxy
|
|
||||||
daemon
|
|
||||||
|
|
||||||
# Default SSL material locations
|
|
||||||
ca-base /etc/ssl/certs
|
|
||||||
crt-base /etc/ssl/private
|
|
||||||
|
|
||||||
# Default ciphers to use on SSL-enabled listening sockets.
|
|
||||||
# For more information, see ciphers(1SSL). This list is from:
|
|
||||||
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
|
|
||||||
# An alternative list with additional directives can be obtained from
|
|
||||||
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
|
|
||||||
#ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
|
|
||||||
#ssl-default-bind-options no-sslv3
|
|
||||||
tune.ssl.default-dh-param 2048
|
|
||||||
# intermediate configuration
|
|
||||||
ssl-default-bind-curves X25519:prime256v1:secp384r1
|
|
||||||
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
|
||||||
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
|
||||||
ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 no-tls-tickets
|
|
||||||
|
|
||||||
ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
|
||||||
ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
|
||||||
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
|
||||||
|
|
||||||
|
|
||||||
defaults
|
|
||||||
log global
|
|
||||||
mode http
|
|
||||||
option httplog
|
|
||||||
option dontlognull
|
|
||||||
timeout connect 5000
|
|
||||||
timeout client 600s
|
|
||||||
timeout server 600s
|
|
||||||
timeout http-request 5s
|
|
||||||
option http-buffer-request
|
|
||||||
|
|
||||||
|
|
||||||
http-errors kitties
|
|
||||||
errorfile 400 /etc/haproxy/http-cat-errors/400.http
|
|
||||||
errorfile 403 /etc/haproxy/http-cat-errors/403.http
|
|
||||||
errorfile 408 /etc/haproxy/http-cat-errors/408.http
|
|
||||||
errorfile 500 /etc/haproxy/http-cat-errors/500.http
|
|
||||||
errorfile 502 /etc/haproxy/http-cat-errors/502.http
|
|
||||||
errorfile 503 /etc/haproxy/http-cat-errors/503.http
|
|
||||||
errorfile 504 /etc/haproxy/http-cat-errors/504.http
|
|
||||||
|
|
||||||
userlist admin-ghost
|
|
||||||
group is-admin
|
|
||||||
user admin password $5$ITvxQNSy4YoUQdNm$p/2D8ey05ZI3KC2gpRun4OKNsomFS8xJnNd0M4P0zeB # $5$... (générez avec: printf "votrepassword" | mkpasswd --method=sha-256 --stdout)
|
|
||||||
|
|
||||||
#frontend http_in
|
|
||||||
# bind *:80
|
|
||||||
# maxconn 500
|
|
||||||
# http-request track-sc0 src table per_ip_rates
|
|
||||||
# http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
|
|
||||||
# http-request silent-drop if { sc_http_req_rate(0) gt 100 }
|
|
||||||
# acl acl_letsencrypt path_beg /.well-known/acme-challenge/
|
|
||||||
#
|
|
||||||
# redirect scheme https if !acl_letsencrypt !{ ssl_fc }
|
|
||||||
# use_backend be_letsencrypt if acl_letsencrypt
|
|
||||||
|
|
||||||
|
|
||||||
frontend gitea-ssh
|
|
||||||
bind *:2222
|
|
||||||
mode tcp
|
|
||||||
option tcplog
|
|
||||||
default_backend gitea-ssh-backend
|
|
||||||
|
|
||||||
backend gitea-ssh-backend
|
|
||||||
mode tcp
|
|
||||||
server gitea 192.168.1.70:12222 check
|
|
||||||
|
|
||||||
frontend https
|
|
||||||
bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn http/1.1
|
|
||||||
#bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn h2,http/1.1
|
|
||||||
# headers
|
|
||||||
#http-request set-header Host %[req.hdr(Host)]
|
|
||||||
#http-request set-header X-Real-IP %[src]
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
http-request track-sc0 src table per_ip_rates
|
|
||||||
http-request silent-drop if { sc_http_req_rate(0) gt 100 }
|
|
||||||
|
|
||||||
acl homegit-host hdr(host) -i homegit.gyozamancave.fr
|
|
||||||
|
|
||||||
# config httpcats
|
|
||||||
errorfiles kitties
|
|
||||||
http-response return status 400 default-errorfiles if { status 400 }
|
|
||||||
#http-response return status 401 default-errorfiles if { status 401 }
|
|
||||||
http-response return status 401 default-errorfiles if { status 401 } !{ req.hdr(host) -i homegit.gyozamancave.fr }
|
|
||||||
http-response return status 403 default-errorfiles if { status 403 }
|
|
||||||
http-response return status 404 default-errorfiles if { status 404 }
|
|
||||||
http-response return status 408 default-errorfiles if { status 408 }
|
|
||||||
http-response return status 500 default-errorfiles if { status 500 }
|
|
||||||
http-response return status 502 default-errorfiles if { status 502 }
|
|
||||||
http-response return status 503 default-errorfiles if { status 503 }
|
|
||||||
http-response return status 504 default-errorfiles if { status 504 }
|
|
||||||
http-response add-header WWW-Authenticate "Basic realm=\"Gitea\"" if { status 401 } homegit-host
|
|
||||||
http-response return status 401 default-errorfiles if { status 401 } !homegit-host
|
|
||||||
|
|
||||||
# Redirection 301 pour links.billisdead.com
|
|
||||||
acl is_billisdead hdr(host) -i links.billisdead.com
|
|
||||||
http-request redirect code 301 location https://links.mrteddybear.fr/@billisdead.com if is_billisdead
|
|
||||||
|
|
||||||
## config antiDDOS
|
|
||||||
# Suivi du taux de requêtes par IP
|
|
||||||
stick-table type ip size 1m expire 10m store http_req_rate(10s)
|
|
||||||
http-request track-sc0 src unless homegit-host
|
|
||||||
|
|
||||||
# ACL pour whitelister ton domaine n8n
|
|
||||||
acl n8n_domain hdr_end(host) -i gyozamancave.fr
|
|
||||||
|
|
||||||
# Whitelist IP perso (optionnel)
|
|
||||||
acl my_ip src 82.67.3.126
|
|
||||||
acl my_lan1 src 192.168.1.0/24
|
|
||||||
acl my_lan2 src 192.168.2.0/24
|
|
||||||
|
|
||||||
# Autoriser ton domaine (ou ton IP) à passer sans rate-limit
|
|
||||||
http-request allow if n8n_domain
|
|
||||||
http-request allow if my_ip
|
|
||||||
http-request allow if my_lan1
|
|
||||||
http-request allow if my_lan2
|
|
||||||
|
|
||||||
# Appliquer la rate-limit globale pour le reste
|
|
||||||
http-request deny deny_status 429 if { sc0_http_req_rate gt 100 }
|
|
||||||
|
|
||||||
# BEGIN CORS
|
|
||||||
#capture request header origin len 128
|
|
||||||
#http-response set-header Access-Control-Allow-Origin "*"
|
|
||||||
#http-response set-header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId"
|
|
||||||
#http-response set-header Access-Control-Max-Age 3628800
|
|
||||||
#http-response set-header Access-Control-Allow-Methods "GET, DELETE, OPTIONS, POST, PUT"
|
|
||||||
# END CORS
|
|
||||||
|
|
||||||
|
|
||||||
acl cms-host hdr(host) -i mrteddybear.fr
|
|
||||||
acl links-host hdr(host) -i links.mrteddybear.fr
|
|
||||||
acl cms2-host hdr(host) -i billisdead.com
|
|
||||||
acl mattermost-host hdr(host) -i mattermost.gyozamancave.fr
|
|
||||||
acl nextcloud-host hdr(host) -i nextcloud.gyozamancave.fr
|
|
||||||
acl funkwhale-host hdr(host) -i funkwhale.gyozamancave.fr
|
|
||||||
acl wiki-host hdr(host) -i wiki.gyozamancave.fr
|
|
||||||
acl hass-host hdr(host) -i hass.gyozamancave.fr
|
|
||||||
acl postiz-host hdr(host) -i postiz.gyozamancave.fr
|
|
||||||
acl stats-host hdr(host) -i stats.gyozamancave.fr
|
|
||||||
acl stats-api hdr(host) -i api.stats.gyozamancave.fr
|
|
||||||
acl n8n-host hdr(host) -i n8n.gyozamancave.fr
|
|
||||||
acl boudoir-host hdr(host) -i ledigitalboudoir.com
|
|
||||||
acl host_temples hdr(host) -i temples.mrteddybear.fr
|
|
||||||
acl is_temples_api path_beg /api
|
|
||||||
acl nextcloud_wellknown path_beg /.well-known/caldav /.well-known/carddav
|
|
||||||
http-request redirect location https://nextcloud.gyozamancave.fr/remote.php/dav/ code 301 if nextcloud_wellknown
|
|
||||||
acl nc_webfinger path -i /.well-known/webfinger
|
|
||||||
acl nc_nodeinfo path -i /.well-known/nodeinfo
|
|
||||||
http-request redirect code 301 location https://nextcloud.gyozamancave.fr/index.php/.well-known/webfinger/ if nextcloud-host nc_webfinger
|
|
||||||
http-request redirect code 301 location https://nextcloud.gyozamancave.fr/index.php/.well-known/nodeinfo/ if nextcloud-host nc_nodeinfo
|
|
||||||
|
|
||||||
use_backend temples_api if host_temples is_temples_api
|
|
||||||
use_backend temples_web if host_temples
|
|
||||||
use_backend cms if cms-host
|
|
||||||
use_backend links-mtb if links-host
|
|
||||||
use_backend cms2 if cms2-host
|
|
||||||
use_backend mattermost if mattermost-host
|
|
||||||
use_backend nextcloud if nextcloud-host
|
|
||||||
use_backend funkwhale if funkwhale-host
|
|
||||||
use_backend wiki if wiki-host
|
|
||||||
use_backend hass-backend if hass-host
|
|
||||||
use_backend postiz-backend if postiz-host
|
|
||||||
use_backend stats-backend-api if stats-api
|
|
||||||
use_backend stats-backend if stats-host
|
|
||||||
use_backend n8n-backend if n8n-host
|
|
||||||
use_backend homegit-backend if homegit-host
|
|
||||||
use_backend boudoir-backend if boudoir-host
|
|
||||||
|
|
||||||
backend temples_api
|
|
||||||
mode http
|
|
||||||
option forwardfor
|
|
||||||
option http-server-close
|
|
||||||
balance roundrobin
|
|
||||||
option httpchk GET /api/healthz
|
|
||||||
http-check expect string ok
|
|
||||||
server api 192.168.1.12:3000 check inter 10s rise 2 fall 3
|
|
||||||
|
|
||||||
backend temples_web
|
|
||||||
mode http
|
|
||||||
option forwardfor
|
|
||||||
option http-server-close
|
|
||||||
balance roundrobin
|
|
||||||
option httpchk GET /
|
|
||||||
http-check expect status 200
|
|
||||||
server web 192.168.1.12:3001 check inter 10s rise 2 fall 3
|
|
||||||
|
|
||||||
backend boudoir-backend
|
|
||||||
acl ghost_path path_beg /ghost/
|
|
||||||
acl is_whitelisted src 82.67.3.126/32
|
|
||||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
|
||||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
|
||||||
|
|
||||||
# Deny /ghost/ hors IP white
|
|
||||||
http-request deny if ghost_path !is_whitelisted_full
|
|
||||||
server boudoir 192.168.1.57:2368 check
|
|
||||||
|
|
||||||
backend homegit-backend
|
|
||||||
# mode http
|
|
||||||
# S'assurer que le header n'est pas supprimé
|
|
||||||
http-response add-header WWW-Authenticate "Basic\ realm=\"Gitea\"" if { status 401 }
|
|
||||||
server homegit 192.168.1.70:3000 check
|
|
||||||
|
|
||||||
backend stats-backend-api
|
|
||||||
server api_stats 192.168.1.58:8080
|
|
||||||
|
|
||||||
backend stats-backend
|
|
||||||
#option forwardfor
|
|
||||||
server stats 192.168.1.58:8081
|
|
||||||
|
|
||||||
|
|
||||||
#backend n8n-backend
|
|
||||||
# mode http
|
|
||||||
# option forwardfor
|
|
||||||
# server n8n 192.168.1.56:5678
|
|
||||||
|
|
||||||
backend n8n-backend
|
|
||||||
mode http
|
|
||||||
balance source
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Real-IP %[src]
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
http-request set-header Host %[req.hdr(host)]
|
|
||||||
option forwardfor
|
|
||||||
server n8n 192.168.1.56:5678
|
|
||||||
|
|
||||||
|
|
||||||
backend links-mtb
|
|
||||||
mode http
|
|
||||||
server links 192.168.1.18:32508 check ssl verify none
|
|
||||||
|
|
||||||
backend hass-backend
|
|
||||||
server hass 192.168.1.18:30250
|
|
||||||
mode http
|
|
||||||
|
|
||||||
backend cms
|
|
||||||
acl ghost_path path_beg /ghost/
|
|
||||||
acl is_whitelisted src 82.67.3.126/32
|
|
||||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
|
||||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
|
||||||
|
|
||||||
# Deny /ghost/ hors IP white
|
|
||||||
http-request deny if ghost_path !is_whitelisted_full
|
|
||||||
server cms 192.168.1.250:2369
|
|
||||||
|
|
||||||
backend cms2
|
|
||||||
acl ghost_path path_beg /ghost/
|
|
||||||
acl is_whitelisted src 82.67.3.126/32
|
|
||||||
acl is_lan src 192.168.1.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_lan2 src 192.168.2.0/24 # Plage LAN (adaptez 192.168.1.0/24 si précis)
|
|
||||||
acl is_whitelisted_full src 82.67.3.126/32 192.168.1.0/24 192.168.2.0/24 # Combine
|
|
||||||
acl admin_auth http_auth_group(admin-ghost) is-admin
|
|
||||||
|
|
||||||
# Deny /ghost/ hors IP white
|
|
||||||
http-request deny if ghost_path !is_whitelisted_full
|
|
||||||
|
|
||||||
server ghost_server 192.168.1.55:2368
|
|
||||||
|
|
||||||
backend mattermost
|
|
||||||
server mattermost 192.168.1.112:8065
|
|
||||||
|
|
||||||
|
|
||||||
backend be_letsencrypt
|
|
||||||
server letsencrypt 127.0.0.1:9080
|
|
||||||
|
|
||||||
backend wiki
|
|
||||||
#server wiki 192.168.1.18:32149
|
|
||||||
server wiki 192.168.1.18:30347
|
|
||||||
|
|
||||||
backend postiz-backend
|
|
||||||
mode http
|
|
||||||
balance source
|
|
||||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
# stickiness
|
|
||||||
stick-table type ip size 50k expire 30m
|
|
||||||
stick on src
|
|
||||||
http-reuse safe
|
|
||||||
cookie SERVERID insert indirect nocache
|
|
||||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
|
||||||
# force https
|
|
||||||
acl http ssl_fc,not
|
|
||||||
http-request redirect scheme https if http
|
|
||||||
http-response set-header Strict-Transport-Security max-age=15552000
|
|
||||||
option ssl-hello-chk
|
|
||||||
server postiz 192.168.1.18:30101
|
|
||||||
|
|
||||||
|
|
||||||
backend nextcloud
|
|
||||||
# health checking is DISABLED
|
|
||||||
mode http
|
|
||||||
balance source
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Real-IP %[src]
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
http-request set-header Host %[req.hdr(host)]
|
|
||||||
# stickiness
|
|
||||||
stick-table type ip size 50k expire 30m
|
|
||||||
stick on src
|
|
||||||
http-reuse safe
|
|
||||||
cookie SERVERID insert indirect nocache
|
|
||||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
|
||||||
# force https
|
|
||||||
acl http ssl_fc,not
|
|
||||||
http-request redirect scheme https if http
|
|
||||||
http-response set-header Strict-Transport-Security max-age=15552000
|
|
||||||
option ssl-hello-chk
|
|
||||||
server nextcloud 192.168.1.13:5080 #ssl verify none
|
|
||||||
option http-server-close
|
|
||||||
option httpclose
|
|
||||||
option forwardfor
|
|
||||||
http-request set-header Connection "upgrade" if { hdr(Upgrade) -i WebSocket }
|
|
||||||
|
|
||||||
backend funkwhale
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
option forwardfor
|
|
||||||
server funkwhale 192.168.1.108:5002
|
|
||||||
|
|
||||||
backend per_ip_rates
|
|
||||||
# Define a stick-table to track request rates per IP
|
|
||||||
stick-table type ip size 1m expire 10m store http_req_rate(10s)
|
|
||||||
|
|
||||||
# Track all requests by source IP
|
|
||||||
http-request track-sc0 src
|
|
||||||
|
|
||||||
# Whitelist IP: 82.67.3.126 (bypass rate limiting)
|
|
||||||
acl is_whitelisted_ip src 82.67.3.126
|
|
||||||
acl is_whitelisted_lan1 src 192.168.1.0/24
|
|
||||||
acl is_whitelisted_lan2 src 192.168.2.0/24
|
|
||||||
|
|
||||||
# Whitelist domain: *.gyozamancave.fr (bypass rate limiting)
|
|
||||||
acl is_whitelisted_domain hdr_end(host) -i gyozamancave.fr
|
|
||||||
|
|
||||||
# Apply rate limiting (10 req/10s) unless whitelisted
|
|
||||||
http-request deny deny_status 429 if !is_whitelisted_ip !is_whitelisted_lan1 !is_whitelisted_lan2 !is_whitelisted_domain { sc0_http_req_rate gt 10 }
|
|
||||||
-214
@@ -1,214 +0,0 @@
|
|||||||
global
|
|
||||||
lua-load /etc/haproxy/cors/lua/lib/cors.lua
|
|
||||||
#log /dev/log local0
|
|
||||||
#log /dev/log local1 notice
|
|
||||||
log 127.0.0.1 local2
|
|
||||||
log-send-hostname
|
|
||||||
chroot /var/lib/haproxy
|
|
||||||
pidfile /var/run/haproxy.pid
|
|
||||||
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
|
|
||||||
stats timeout 30s
|
|
||||||
maxconn 30000
|
|
||||||
user haproxy
|
|
||||||
group haproxy
|
|
||||||
daemon
|
|
||||||
|
|
||||||
# Default SSL material locations
|
|
||||||
ca-base /etc/ssl/certs
|
|
||||||
crt-base /etc/ssl/private
|
|
||||||
|
|
||||||
# Default ciphers to use on SSL-enabled listening sockets.
|
|
||||||
# For more information, see ciphers(1SSL). This list is from:
|
|
||||||
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
|
|
||||||
# An alternative list with additional directives can be obtained from
|
|
||||||
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
|
|
||||||
#ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
|
|
||||||
#ssl-default-bind-options no-sslv3
|
|
||||||
tune.ssl.default-dh-param 2048
|
|
||||||
# intermediate configuration
|
|
||||||
ssl-default-bind-curves X25519:prime256v1:secp384r1
|
|
||||||
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
|
||||||
ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
|
||||||
ssl-default-bind-options prefer-client-ciphers ssl-min-ver TLSv1.2 no-tls-tickets
|
|
||||||
|
|
||||||
ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305
|
|
||||||
ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
|
|
||||||
ssl-default-server-options ssl-min-ver TLSv1.2 no-tls-tickets
|
|
||||||
|
|
||||||
#ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
|
||||||
#ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
|
||||||
|
|
||||||
#ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
|
||||||
#ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
|
|
||||||
|
|
||||||
|
|
||||||
defaults
|
|
||||||
log global
|
|
||||||
mode http
|
|
||||||
option httplog
|
|
||||||
option dontlognull
|
|
||||||
timeout connect 5000
|
|
||||||
timeout client 600s
|
|
||||||
timeout server 600s
|
|
||||||
errorfile 400 /etc/haproxy/errors/400.http
|
|
||||||
errorfile 403 /etc/haproxy/errors/403.http
|
|
||||||
errorfile 408 /etc/haproxy/errors/408.http
|
|
||||||
errorfile 500 /etc/haproxy/errors/500.http
|
|
||||||
errorfile 502 /etc/haproxy/errors/502.http
|
|
||||||
errorfile 503 /etc/haproxy/errors/503.http
|
|
||||||
errorfile 504 /etc/haproxy/errors/504.http
|
|
||||||
|
|
||||||
|
|
||||||
frontend http_in
|
|
||||||
bind *:80
|
|
||||||
maxconn 500
|
|
||||||
|
|
||||||
acl acl_letsencrypt path_beg /.well-known/acme-challenge/
|
|
||||||
|
|
||||||
redirect scheme https if !acl_letsencrypt !{ ssl_fc }
|
|
||||||
use_backend be_letsencrypt if acl_letsencrypt
|
|
||||||
|
|
||||||
frontend https
|
|
||||||
bind *:443,[::]:443 ssl crt /etc/haproxy/ssl/ strict-sni alpn h2,http/1.1
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
|
|
||||||
# BEGIN CORS
|
|
||||||
#capture request header origin len 128
|
|
||||||
#chttp-response set-header Access-Control-Allow-Origin "*"
|
|
||||||
#chttp-response set-header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept, Authorization, JSNLog-RequestId, activityId, applicationId, applicationUserId, channelId, senderId, sessionId"
|
|
||||||
#chttp-response set-header Access-Control-Max-Age 3628800
|
|
||||||
#chttp-response set-header Access-Control-Allow-Methods "GET, DELETE, OPTIONS, POST, PUT"
|
|
||||||
# END CORS
|
|
||||||
|
|
||||||
acl cms-host hdr(host) -i mrteddybear.fr
|
|
||||||
acl bunkerweb-host hdr(host) -i bunkerweb.gyozamancave.fr
|
|
||||||
acl rss-host hdr(host) -i rss.gyozamancave.fr
|
|
||||||
acl mattermost-host hdr(host) -i mattermost.gyozamancave.fr
|
|
||||||
acl jellyfin-host hdr(host) -i jellyfin.gyozamancave.fr
|
|
||||||
acl nextcloud-host hdr(host) -i nextcloud.gyozamancave.fr
|
|
||||||
acl funkwhale-host hdr(host) -i funkwhale.gyozamancave.fr
|
|
||||||
acl wiki-host hdr(host) -i wiki.gyozamancave.fr
|
|
||||||
acl hass-host hdr(host) -i hass.gyozamancave.fr
|
|
||||||
acl postiz-host hdr(host) -i postiz.gyozamancave.fr
|
|
||||||
acl n8n-host hdr(host) -i n8n.gyozamancave.fr
|
|
||||||
|
|
||||||
use_backend cms if cms-host
|
|
||||||
use_backend bunkerweb if bunkerweb-host
|
|
||||||
use_backend rss if rss-host
|
|
||||||
use_backend mattermost if mattermost-host
|
|
||||||
use_backend jellyfin if jellyfin-host
|
|
||||||
use_backend nextcloud if nextcloud-host
|
|
||||||
use_backend funkwhale if funkwhale-host
|
|
||||||
use_backend wiki if wiki-host
|
|
||||||
use_backend hass-backend if hass-host
|
|
||||||
use_backend postiz-backend if postiz-host
|
|
||||||
use_backend n8n-backend if n8n-host
|
|
||||||
|
|
||||||
|
|
||||||
backend hass-backend
|
|
||||||
server hass 192.168.1.130:8123
|
|
||||||
mode http
|
|
||||||
#option forwardfor
|
|
||||||
#http-request add-header X-Forwarded-Proto https
|
|
||||||
#http-request add-header X-Forwarded-Port 443
|
|
||||||
|
|
||||||
backend cms
|
|
||||||
#server cms 192.168.1.101:80
|
|
||||||
server cms 192.168.1.250:2369
|
|
||||||
|
|
||||||
backend bunkerweb
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
option forwardfor
|
|
||||||
server waf 192.168.1.18:32287
|
|
||||||
#server waf 192.168.1.18:30761
|
|
||||||
|
|
||||||
backend mattermost
|
|
||||||
server mattermost 192.168.1.112:8065
|
|
||||||
|
|
||||||
|
|
||||||
backend be_letsencrypt
|
|
||||||
server letsencrypt 127.0.0.1:9080
|
|
||||||
#server letsencrypt 127.0.0.1:10001
|
|
||||||
|
|
||||||
backend jellyfin
|
|
||||||
server jellyfin 192.168.1.103:8096
|
|
||||||
|
|
||||||
|
|
||||||
backend wiki
|
|
||||||
server wiki 192.168.1.18:32149
|
|
||||||
|
|
||||||
backend postiz-backend
|
|
||||||
#mode http
|
|
||||||
#balance source
|
|
||||||
#http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
#option forwardfor except 192.168.1.18/24
|
|
||||||
# # stickiness
|
|
||||||
#stick-table type ip size 50k expire 30m
|
|
||||||
#stick on src
|
|
||||||
#http-reuse safe
|
|
||||||
#cookie SERVERID insert indirect nocache
|
|
||||||
#default-server inter 10s fastinter 500 fall 2 rise 2
|
|
||||||
# # force https
|
|
||||||
#acl http ssl_fc,not
|
|
||||||
#http-request redirect scheme https if http
|
|
||||||
mode http
|
|
||||||
balance source
|
|
||||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
# stickiness
|
|
||||||
stick-table type ip size 50k expire 30m
|
|
||||||
stick on src
|
|
||||||
http-reuse safe
|
|
||||||
cookie SERVERID insert indirect nocache
|
|
||||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
|
||||||
# force https
|
|
||||||
acl http ssl_fc,not
|
|
||||||
http-request redirect scheme https if http
|
|
||||||
http-response set-header Strict-Transport-Security max-age=15552000
|
|
||||||
option ssl-hello-chk
|
|
||||||
server postiz 192.168.1.18:32133
|
|
||||||
|
|
||||||
|
|
||||||
backend nextcloud
|
|
||||||
# health checking is DISABLED
|
|
||||||
mode http
|
|
||||||
balance source
|
|
||||||
http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
# stickiness
|
|
||||||
stick-table type ip size 50k expire 30m
|
|
||||||
stick on src
|
|
||||||
http-reuse safe
|
|
||||||
cookie SERVERID insert indirect nocache
|
|
||||||
default-server inter 10s fastinter 500 fall 2 rise 2
|
|
||||||
# force https
|
|
||||||
acl http ssl_fc,not
|
|
||||||
http-request redirect scheme https if http
|
|
||||||
http-response set-header Strict-Transport-Security max-age=15552000
|
|
||||||
option ssl-hello-chk
|
|
||||||
server nextcloud 192.168.1.13:5080 #check ssl #verify none
|
|
||||||
|
|
||||||
backend rss
|
|
||||||
mode http
|
|
||||||
enabled
|
|
||||||
server rss 192.168.1.8:8080
|
|
||||||
|
|
||||||
backend n8n-backend
|
|
||||||
server n8n 192.168.1.18:32120
|
|
||||||
|
|
||||||
|
|
||||||
backend funkwhale
|
|
||||||
http-request set-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
|
|
||||||
http-request set-header X-Forwarded-For %[src]
|
|
||||||
option forwardfor
|
|
||||||
#http-request set-header X-Forwarded-Port %[dst_port]
|
|
||||||
#http-request add-header X-Forwarded-Proto https if { ssl_fc }
|
|
||||||
#http-response add-header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline': img-src 'self' data:; font-src 'self' data:; object-src 'none'; media-src 'self' data:; worker-src 'self';"
|
|
||||||
#http-response add-header Referrer-Policy strict-origin-when-cross-origin
|
|
||||||
#http-response add-header X-Frame-Options SAMEORIGIN
|
|
||||||
#server funkwhale 192.168.1.12:5002
|
|
||||||
server funkwhale 192.168.1.108:5002
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
#---------------------------------------------------------------------
|
|
||||||
# Example configuration for a possible web application. See the
|
|
||||||
# full configuration options online.
|
|
||||||
#
|
|
||||||
# https://www.haproxy.org/download/1.8/doc/configuration.txt
|
|
||||||
#
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# Global settings
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
global
|
|
||||||
# to have these messages end up in /var/log/haproxy.log you will
|
|
||||||
# need to:
|
|
||||||
#
|
|
||||||
# 1) configure syslog to accept network log events. This is done
|
|
||||||
# by adding the '-r' option to the SYSLOGD_OPTIONS in
|
|
||||||
# /etc/sysconfig/syslog
|
|
||||||
#
|
|
||||||
# 2) configure local2 events to go to the /var/log/haproxy.log
|
|
||||||
# file. A line like the following can be added to
|
|
||||||
# /etc/sysconfig/syslog
|
|
||||||
#
|
|
||||||
# local2.* /var/log/haproxy.log
|
|
||||||
#
|
|
||||||
log 127.0.0.1 local2
|
|
||||||
|
|
||||||
chroot /var/lib/haproxy
|
|
||||||
pidfile /var/run/haproxy.pid
|
|
||||||
maxconn 4000
|
|
||||||
user haproxy
|
|
||||||
group haproxy
|
|
||||||
daemon
|
|
||||||
|
|
||||||
# turn on stats unix socket
|
|
||||||
stats socket /var/lib/haproxy/stats
|
|
||||||
|
|
||||||
# utilize system-wide crypto-policies
|
|
||||||
ssl-default-bind-ciphers PROFILE=SYSTEM
|
|
||||||
ssl-default-server-ciphers PROFILE=SYSTEM
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# common defaults that all the 'listen' and 'backend' sections will
|
|
||||||
# use if not designated in their block
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
defaults
|
|
||||||
mode http
|
|
||||||
log global
|
|
||||||
option httplog
|
|
||||||
option dontlognull
|
|
||||||
option http-server-close
|
|
||||||
option forwardfor except 127.0.0.0/8
|
|
||||||
option redispatch
|
|
||||||
retries 3
|
|
||||||
timeout http-request 10s
|
|
||||||
timeout queue 1m
|
|
||||||
timeout connect 10s
|
|
||||||
timeout client 1m
|
|
||||||
timeout server 1m
|
|
||||||
timeout http-keep-alive 10s
|
|
||||||
timeout check 10s
|
|
||||||
maxconn 3000
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# main frontend which proxys to the backends
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
frontend main
|
|
||||||
bind *:5000
|
|
||||||
acl url_static path_beg -i /static /images /javascript /stylesheets
|
|
||||||
acl url_static path_end -i .jpg .gif .png .css .js
|
|
||||||
|
|
||||||
use_backend static if url_static
|
|
||||||
default_backend app
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# static backend for serving up images, stylesheets and such
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
backend static
|
|
||||||
balance roundrobin
|
|
||||||
server static 127.0.0.1:4331 check
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
# round robin balancing between the various backends
|
|
||||||
#---------------------------------------------------------------------
|
|
||||||
backend app
|
|
||||||
balance roundrobin
|
|
||||||
server app1 127.0.0.1:5001 check
|
|
||||||
server app2 127.0.0.1:5002 check
|
|
||||||
server app3 127.0.0.1:5003 check
|
|
||||||
server app4 127.0.0.1:5004 check
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 400 Bad request
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/400.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 401 Unauthorized
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/401.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 403 Forbidden
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/403.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.1 404 Not Found
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/404.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 408 Request Time-out
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/408.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 500 Server Error
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/500.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 502 Bad Gateway
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/502.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 503 Service Unavailable
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/503.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
HTTP/1.0 504 Gateway Time-out
|
|
||||||
Cache-Control: no-cache
|
|
||||||
Connection: close
|
|
||||||
Content-Type: text/html
|
|
||||||
|
|
||||||
<html>
|
|
||||||
<body>
|
|
||||||
<style>
|
|
||||||
html {
|
|
||||||
background-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
display: block;
|
|
||||||
margin: 0px auto;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<img src="https://http.cat/504.jpg">
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -1,990 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
is_alpine() {
|
|
||||||
[ -f /etc/alpine-release ]
|
|
||||||
}
|
|
||||||
|
|
||||||
is_openwrt() {
|
|
||||||
grep -qi "OpenWrt" /etc/os-release
|
|
||||||
}
|
|
||||||
|
|
||||||
is_freebsd() {
|
|
||||||
[ "$(uname -s)" = "FreeBSD" ]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# If SELinux is enabled, set the context of the binary
|
|
||||||
set_selinux_context() {
|
|
||||||
# Check if SELinux is enabled and in enforcing or permissive mode
|
|
||||||
if command -v getenforce >/dev/null 2>&1; then
|
|
||||||
SELINUX_MODE=$(getenforce)
|
|
||||||
if [ "$SELINUX_MODE" != "Disabled" ]; then
|
|
||||||
echo "SELinux is enabled (${SELINUX_MODE} mode). Setting appropriate context..."
|
|
||||||
|
|
||||||
# First try to set persistent context if semanage is available
|
|
||||||
if command -v semanage >/dev/null 2>&1; then
|
|
||||||
echo "Attempting to set persistent SELinux context..."
|
|
||||||
if semanage fcontext -a -t bin_t "$BIN_PATH" >/dev/null 2>&1; then
|
|
||||||
restorecon -v "$BIN_PATH" >/dev/null 2>&1
|
|
||||||
else
|
|
||||||
echo "Warning: Failed to set persistent context, falling back to temporary context."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Fall back to chcon if semanage failed or isn't available
|
|
||||||
if command -v chcon >/dev/null 2>&1; then
|
|
||||||
# Set context for both the directory and binary
|
|
||||||
chcon -t bin_t "$BIN_PATH" || echo "Warning: Failed to set SELinux context for binary."
|
|
||||||
chcon -R -t bin_t "$AGENT_DIR" || echo "Warning: Failed to set SELinux context for directory."
|
|
||||||
else
|
|
||||||
if [ "$SELINUX_MODE" = "Enforcing" ]; then
|
|
||||||
echo "Warning: SELinux is in enforcing mode but chcon command not found. The service may fail to start."
|
|
||||||
echo "Consider installing the policycoreutils package or temporarily setting SELinux to permissive mode."
|
|
||||||
else
|
|
||||||
echo "Warning: SELinux is in permissive mode but chcon command not found."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Clean up SELinux contexts if they were set
|
|
||||||
cleanup_selinux_context() {
|
|
||||||
if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then
|
|
||||||
echo "Cleaning up SELinux contexts..."
|
|
||||||
# Remove persistent context if semanage is available
|
|
||||||
if command -v semanage >/dev/null 2>&1; then
|
|
||||||
semanage fcontext -d "$BIN_PATH" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ensure the proxy URL ends with a /
|
|
||||||
ensure_trailing_slash() {
|
|
||||||
if [ -n "$1" ]; then
|
|
||||||
case "$1" in
|
|
||||||
*/) echo "$1" ;;
|
|
||||||
*) echo "$1/" ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
echo "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Generate FreeBSD rc service content
|
|
||||||
generate_freebsd_rc_service() {
|
|
||||||
cat <<'EOF'
|
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
# PROVIDE: beszel_agent
|
|
||||||
# REQUIRE: DAEMON NETWORKING
|
|
||||||
# BEFORE: LOGIN
|
|
||||||
# KEYWORD: shutdown
|
|
||||||
|
|
||||||
# Add the following lines to /etc/rc.conf to configure Beszel Agent:
|
|
||||||
#
|
|
||||||
# beszel_agent_enable (bool): Set to YES to enable Beszel Agent
|
|
||||||
# Default: YES
|
|
||||||
# beszel_agent_env_file (str): Beszel Agent env configuration file
|
|
||||||
# Default: /usr/local/etc/beszel-agent/env
|
|
||||||
# beszel_agent_user (str): Beszel Agent daemon user
|
|
||||||
# Default: beszel
|
|
||||||
# beszel_agent_bin (str): Path to the beszel-agent binary
|
|
||||||
# Default: /usr/local/sbin/beszel-agent
|
|
||||||
# beszel_agent_flags (str): Extra flags passed to beszel-agent command invocation
|
|
||||||
# Default:
|
|
||||||
|
|
||||||
. /etc/rc.subr
|
|
||||||
|
|
||||||
name="beszel_agent"
|
|
||||||
rcvar=beszel_agent_enable
|
|
||||||
|
|
||||||
load_rc_config $name
|
|
||||||
: ${beszel_agent_enable:="YES"}
|
|
||||||
: ${beszel_agent_user:="beszel"}
|
|
||||||
: ${beszel_agent_flags:=""}
|
|
||||||
: ${beszel_agent_env_file:="/usr/local/etc/beszel-agent/env"}
|
|
||||||
: ${beszel_agent_bin:="/usr/local/sbin/beszel-agent"}
|
|
||||||
|
|
||||||
logfile="/var/log/${name}.log"
|
|
||||||
pidfile="/var/run/${name}.pid"
|
|
||||||
|
|
||||||
procname="/usr/sbin/daemon"
|
|
||||||
start_precmd="${name}_prestart"
|
|
||||||
start_cmd="${name}_start"
|
|
||||||
stop_cmd="${name}_stop"
|
|
||||||
|
|
||||||
extra_commands="upgrade"
|
|
||||||
upgrade_cmd="beszel_agent_upgrade"
|
|
||||||
|
|
||||||
beszel_agent_prestart()
|
|
||||||
{
|
|
||||||
if [ ! -f "${beszel_agent_env_file}" ]; then
|
|
||||||
echo WARNING: missing "${beszel_agent_env_file}" env file. Start aborted.
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
beszel_agent_start()
|
|
||||||
{
|
|
||||||
echo "Starting ${name}"
|
|
||||||
/usr/sbin/daemon -fc \
|
|
||||||
-P "${pidfile}" \
|
|
||||||
-o "${logfile}" \
|
|
||||||
-u "${beszel_agent_user}" \
|
|
||||||
"${beszel_agent_bin}" ${beszel_agent_flags}
|
|
||||||
}
|
|
||||||
|
|
||||||
beszel_agent_stop()
|
|
||||||
{
|
|
||||||
pid="$(check_pidfile "${pidfile}" "${procname}")"
|
|
||||||
if [ -n "${pid}" ]; then
|
|
||||||
echo "Stopping ${name} (pid=${pid})"
|
|
||||||
kill -- "-${pid}"
|
|
||||||
wait_for_pids "${pid}"
|
|
||||||
else
|
|
||||||
echo "${name} isn't running"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
beszel_agent_upgrade()
|
|
||||||
{
|
|
||||||
echo "Upgrading ${name}"
|
|
||||||
if command -v sudo >/dev/null; then
|
|
||||||
sudo -u "${beszel_agent_user}" -- "${beszel_agent_bin}" update
|
|
||||||
else
|
|
||||||
su -m "${beszel_agent_user}" -c "${beszel_agent_bin} update"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
run_rc_command "$1"
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# Detect system architecture
|
|
||||||
detect_architecture() {
|
|
||||||
local arch=$(uname -m)
|
|
||||||
|
|
||||||
if [ "$arch" = "mips" ]; then
|
|
||||||
detect_mips_endianness
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$arch" in
|
|
||||||
x86_64)
|
|
||||||
arch="amd64"
|
|
||||||
;;
|
|
||||||
armv6l|armv7l)
|
|
||||||
arch="arm"
|
|
||||||
;;
|
|
||||||
aarch64)
|
|
||||||
arch="arm64"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo "$arch"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Detect MIPS endianness using ELF header
|
|
||||||
detect_mips_endianness() {
|
|
||||||
local bins="/bin/sh /bin/ls /usr/bin/env"
|
|
||||||
local bin_to_check endian
|
|
||||||
|
|
||||||
for bin_to_check in $bins; do
|
|
||||||
if [ -f "$bin_to_check" ]; then
|
|
||||||
# The 6th byte in ELF header: 01 = little, 02 = big
|
|
||||||
endian=$(hexdump -n 1 -s 5 -e '1/1 "%02x"' "$bin_to_check" 2>/dev/null)
|
|
||||||
if [ "$endian" = "01" ]; then
|
|
||||||
echo "mipsle"
|
|
||||||
return
|
|
||||||
elif [ "$endian" = "02" ]; then
|
|
||||||
echo "mips"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Final fallback
|
|
||||||
echo "mips"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Default values
|
|
||||||
PORT=45876
|
|
||||||
UNINSTALL=false
|
|
||||||
GITHUB_URL="https://github.com"
|
|
||||||
GITHUB_PROXY_URL=""
|
|
||||||
KEY=""
|
|
||||||
TOKEN=""
|
|
||||||
HUB_URL=""
|
|
||||||
AUTO_UPDATE_FLAG="" # empty string means prompt, "true" means auto-enable, "false" means skip
|
|
||||||
VERSION="latest"
|
|
||||||
|
|
||||||
# Check for help flag
|
|
||||||
case "$1" in
|
|
||||||
-h | --help)
|
|
||||||
printf "Beszel Agent installation script\n\n"
|
|
||||||
printf "Usage: ./install-agent.sh [options]\n\n"
|
|
||||||
printf "Options: \n"
|
|
||||||
printf " -k : SSH key (required, or interactive if not provided)\n"
|
|
||||||
printf " -p : Port (default: $PORT)\n"
|
|
||||||
printf " -t : Token (optional for backwards compatibility)\n"
|
|
||||||
printf " -url : Hub URL (optional for backwards compatibility)\n"
|
|
||||||
printf " -v, --version : Version to install (default: latest)\n"
|
|
||||||
printf " -u : Uninstall Beszel Agent\n"
|
|
||||||
printf " --auto-update [VALUE] : Control automatic daily updates\n"
|
|
||||||
printf " VALUE can be true (enable) or false (disable). If not specified, will prompt.\n"
|
|
||||||
printf " --mirror [URL] : Use GitHub proxy to resolve network timeout issues in mainland China\n"
|
|
||||||
printf " URL: optional custom proxy URL (default: https://gh.beszel.dev)\n"
|
|
||||||
printf " -h, --help : Display this help message\n"
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Build sudo args by properly quoting everything
|
|
||||||
build_sudo_args() {
|
|
||||||
QUOTED_ARGS=""
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
if [ -n "$QUOTED_ARGS" ]; then
|
|
||||||
QUOTED_ARGS="$QUOTED_ARGS "
|
|
||||||
fi
|
|
||||||
QUOTED_ARGS="$QUOTED_ARGS'$(echo "$1" | sed "s/'/'\\\\''/g")'"
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
echo "$QUOTED_ARGS"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check if running as root and re-execute with sudo if needed
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
|
||||||
if command -v sudo >/dev/null 2>&1; then
|
|
||||||
SUDO_ARGS=$(build_sudo_args "$@")
|
|
||||||
eval "exec sudo $0 $SUDO_ARGS"
|
|
||||||
else
|
|
||||||
echo "This script must be run as root. Please either:"
|
|
||||||
echo "1. Run this script as root (su root)"
|
|
||||||
echo "2. Install sudo and run with sudo"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Parse arguments
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
-k)
|
|
||||||
shift
|
|
||||||
KEY="$1"
|
|
||||||
;;
|
|
||||||
-p)
|
|
||||||
shift
|
|
||||||
PORT="$1"
|
|
||||||
;;
|
|
||||||
-t)
|
|
||||||
shift
|
|
||||||
TOKEN="$1"
|
|
||||||
;;
|
|
||||||
-url)
|
|
||||||
shift
|
|
||||||
HUB_URL="$1"
|
|
||||||
;;
|
|
||||||
-v | --version)
|
|
||||||
shift
|
|
||||||
VERSION="$1"
|
|
||||||
;;
|
|
||||||
-u)
|
|
||||||
UNINSTALL=true
|
|
||||||
;;
|
|
||||||
--mirror* | --china-mirrors*)
|
|
||||||
# Check if there's a value after the = sign
|
|
||||||
if echo "$1" | grep -q "="; then
|
|
||||||
# Extract the value after =
|
|
||||||
CUSTOM_PROXY=$(echo "$1" | cut -d'=' -f2)
|
|
||||||
if [ -n "$CUSTOM_PROXY" ]; then
|
|
||||||
GITHUB_PROXY_URL="$CUSTOM_PROXY"
|
|
||||||
GITHUB_URL="$(ensure_trailing_slash "$CUSTOM_PROXY")https://github.com"
|
|
||||||
else
|
|
||||||
GITHUB_PROXY_URL="https://gh.beszel.dev"
|
|
||||||
GITHUB_URL="$GITHUB_PROXY_URL"
|
|
||||||
fi
|
|
||||||
elif [ "$2" != "" ] && ! echo "$2" | grep -q '^-'; then
|
|
||||||
# use custom proxy URL provided as next argument
|
|
||||||
GITHUB_PROXY_URL="$2"
|
|
||||||
GITHUB_URL="$(ensure_trailing_slash "$2")https://github.com"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
# No value specified, use default
|
|
||||||
GITHUB_PROXY_URL="https://gh.beszel.dev"
|
|
||||||
GITHUB_URL="$GITHUB_PROXY_URL"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
--auto-update*)
|
|
||||||
# Check if there's a value after the = sign
|
|
||||||
if echo "$1" | grep -q "="; then
|
|
||||||
# Extract the value after =
|
|
||||||
AUTO_UPDATE_VALUE=$(echo "$1" | cut -d'=' -f2)
|
|
||||||
if [ "$AUTO_UPDATE_VALUE" = "true" ]; then
|
|
||||||
AUTO_UPDATE_FLAG="true"
|
|
||||||
elif [ "$AUTO_UPDATE_VALUE" = "false" ]; then
|
|
||||||
AUTO_UPDATE_FLAG="false"
|
|
||||||
else
|
|
||||||
echo "Invalid value for --auto-update flag: $AUTO_UPDATE_VALUE. Using default (prompt)."
|
|
||||||
fi
|
|
||||||
elif [ "$2" = "true" ] || [ "$2" = "false" ]; then
|
|
||||||
# Value provided as next argument
|
|
||||||
AUTO_UPDATE_FLAG="$2"
|
|
||||||
shift
|
|
||||||
else
|
|
||||||
# No value specified, use true
|
|
||||||
AUTO_UPDATE_FLAG="true"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Invalid option: $1" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
# Set paths based on operating system
|
|
||||||
if is_freebsd; then
|
|
||||||
AGENT_DIR="/usr/local/etc/beszel-agent"
|
|
||||||
BIN_DIR="/usr/local/sbin"
|
|
||||||
BIN_PATH="/usr/local/sbin/beszel-agent"
|
|
||||||
else
|
|
||||||
AGENT_DIR="/opt/beszel-agent"
|
|
||||||
BIN_DIR="/opt/beszel-agent"
|
|
||||||
BIN_PATH="/opt/beszel-agent/beszel-agent"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Uninstall process
|
|
||||||
if [ "$UNINSTALL" = true ]; then
|
|
||||||
# Clean up SELinux contexts before removing files
|
|
||||||
cleanup_selinux_context
|
|
||||||
|
|
||||||
if is_alpine; then
|
|
||||||
echo "Stopping and disabling the agent service..."
|
|
||||||
rc-service beszel-agent stop
|
|
||||||
rc-update del beszel-agent default
|
|
||||||
|
|
||||||
echo "Removing the OpenRC service files..."
|
|
||||||
rm -f /etc/init.d/beszel-agent
|
|
||||||
|
|
||||||
# Remove the daily update cron job if it exists
|
|
||||||
echo "Removing the daily update cron job..."
|
|
||||||
if crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
|
||||||
crontab -u root -l 2>/dev/null | grep -v "beszel-agent.*update" | crontab -u root -
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove log files
|
|
||||||
echo "Removing log files..."
|
|
||||||
rm -f /var/log/beszel-agent.log /var/log/beszel-agent.err
|
|
||||||
elif is_openwrt; then
|
|
||||||
echo "Stopping and disabling the agent service..."
|
|
||||||
/etc/init.d/beszel-agent stop
|
|
||||||
/etc/init.d/beszel-agent disable
|
|
||||||
|
|
||||||
echo "Removing the OpenWRT service files..."
|
|
||||||
rm -f /etc/init.d/beszel-agent
|
|
||||||
|
|
||||||
# Remove the update service if it exists
|
|
||||||
echo "Removing the daily update service..."
|
|
||||||
# Remove legacy beszel account based crontab file
|
|
||||||
rm -f /etc/crontabs/beszel
|
|
||||||
# Install root crontab job
|
|
||||||
if crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
|
||||||
crontab -u root -l 2>/dev/null | grep -v "beszel-agent.*update" | crontab -u root -
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif is_freebsd; then
|
|
||||||
echo "Stopping and disabling the agent service..."
|
|
||||||
service beszel-agent stop
|
|
||||||
sysrc beszel_agent_enable="NO"
|
|
||||||
|
|
||||||
echo "Removing the FreeBSD service files..."
|
|
||||||
rm -f /usr/local/etc/rc.d/beszel-agent
|
|
||||||
|
|
||||||
# Remove the daily update cron job if it exists
|
|
||||||
echo "Removing the daily update cron job..."
|
|
||||||
rm -f /etc/cron.d/beszel-agent
|
|
||||||
|
|
||||||
# Remove log files
|
|
||||||
echo "Removing log files..."
|
|
||||||
rm -f /var/log/beszel-agent.log
|
|
||||||
|
|
||||||
# Remove env file and directories
|
|
||||||
echo "Removing environment configuration file..."
|
|
||||||
rm -f "$AGENT_DIR/env"
|
|
||||||
rm -f "$BIN_PATH"
|
|
||||||
rmdir "$AGENT_DIR" 2>/dev/null || true
|
|
||||||
|
|
||||||
else
|
|
||||||
echo "Stopping and disabling the agent service..."
|
|
||||||
systemctl stop beszel-agent.service
|
|
||||||
systemctl disable beszel-agent.service
|
|
||||||
|
|
||||||
echo "Removing the systemd service file..."
|
|
||||||
rm /etc/systemd/system/beszel-agent.service
|
|
||||||
|
|
||||||
# Remove the update timer and service if they exist
|
|
||||||
echo "Removing the daily update service and timer..."
|
|
||||||
systemctl stop beszel-agent-update.timer 2>/dev/null
|
|
||||||
systemctl disable beszel-agent-update.timer 2>/dev/null
|
|
||||||
rm -f /etc/systemd/system/beszel-agent-update.service
|
|
||||||
rm -f /etc/systemd/system/beszel-agent-update.timer
|
|
||||||
|
|
||||||
systemctl daemon-reload
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Removing the Beszel Agent directory..."
|
|
||||||
rm -rf "$AGENT_DIR"
|
|
||||||
|
|
||||||
echo "Removing the dedicated user for the agent service..."
|
|
||||||
killall beszel-agent 2>/dev/null
|
|
||||||
if is_alpine || is_openwrt; then
|
|
||||||
deluser beszel 2>/dev/null
|
|
||||||
elif is_freebsd; then
|
|
||||||
pw user del beszel 2>/dev/null
|
|
||||||
else
|
|
||||||
userdel beszel 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Beszel Agent has been uninstalled successfully!"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if a package is installed
|
|
||||||
package_installed() {
|
|
||||||
command -v "$1" >/dev/null 2>&1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check for package manager and install necessary packages if not installed
|
|
||||||
if package_installed apk; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
apk update
|
|
||||||
apk add tar curl coreutils shadow
|
|
||||||
fi
|
|
||||||
elif package_installed opkg; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
opkg update
|
|
||||||
opkg install tar curl coreutils
|
|
||||||
fi
|
|
||||||
elif package_installed pkg && is_freebsd; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
pkg update
|
|
||||||
pkg install -y gtar curl coreutils
|
|
||||||
fi
|
|
||||||
elif package_installed apt-get; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
apt-get update
|
|
||||||
apt-get install -y tar curl coreutils
|
|
||||||
fi
|
|
||||||
elif package_installed yum; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
yum install -y tar curl coreutils
|
|
||||||
fi
|
|
||||||
elif package_installed pacman; then
|
|
||||||
if ! package_installed tar || ! package_installed curl || ! package_installed sha256sum; then
|
|
||||||
pacman -Sy --noconfirm tar curl coreutils
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "Warning: Please ensure 'tar' and 'curl' and 'sha256sum (coreutils)' are installed."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If no SSH key is provided, ask for the SSH key interactively
|
|
||||||
if [ -z "$KEY" ]; then
|
|
||||||
printf "Enter your SSH key: "
|
|
||||||
read KEY
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove newlines from KEY
|
|
||||||
KEY=$(echo "$KEY" | tr -d '\n')
|
|
||||||
|
|
||||||
# TOKEN and HUB_URL are optional for backwards compatibility - no interactive prompts
|
|
||||||
# They will be set as empty environment variables if not provided
|
|
||||||
|
|
||||||
# Verify checksum
|
|
||||||
if command -v sha256sum >/dev/null; then
|
|
||||||
CHECK_CMD="sha256sum"
|
|
||||||
elif command -v sha256 >/dev/null; then
|
|
||||||
# FreeBSD uses 'sha256' instead of 'sha256sum', with different output format
|
|
||||||
CHECK_CMD="sha256 -q"
|
|
||||||
else
|
|
||||||
echo "No SHA256 checksum utility found"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create a dedicated user for the service if it doesn't exist
|
|
||||||
echo "Creating a dedicated user for the Beszel Agent service..."
|
|
||||||
if is_alpine; then
|
|
||||||
if ! id -u beszel >/dev/null 2>&1; then
|
|
||||||
addgroup beszel
|
|
||||||
adduser -S -D -H -s /sbin/nologin -G beszel beszel
|
|
||||||
fi
|
|
||||||
# Add the user to the docker group to allow access to the Docker socket if group docker exists
|
|
||||||
if getent group docker; then
|
|
||||||
echo "Adding beszel to docker group"
|
|
||||||
usermod -aG docker beszel
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif is_openwrt; then
|
|
||||||
# Create beszel group first if it doesn't exist (check /etc/group directly)
|
|
||||||
if ! grep -q "^beszel:" /etc/group >/dev/null 2>&1; then
|
|
||||||
echo "beszel:x:999:" >> /etc/group
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create beszel user if it doesn't exist (double-check to prevent duplicates)
|
|
||||||
if ! id -u beszel >/dev/null 2>&1 && ! grep -q "^beszel:" /etc/passwd >/dev/null 2>&1; then
|
|
||||||
echo "beszel:x:999:999::/nonexistent:/bin/false" >> /etc/passwd
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Add the user to the docker group if docker group exists and user is not already in it
|
|
||||||
if grep -q "^docker:" /etc/group >/dev/null 2>&1; then
|
|
||||||
echo "Adding beszel to docker group"
|
|
||||||
# Check if beszel is already in docker group
|
|
||||||
if ! grep "^docker:" /etc/group | grep -q "beszel"; then
|
|
||||||
# Add beszel to docker group by modifying /etc/group
|
|
||||||
# Handle both cases: group with existing members and group without members
|
|
||||||
if grep "^docker:" /etc/group | grep -q ":.*:.*$"; then
|
|
||||||
# Group has existing members, append with comma
|
|
||||||
sed -i 's/^docker:\([^:]*:[^:]*:\)\(.*\)$/docker:\1\2,beszel/' /etc/group
|
|
||||||
else
|
|
||||||
# Group has no members, just append
|
|
||||||
sed -i 's/^docker:\([^:]*:[^:]*:\)$/docker:\1beszel/' /etc/group
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif is_freebsd; then
|
|
||||||
if ! id -u beszel >/dev/null 2>&1; then
|
|
||||||
pw user add beszel -d /nonexistent -s /usr/sbin/nologin -c "beszel user"
|
|
||||||
fi
|
|
||||||
# Add the user to the wheel group to allow self-updates
|
|
||||||
if pw group show wheel >/dev/null 2>&1; then
|
|
||||||
echo "Adding beszel to wheel group for self-updates"
|
|
||||||
pw group mod wheel -m beszel
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
if ! id -u beszel >/dev/null 2>&1; then
|
|
||||||
useradd --system --home-dir /nonexistent --shell /bin/false beszel
|
|
||||||
fi
|
|
||||||
# Add the user to the docker group to allow access to the Docker socket if group docker exists
|
|
||||||
if getent group docker; then
|
|
||||||
echo "Adding beszel to docker group"
|
|
||||||
usermod -aG docker beszel
|
|
||||||
fi
|
|
||||||
# Add the user to the disk group to allow access to disk devices if group disk exists
|
|
||||||
if getent group disk; then
|
|
||||||
echo "Adding beszel to disk group"
|
|
||||||
usermod -aG disk beszel
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create the directory for the Beszel Agent
|
|
||||||
|
|
||||||
if [ ! -d "$AGENT_DIR" ]; then
|
|
||||||
echo "Creating the directory for the Beszel Agent..."
|
|
||||||
mkdir -p "$AGENT_DIR"
|
|
||||||
chown beszel:beszel "$AGENT_DIR"
|
|
||||||
chmod 755 "$AGENT_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "$BIN_DIR" ]; then
|
|
||||||
mkdir -p "$BIN_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Download and install the Beszel Agent
|
|
||||||
echo "Downloading and installing the agent..."
|
|
||||||
|
|
||||||
OS=$(uname -s | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/')
|
|
||||||
ARCH=$(detect_architecture)
|
|
||||||
FILE_NAME="beszel-agent_${OS}_${ARCH}.tar.gz"
|
|
||||||
|
|
||||||
# Determine version to install
|
|
||||||
if [ "$VERSION" = "latest" ]; then
|
|
||||||
INSTALL_VERSION=$(curl -s "https://get.beszel.dev/latest-version")
|
|
||||||
if [ -z "$INSTALL_VERSION" ]; then
|
|
||||||
# Fallback to GitHub API
|
|
||||||
API_RELEASE_URL="https://api.github.com/repos/henrygd/beszel/releases/latest"
|
|
||||||
INSTALL_VERSION=$(curl -s "$API_RELEASE_URL" | grep -o '"tag_name": "v[^"]*"' | cut -d'"' -f4 | tr -d 'v')
|
|
||||||
fi
|
|
||||||
if [ -z "$INSTALL_VERSION" ]; then
|
|
||||||
echo "Failed to get latest version"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
INSTALL_VERSION="$VERSION"
|
|
||||||
# Remove 'v' prefix if present
|
|
||||||
INSTALL_VERSION=$(echo "$INSTALL_VERSION" | sed 's/^v//')
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Downloading and installing agent version ${INSTALL_VERSION} from ${GITHUB_URL} ..."
|
|
||||||
|
|
||||||
# Download checksums file
|
|
||||||
TEMP_DIR=$(mktemp -d)
|
|
||||||
cd "$TEMP_DIR" || exit 1
|
|
||||||
CHECKSUM=$(curl -sL "$GITHUB_URL/henrygd/beszel/releases/download/v${INSTALL_VERSION}/beszel_${INSTALL_VERSION}_checksums.txt" | grep "$FILE_NAME" | cut -d' ' -f1)
|
|
||||||
if [ -z "$CHECKSUM" ] || ! echo "$CHECKSUM" | grep -qE "^[a-fA-F0-9]{64}$"; then
|
|
||||||
echo "Failed to get checksum or invalid checksum format"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! curl -#L "$GITHUB_URL/henrygd/beszel/releases/download/v${INSTALL_VERSION}/$FILE_NAME" -o "$FILE_NAME"; then
|
|
||||||
echo "Failed to download the agent from ""$GITHUB_URL/henrygd/beszel/releases/download/v${INSTALL_VERSION}/$FILE_NAME"
|
|
||||||
rm -rf "$TEMP_DIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$($CHECK_CMD "$FILE_NAME" | cut -d' ' -f1)" != "$CHECKSUM" ]; then
|
|
||||||
echo "Checksum verification failed: $($CHECK_CMD "$FILE_NAME" | cut -d' ' -f1) & $CHECKSUM"
|
|
||||||
rm -rf "$TEMP_DIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! tar -xzf "$FILE_NAME" beszel-agent; then
|
|
||||||
echo "Failed to extract the agent"
|
|
||||||
rm -rf "$TEMP_DIR"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
mv beszel-agent "$BIN_PATH"
|
|
||||||
chown beszel:beszel "$BIN_PATH"
|
|
||||||
chmod 755 "$BIN_PATH"
|
|
||||||
|
|
||||||
# Set SELinux context if needed
|
|
||||||
set_selinux_context
|
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
rm -rf "$TEMP_DIR"
|
|
||||||
|
|
||||||
# Make sure /etc/machine-id exists for persistent fingerprint
|
|
||||||
if [ ! -f /etc/machine-id ]; then
|
|
||||||
cat /proc/sys/kernel/random/uuid | tr -d '-' > /etc/machine-id
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check for NVIDIA GPUs and grant device permissions for systemd service
|
|
||||||
detect_nvidia_devices() {
|
|
||||||
local devices=""
|
|
||||||
for i in /dev/nvidia*; do
|
|
||||||
if [ -e "$i" ]; then
|
|
||||||
devices="${devices}DeviceAllow=$i rw\n"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo "$devices"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Modify service installation part, add Alpine check before systemd service creation
|
|
||||||
if is_alpine; then
|
|
||||||
echo "Creating OpenRC service for Alpine Linux..."
|
|
||||||
cat >/etc/init.d/beszel-agent <<EOF
|
|
||||||
#!/sbin/openrc-run
|
|
||||||
|
|
||||||
name="beszel-agent"
|
|
||||||
description="Beszel Agent Service"
|
|
||||||
command="$BIN_PATH"
|
|
||||||
command_user="beszel"
|
|
||||||
command_background="yes"
|
|
||||||
pidfile="/run/\${RC_SVCNAME}.pid"
|
|
||||||
output_log="/var/log/beszel-agent.log"
|
|
||||||
error_log="/var/log/beszel-agent.err"
|
|
||||||
|
|
||||||
start_pre() {
|
|
||||||
checkpath -f -m 0644 -o beszel:beszel "\$output_log" "\$error_log"
|
|
||||||
}
|
|
||||||
|
|
||||||
export PORT="$PORT"
|
|
||||||
export KEY="$KEY"
|
|
||||||
export TOKEN="$TOKEN"
|
|
||||||
export HUB_URL="$HUB_URL"
|
|
||||||
|
|
||||||
depend() {
|
|
||||||
need net
|
|
||||||
after firewall
|
|
||||||
}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x /etc/init.d/beszel-agent
|
|
||||||
rc-update add beszel-agent default
|
|
||||||
|
|
||||||
# Create log files with proper permissions
|
|
||||||
touch /var/log/beszel-agent.log /var/log/beszel-agent.err
|
|
||||||
chown beszel:beszel /var/log/beszel-agent.log /var/log/beszel-agent.err
|
|
||||||
|
|
||||||
# Start the service
|
|
||||||
rc-service beszel-agent restart
|
|
||||||
|
|
||||||
# Check if service started successfully
|
|
||||||
sleep 2
|
|
||||||
if ! rc-service beszel-agent status | grep -q "started"; then
|
|
||||||
echo "Error: The Beszel Agent service failed to start. Checking logs..."
|
|
||||||
tail -n 20 /var/log/beszel-agent.err
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Auto-update service for Alpine
|
|
||||||
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
|
|
||||||
AUTO_UPDATE="y"
|
|
||||||
elif [ "$AUTO_UPDATE_FLAG" = "false" ]; then
|
|
||||||
AUTO_UPDATE="n"
|
|
||||||
else
|
|
||||||
printf "\nEnable automatic daily updates for beszel-agent? (y/n): "
|
|
||||||
read AUTO_UPDATE
|
|
||||||
fi
|
|
||||||
case "$AUTO_UPDATE" in
|
|
||||||
[Yy]*)
|
|
||||||
echo "Setting up daily automatic updates for beszel-agent..."
|
|
||||||
|
|
||||||
# Create cron job to run beszel-agent update command daily at midnight
|
|
||||||
if ! crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
|
||||||
(crontab -u root -l 2>/dev/null; echo "12 0 * * * $BIN_PATH update >/dev/null 2>&1") | crontab -u root -
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\nDaily updates have been enabled via cron job.\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Check service status
|
|
||||||
if ! rc-service beszel-agent status >/dev/null 2>&1; then
|
|
||||||
echo "Error: The Beszel Agent service is not running."
|
|
||||||
rc-service beszel-agent status
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif is_openwrt; then
|
|
||||||
echo "Creating procd init script service for OpenWRT..."
|
|
||||||
cat >/etc/init.d/beszel-agent <<EOF
|
|
||||||
#!/bin/sh /etc/rc.common
|
|
||||||
|
|
||||||
USE_PROCD=1
|
|
||||||
START=99
|
|
||||||
|
|
||||||
start_service() {
|
|
||||||
procd_open_instance
|
|
||||||
procd_set_param command $BIN_PATH
|
|
||||||
procd_set_param user beszel
|
|
||||||
procd_set_param pidfile /var/run/beszel-agent.pid
|
|
||||||
procd_set_param env PORT="$PORT" KEY="$KEY" TOKEN="$TOKEN" HUB_URL="$HUB_URL"
|
|
||||||
procd_set_param respawn
|
|
||||||
procd_set_param stdout 1
|
|
||||||
procd_set_param stderr 1
|
|
||||||
procd_close_instance
|
|
||||||
}
|
|
||||||
|
|
||||||
# Extra command to trigger agent update
|
|
||||||
EXTRA_COMMANDS="update restart"
|
|
||||||
EXTRA_HELP=" update Update the Beszel agent
|
|
||||||
restart Restart the Beszel agent"
|
|
||||||
|
|
||||||
update() {
|
|
||||||
$BIN_PATH update
|
|
||||||
}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Enable the service
|
|
||||||
chmod +x /etc/init.d/beszel-agent
|
|
||||||
/etc/init.d/beszel-agent enable
|
|
||||||
|
|
||||||
# Start the service
|
|
||||||
/etc/init.d/beszel-agent restart
|
|
||||||
|
|
||||||
# Auto-update service for OpenWRT using a crontab job
|
|
||||||
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
|
|
||||||
AUTO_UPDATE="y"
|
|
||||||
sleep 1 # give time for the service to start
|
|
||||||
elif [ "$AUTO_UPDATE_FLAG" = "false" ]; then
|
|
||||||
AUTO_UPDATE="n"
|
|
||||||
sleep 1 # give time for the service to start
|
|
||||||
else
|
|
||||||
printf "\nEnable automatic daily updates for beszel-agent? (y/n): "
|
|
||||||
read AUTO_UPDATE
|
|
||||||
fi
|
|
||||||
case "$AUTO_UPDATE" in
|
|
||||||
[Yy]*)
|
|
||||||
echo "Setting up daily automatic updates for beszel-agent..."
|
|
||||||
|
|
||||||
if ! crontab -u root -l 2>/dev/null | grep -q "beszel-agent.*update"; then
|
|
||||||
(crontab -u root -l 2>/dev/null; echo "12 0 * * * /etc/init.d/beszel-agent update") | crontab -u root -
|
|
||||||
fi
|
|
||||||
|
|
||||||
/etc/init.d/cron restart
|
|
||||||
|
|
||||||
printf "\nDaily updates have been enabled.\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Check service status
|
|
||||||
if ! /etc/init.d/beszel-agent running >/dev/null 2>&1; then
|
|
||||||
echo "Error: The Beszel Agent service is not running."
|
|
||||||
/etc/init.d/beszel-agent status
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif is_freebsd; then
|
|
||||||
echo "Creating FreeBSD rc service..."
|
|
||||||
|
|
||||||
# Create environment configuration file with proper permissions
|
|
||||||
echo "Creating environment configuration file..."
|
|
||||||
cat >"$AGENT_DIR/env" <<EOF
|
|
||||||
LISTEN=$PORT
|
|
||||||
KEY="$KEY"
|
|
||||||
TOKEN=$TOKEN
|
|
||||||
HUB_URL=$HUB_URL
|
|
||||||
EOF
|
|
||||||
chmod 640 "$AGENT_DIR/env"
|
|
||||||
chown root:beszel "$AGENT_DIR/env"
|
|
||||||
|
|
||||||
# Create the rc service file
|
|
||||||
generate_freebsd_rc_service > /usr/local/etc/rc.d/beszel-agent
|
|
||||||
|
|
||||||
# Set proper permissions for the rc script
|
|
||||||
chmod 755 /usr/local/etc/rc.d/beszel-agent
|
|
||||||
|
|
||||||
# Enable and start the service
|
|
||||||
echo "Enabling and starting the agent service..."
|
|
||||||
sysrc beszel_agent_enable="YES"
|
|
||||||
service beszel-agent restart
|
|
||||||
|
|
||||||
# Check if service started successfully
|
|
||||||
sleep 2
|
|
||||||
if ! service beszel-agent status | grep -q "is running"; then
|
|
||||||
echo "Error: The Beszel Agent service failed to start. Checking logs..."
|
|
||||||
tail -n 20 /var/log/beszel_agent.log
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Auto-update service for FreeBSD
|
|
||||||
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
|
|
||||||
AUTO_UPDATE="y"
|
|
||||||
elif [ "$AUTO_UPDATE_FLAG" = "false" ]; then
|
|
||||||
AUTO_UPDATE="n"
|
|
||||||
else
|
|
||||||
printf "\nEnable automatic daily updates for beszel-agent? (y/n): "
|
|
||||||
read AUTO_UPDATE
|
|
||||||
fi
|
|
||||||
case "$AUTO_UPDATE" in
|
|
||||||
[Yy]*)
|
|
||||||
echo "Setting up daily automatic updates for beszel-agent..."
|
|
||||||
|
|
||||||
# Create cron job in /etc/cron.d
|
|
||||||
cat >/etc/cron.d/beszel-agent <<EOF
|
|
||||||
# Beszel Agent daily update job
|
|
||||||
12 0 * * * root $BIN_PATH update >/dev/null 2>&1
|
|
||||||
EOF
|
|
||||||
chmod 644 /etc/cron.d/beszel-agent
|
|
||||||
printf "\nDaily updates have been enabled via /etc/cron.d.\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Check service status
|
|
||||||
if ! service beszel-agent status >/dev/null 2>&1; then
|
|
||||||
echo "Error: The Beszel Agent service is not running."
|
|
||||||
service beszel-agent status
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
# Original systemd service installation code
|
|
||||||
echo "Creating the systemd service for the agent..."
|
|
||||||
|
|
||||||
# Detect NVIDIA devices and grant device permissions
|
|
||||||
NVIDIA_DEVICES=$(detect_nvidia_devices)
|
|
||||||
|
|
||||||
cat >/etc/systemd/system/beszel-agent.service <<EOF
|
|
||||||
[Unit]
|
|
||||||
Description=Beszel Agent Service
|
|
||||||
Wants=network-online.target
|
|
||||||
After=network-online.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Environment="PORT=$PORT"
|
|
||||||
Environment="KEY=$KEY"
|
|
||||||
Environment="TOKEN=$TOKEN"
|
|
||||||
Environment="HUB_URL=$HUB_URL"
|
|
||||||
# Environment="EXTRA_FILESYSTEMS=sdb"
|
|
||||||
ExecStart=$BIN_PATH
|
|
||||||
User=beszel
|
|
||||||
Restart=on-failure
|
|
||||||
RestartSec=5
|
|
||||||
StateDirectory=beszel-agent
|
|
||||||
|
|
||||||
# Security/sandboxing settings
|
|
||||||
KeyringMode=private
|
|
||||||
LockPersonality=yes
|
|
||||||
ProtectClock=yes
|
|
||||||
ProtectHome=read-only
|
|
||||||
ProtectHostname=yes
|
|
||||||
ProtectKernelLogs=yes
|
|
||||||
ProtectSystem=strict
|
|
||||||
RemoveIPC=yes
|
|
||||||
RestrictSUIDSGID=true
|
|
||||||
|
|
||||||
$(if [ -n "$NVIDIA_DEVICES" ]; then printf "%b" "# NVIDIA device permissions\n${NVIDIA_DEVICES}"; fi)
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Load and start the service
|
|
||||||
printf "\nLoading and starting the agent service...\n"
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable beszel-agent.service
|
|
||||||
systemctl start beszel-agent.service
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Prompt for auto-update setup
|
|
||||||
if [ "$AUTO_UPDATE_FLAG" = "true" ]; then
|
|
||||||
AUTO_UPDATE="y"
|
|
||||||
sleep 1 # give time for the service to start
|
|
||||||
elif [ "$AUTO_UPDATE_FLAG" = "false" ]; then
|
|
||||||
AUTO_UPDATE="n"
|
|
||||||
sleep 1 # give time for the service to start
|
|
||||||
else
|
|
||||||
printf "\nEnable automatic daily updates for beszel-agent? (y/n): "
|
|
||||||
read AUTO_UPDATE
|
|
||||||
fi
|
|
||||||
case "$AUTO_UPDATE" in
|
|
||||||
[Yy]*)
|
|
||||||
echo "Setting up daily automatic updates for beszel-agent..."
|
|
||||||
|
|
||||||
# Create systemd service for the daily update
|
|
||||||
cat >/etc/systemd/system/beszel-agent-update.service <<EOF
|
|
||||||
[Unit]
|
|
||||||
Description=Update beszel-agent if needed
|
|
||||||
Wants=beszel-agent.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=oneshot
|
|
||||||
ExecStart=$BIN_PATH update
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Create systemd timer for the daily update
|
|
||||||
cat >/etc/systemd/system/beszel-agent-update.timer <<EOF
|
|
||||||
[Unit]
|
|
||||||
Description=Run beszel-agent update daily
|
|
||||||
|
|
||||||
[Timer]
|
|
||||||
OnCalendar=daily
|
|
||||||
Persistent=true
|
|
||||||
RandomizedDelaySec=4h
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=timers.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl daemon-reload
|
|
||||||
systemctl enable --now beszel-agent-update.timer
|
|
||||||
|
|
||||||
printf "\nDaily updates have been enabled.\n"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Wait for the service to start or fail
|
|
||||||
if [ "$(systemctl is-active beszel-agent.service)" != "active" ]; then
|
|
||||||
echo "Error: The Beszel Agent service is not running."
|
|
||||||
echo "$(systemctl status beszel-agent.service)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\n\033[32mBeszel Agent has been installed successfully! It is now running on $PORT.\033[0m\n"
|
|
||||||
Generated
+10468
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
"name": "n8n-pilot",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "expo-router/entry",
|
||||||
|
"scripts": {
|
||||||
|
"start": "expo start",
|
||||||
|
"android": "expo start --android",
|
||||||
|
"ios": "expo start --ios",
|
||||||
|
"web": "expo start --web"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^1.16.1",
|
||||||
|
"date-fns": "^4.2.1",
|
||||||
|
"expo": "~54.0.33",
|
||||||
|
"expo-constants": "~18.0.13",
|
||||||
|
"expo-linking": "~8.0.12",
|
||||||
|
"expo-local-authentication": "~17.0.8",
|
||||||
|
"expo-router": "~6.0.23",
|
||||||
|
"expo-secure-store": "~15.0.8",
|
||||||
|
"expo-splash-screen": "~31.0.13",
|
||||||
|
"expo-status-bar": "~3.0.9",
|
||||||
|
"react": "19.1.0",
|
||||||
|
"react-dom": "19.1.0",
|
||||||
|
"react-native": "0.81.5",
|
||||||
|
"react-native-gesture-handler": "~2.28.0",
|
||||||
|
"react-native-paper": "^5.15.2",
|
||||||
|
"react-native-reanimated": "~4.1.1",
|
||||||
|
"react-native-safe-area-context": "~5.6.0",
|
||||||
|
"react-native-screens": "~4.16.0",
|
||||||
|
"react-native-web": "^0.21.0",
|
||||||
|
"react-native-worklets": "0.5.1",
|
||||||
|
"zustand": "^5.0.13"
|
||||||
|
},
|
||||||
|
"private": true,
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "~19.1.10",
|
||||||
|
"@types/react-native": "^0.72.8",
|
||||||
|
"babel-preset-expo": "~54.0.10",
|
||||||
|
"typescript": "~5.9.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Loop through all Let's Encrypt certificates
|
|
||||||
for CERTIFICATE in `find /etc/letsencrypt/live/* -type d`; do
|
|
||||||
CERTIFICATE=`basename $CERTIFICATE`
|
|
||||||
# Combine certificate and private key to single file
|
|
||||||
cat /etc/letsencrypt/live/$CERTIFICATE/fullchain.pem /etc/letsencrypt/live/$CERTIFICATE/privkey.pem > /etc/haproxy/ssl/$CERTIFICATE.pem
|
|
||||||
done
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#certbot renew --standalone --preferred-challenges http --http-01-address 127.0.0.1 --http-01-port 9080 --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" --quiet
|
|
||||||
certbot renew --dns-ovh --dns-ovh-credentials "/etc/letsencrypt/ovh/ovh.ini" --quiet --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" -vvv
|
|
||||||
#certbot renew --dns-ovh --dns-ovh-credentials "/etc/letsencrypt/ovh/ovh.ini" --post-hook "/etc/haproxy/prepareLetsEncryptCertificates.sh && systemctl reload haproxy.service" --force-renewal
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
import axios, {
|
||||||
|
AxiosInstance,
|
||||||
|
InternalAxiosRequestConfig,
|
||||||
|
AxiosResponse,
|
||||||
|
AxiosError,
|
||||||
|
} from 'axios';
|
||||||
|
import * as SecureStore from 'expo-secure-store';
|
||||||
|
import { handleError } from '../utils/errorHandler';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clés de stockage sécurisé Android Keystore via expo-secure-store.
|
||||||
|
* Ces constantes sont les seuls points de référence aux secrets dans toute l'app.
|
||||||
|
*/
|
||||||
|
export const SECURE_STORE_KEYS = {
|
||||||
|
BASE_URL: 'n8n_base_url',
|
||||||
|
API_KEY: 'n8n_api_key',
|
||||||
|
APP_TOKEN: 'n8n_app_token',
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Crée et configure l'instance Axios centrale de l'application.
|
||||||
|
*
|
||||||
|
* Architecture de sécurité :
|
||||||
|
* - Les credentials (API key, app token) ne sont JAMAIS embarqués dans le bundle.
|
||||||
|
* - Ils sont récupérés dynamiquement depuis le secure store à chaque requête.
|
||||||
|
* - La base URL est également stockée dans le secure store, pas en dur.
|
||||||
|
*/
|
||||||
|
const createApiClient = (): AxiosInstance => {
|
||||||
|
const client = axios.create({
|
||||||
|
timeout: 15_000,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intercepteur de requête sortante.
|
||||||
|
* Lit baseURL, X-N8N-API-KEY et X-App-Token depuis le secure store
|
||||||
|
* et les injecte dans chaque requête avant envoi.
|
||||||
|
* Aucune valeur sensible ne transite par les variables d'environnement du bundle.
|
||||||
|
*/
|
||||||
|
client.interceptors.request.use(
|
||||||
|
async (config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig> => {
|
||||||
|
const [baseUrl, apiKey, appToken] = await Promise.all([
|
||||||
|
SecureStore.getItemAsync(SECURE_STORE_KEYS.BASE_URL),
|
||||||
|
SecureStore.getItemAsync(SECURE_STORE_KEYS.API_KEY),
|
||||||
|
SecureStore.getItemAsync(SECURE_STORE_KEYS.APP_TOKEN),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (baseUrl) config.baseURL = baseUrl;
|
||||||
|
if (apiKey) config.headers.set('X-N8N-API-KEY', apiKey);
|
||||||
|
if (appToken) config.headers.set('X-App-Token', appToken);
|
||||||
|
|
||||||
|
return config;
|
||||||
|
},
|
||||||
|
(error: AxiosError) => Promise.reject(error)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intercepteur de réponse.
|
||||||
|
* Les erreurs HTTP sont transmises à errorHandler qui affiche un toast.
|
||||||
|
* L'erreur est re-rejetée pour que les appelants puissent aussi réagir si besoin.
|
||||||
|
* Aucun secret n'est loggué ici.
|
||||||
|
*/
|
||||||
|
client.interceptors.response.use(
|
||||||
|
(response: AxiosResponse) => response,
|
||||||
|
(error: AxiosError) => {
|
||||||
|
handleError(error);
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return client;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Instance Axios unique partagée dans toute l'application */
|
||||||
|
export const apiClient = createApiClient();
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
import { apiClient } from './client';
|
||||||
|
import { ApiListResponse } from './workflows';
|
||||||
|
|
||||||
|
/** Ensemble des statuts possibles pour une exécution n8n */
|
||||||
|
export type ExecutionStatus = 'success' | 'error' | 'waiting' | 'running' | 'canceled';
|
||||||
|
|
||||||
|
/** Modes de déclenchement d'une exécution */
|
||||||
|
export type ExecutionMode = 'manual' | 'trigger' | 'webhook' | 'internal' | 'retry';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Données d'exécution d'un nœud individuel.
|
||||||
|
* Disponibles uniquement dans la réponse détaillée (GET /executions/:id).
|
||||||
|
*/
|
||||||
|
export interface NodeExecutionData {
|
||||||
|
startTime: number;
|
||||||
|
executionTime: number;
|
||||||
|
source: unknown[];
|
||||||
|
data?: Record<string, unknown>;
|
||||||
|
error?: {
|
||||||
|
message: string;
|
||||||
|
name?: string;
|
||||||
|
stack?: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Données complètes d'un résultat d'exécution */
|
||||||
|
export interface ExecutionResultData {
|
||||||
|
resultData: {
|
||||||
|
/** Map nœud → tableau des runs de ce nœud */
|
||||||
|
runData: Record<string, NodeExecutionData[]>;
|
||||||
|
lastNodeExecuted?: string;
|
||||||
|
/** Erreur globale de l'exécution (distinct des erreurs par nœud) */
|
||||||
|
error?: {
|
||||||
|
message: string;
|
||||||
|
name: string;
|
||||||
|
stack?: string;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Représente une exécution telle que retournée par l'API n8n v1.
|
||||||
|
* Le champ `data` n'est disponible que dans la réponse de GET /executions/:id.
|
||||||
|
*/
|
||||||
|
export interface Execution {
|
||||||
|
id: string;
|
||||||
|
finished: boolean;
|
||||||
|
mode: ExecutionMode;
|
||||||
|
/** ID de l'exécution originale si c'est un retry */
|
||||||
|
retryOf?: string;
|
||||||
|
retrySuccessId?: string;
|
||||||
|
startedAt: string;
|
||||||
|
stoppedAt?: string;
|
||||||
|
workflowId: string;
|
||||||
|
workflowName?: string;
|
||||||
|
status: ExecutionStatus;
|
||||||
|
/** Présent uniquement via GET /executions/:id */
|
||||||
|
data?: ExecutionResultData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Paramètres de filtrage acceptés par l'endpoint GET /executions */
|
||||||
|
export interface FetchExecutionsParams {
|
||||||
|
/** Nombre max de résultats à retourner */
|
||||||
|
limit?: number;
|
||||||
|
/** Filtre par statut d'exécution */
|
||||||
|
status?: ExecutionStatus;
|
||||||
|
/** Filtre par identifiant de workflow */
|
||||||
|
workflowId?: string;
|
||||||
|
/** Curseur opaque de pagination (valeur nextCursor de la réponse précédente) */
|
||||||
|
cursor?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère l'historique des exécutions avec filtres optionnels.
|
||||||
|
*
|
||||||
|
* @param params - Filtres : limit, status, workflowId, cursor
|
||||||
|
* @returns Réponse paginée avec les exécutions et le curseur suivant
|
||||||
|
*/
|
||||||
|
export const fetchExecutions = async (
|
||||||
|
params: FetchExecutionsParams = {}
|
||||||
|
): Promise<ApiListResponse<Execution>> => {
|
||||||
|
const response = await apiClient.get<ApiListResponse<Execution>>('/api/v1/executions', {
|
||||||
|
params,
|
||||||
|
});
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère les logs complets d'une exécution spécifique.
|
||||||
|
* Inclut les données de chaque nœud (champ `data`), absent dans la liste.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant de l'exécution
|
||||||
|
* @returns Exécution complète avec données de nœuds
|
||||||
|
*/
|
||||||
|
export const fetchExecutionById = async (id: string): Promise<Execution> => {
|
||||||
|
const response = await apiClient.get<Execution>(`/api/v1/executions/${id}`);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime une exécution de l'historique n8n.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant de l'exécution à supprimer
|
||||||
|
*/
|
||||||
|
export const deleteExecution = async (id: string): Promise<void> => {
|
||||||
|
await apiClient.delete(`/api/v1/executions/${id}`);
|
||||||
|
};
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
import { apiClient } from './client';
|
||||||
|
|
||||||
|
/** Représente un nœud dans un workflow n8n */
|
||||||
|
export interface WorkflowNode {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
type: string;
|
||||||
|
position: [number, number];
|
||||||
|
parameters: Record<string, unknown>;
|
||||||
|
typeVersion?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tag associé à un workflow */
|
||||||
|
export interface WorkflowTag {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Représente un workflow complet tel que retourné par l'API n8n v1.
|
||||||
|
* Les champs `nodes` et `connections` sont présents dans les réponses détaillées.
|
||||||
|
*/
|
||||||
|
export interface Workflow {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
active: boolean;
|
||||||
|
createdAt: string;
|
||||||
|
updatedAt: string;
|
||||||
|
nodes: WorkflowNode[];
|
||||||
|
connections: Record<string, unknown>;
|
||||||
|
settings?: Record<string, unknown>;
|
||||||
|
tags?: WorkflowTag[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Réponse paginée standard de l'API n8n.
|
||||||
|
* nextCursor est null si on est sur la dernière page.
|
||||||
|
*/
|
||||||
|
export interface ApiListResponse<T> {
|
||||||
|
data: T[];
|
||||||
|
nextCursor: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la liste complète des workflows de l'instance n8n.
|
||||||
|
*
|
||||||
|
* @returns Tableau de tous les workflows (actifs et inactifs)
|
||||||
|
* @throws AxiosError — géré par l'intercepteur, remonte via errorHandler
|
||||||
|
*/
|
||||||
|
export const fetchWorkflows = async (): Promise<Workflow[]> => {
|
||||||
|
const response = await apiClient.get<ApiListResponse<Workflow>>('/api/v1/workflows');
|
||||||
|
return response.data.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère le détail complet d'un workflow, incluant ses nœuds et connexions.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow
|
||||||
|
* @returns Workflow avec tous ses détails
|
||||||
|
*/
|
||||||
|
export const fetchWorkflowById = async (id: string): Promise<Workflow> => {
|
||||||
|
const response = await apiClient.get<Workflow>(`/api/v1/workflows/${id}`);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Active un workflow : il répondra désormais à ses déclencheurs.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow à activer
|
||||||
|
* @returns Workflow mis à jour avec active = true
|
||||||
|
*/
|
||||||
|
export const activateWorkflow = async (id: string): Promise<Workflow> => {
|
||||||
|
const response = await apiClient.post<Workflow>(`/api/v1/workflows/${id}/activate`);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Désactive un workflow : ses déclencheurs sont mis en veille.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow à désactiver
|
||||||
|
* @returns Workflow mis à jour avec active = false
|
||||||
|
*/
|
||||||
|
export const deactivateWorkflow = async (id: string): Promise<Workflow> => {
|
||||||
|
const response = await apiClient.post<Workflow>(`/api/v1/workflows/${id}/deactivate`);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Paramètres optionnels pour le déclenchement manuel d'un workflow */
|
||||||
|
export interface RunWorkflowParams {
|
||||||
|
/** Données injectées dans le nœud de démarrage manuel */
|
||||||
|
workflowData?: Record<string, unknown>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Déclenche manuellement l'exécution d'un workflow.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow à déclencher
|
||||||
|
* @param params - Données optionnelles d'entrée
|
||||||
|
* @returns Identifiant de l'exécution créée
|
||||||
|
*/
|
||||||
|
export const runWorkflow = async (
|
||||||
|
id: string,
|
||||||
|
params?: RunWorkflowParams
|
||||||
|
): Promise<{ executionId: string }> => {
|
||||||
|
const response = await apiClient.post<{ executionId: string }>(
|
||||||
|
`/api/v1/workflows/${id}/run`,
|
||||||
|
params ?? {}
|
||||||
|
);
|
||||||
|
return response.data;
|
||||||
|
};
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { View, StyleSheet } from 'react-native';
|
||||||
|
import { Card, Text, IconButton, useTheme } from 'react-native-paper';
|
||||||
|
import { Execution } from '../api/executions';
|
||||||
|
import StatusBadge from './StatusBadge';
|
||||||
|
import { formatShortDate, formatDuration, formatMode } from '../utils/formatters';
|
||||||
|
|
||||||
|
interface ExecutionCardProps {
|
||||||
|
execution: Execution;
|
||||||
|
/**
|
||||||
|
* Navigue vers les logs complets de cette exécution.
|
||||||
|
* Déclenche router.push('/execution/:id') dans ExecutionsScreen.
|
||||||
|
*/
|
||||||
|
onViewLogs: (id: string) => void;
|
||||||
|
/**
|
||||||
|
* Supprime l'exécution via le hook useExecutions.
|
||||||
|
*/
|
||||||
|
onDelete: (id: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Carte représentant une exécution dans la liste historique.
|
||||||
|
* Affiche : nom du workflow, badge de statut, mode de déclenchement, durée et date.
|
||||||
|
* Les actions (logs, suppression) sont déléguées aux callbacks.
|
||||||
|
*/
|
||||||
|
const ExecutionCard: React.FC<ExecutionCardProps> = ({ execution, onViewLogs, onDelete }) => {
|
||||||
|
const theme = useTheme();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card style={[styles.card, { backgroundColor: theme.colors.surface }]}>
|
||||||
|
<Card.Content>
|
||||||
|
{/* En-tête : nom du workflow et badge de statut */}
|
||||||
|
<View style={styles.header}>
|
||||||
|
<Text
|
||||||
|
variant="titleSmall"
|
||||||
|
numberOfLines={1}
|
||||||
|
style={[styles.workflowName, { color: theme.colors.onSurface }]}
|
||||||
|
>
|
||||||
|
{execution.workflowName ?? `Workflow ${execution.workflowId}`}
|
||||||
|
</Text>
|
||||||
|
<StatusBadge status={execution.status} size="small" />
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Métadonnées : mode de déclenchement, durée, date */}
|
||||||
|
<View style={styles.meta}>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{formatMode(execution.mode)}
|
||||||
|
</Text>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{formatDuration(execution.startedAt, execution.stoppedAt)}
|
||||||
|
</Text>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{formatShortDate(execution.startedAt)}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
</Card.Content>
|
||||||
|
|
||||||
|
{/* Actions : consulter les logs et supprimer */}
|
||||||
|
<Card.Actions style={styles.actions}>
|
||||||
|
<IconButton
|
||||||
|
icon="text-box-outline"
|
||||||
|
size={20}
|
||||||
|
iconColor={theme.colors.primary}
|
||||||
|
onPress={() => onViewLogs(execution.id)}
|
||||||
|
accessibilityLabel="Voir les logs de cette exécution"
|
||||||
|
/>
|
||||||
|
<IconButton
|
||||||
|
icon="delete-outline"
|
||||||
|
size={20}
|
||||||
|
iconColor={theme.colors.error}
|
||||||
|
onPress={() => onDelete(execution.id)}
|
||||||
|
accessibilityLabel="Supprimer cette exécution"
|
||||||
|
/>
|
||||||
|
</Card.Actions>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
card: {
|
||||||
|
marginHorizontal: 16,
|
||||||
|
marginVertical: 5,
|
||||||
|
elevation: 1,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
marginBottom: 6,
|
||||||
|
},
|
||||||
|
workflowName: {
|
||||||
|
flex: 1,
|
||||||
|
marginRight: 8,
|
||||||
|
fontWeight: '500',
|
||||||
|
},
|
||||||
|
meta: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
paddingRight: 4,
|
||||||
|
paddingBottom: 2,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default ExecutionCard;
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
import React, { useEffect, useRef } from 'react';
|
||||||
|
import { View, Animated, StyleSheet, ViewStyle } from 'react-native';
|
||||||
|
|
||||||
|
interface SkeletonItemProps {
|
||||||
|
width?: number | `${number}%`;
|
||||||
|
height?: number;
|
||||||
|
borderRadius?: number;
|
||||||
|
style?: ViewStyle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bloc de squelette animé avec effet de pulsation (shimmer).
|
||||||
|
* Composant interne utilisé par SkeletonLoader pour construire les cartes placeholder.
|
||||||
|
*/
|
||||||
|
const SkeletonItem: React.FC<SkeletonItemProps> = ({
|
||||||
|
width = '100%',
|
||||||
|
height = 16,
|
||||||
|
borderRadius = 4,
|
||||||
|
style,
|
||||||
|
}) => {
|
||||||
|
const opacity = useRef(new Animated.Value(0.3)).current;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
/** Boucle d'animation : alterne entre 30% et 70% d'opacité */
|
||||||
|
const animation = Animated.loop(
|
||||||
|
Animated.sequence([
|
||||||
|
Animated.timing(opacity, {
|
||||||
|
toValue: 0.7,
|
||||||
|
duration: 800,
|
||||||
|
useNativeDriver: true,
|
||||||
|
}),
|
||||||
|
Animated.timing(opacity, {
|
||||||
|
toValue: 0.3,
|
||||||
|
duration: 800,
|
||||||
|
useNativeDriver: true,
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
);
|
||||||
|
animation.start();
|
||||||
|
return () => animation.stop();
|
||||||
|
}, [opacity]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Animated.View
|
||||||
|
style={[
|
||||||
|
styles.skeleton,
|
||||||
|
{ width: width as number, height, borderRadius, opacity },
|
||||||
|
style,
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
interface SkeletonLoaderProps {
|
||||||
|
/** Nombre de cartes placeholder à afficher pendant le chargement initial */
|
||||||
|
count?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affiche des cartes placeholder animées pendant le chargement des données.
|
||||||
|
* Simule la structure d'une WorkflowCard/ExecutionCard pour éviter le layout shift
|
||||||
|
* et indiquer à l'utilisateur que du contenu arrive.
|
||||||
|
*/
|
||||||
|
const SkeletonLoader: React.FC<SkeletonLoaderProps> = ({ count = 5 }) => {
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
{Array.from({ length: count }).map((_, index) => (
|
||||||
|
<View key={index} style={styles.card}>
|
||||||
|
<SkeletonItem width="60%" height={18} style={{ marginBottom: 8 }} />
|
||||||
|
<SkeletonItem width="85%" height={12} style={{ marginBottom: 6 }} />
|
||||||
|
<SkeletonItem width="40%" height={12} />
|
||||||
|
</View>
|
||||||
|
))}
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
card: {
|
||||||
|
backgroundColor: '#1E1E1E',
|
||||||
|
marginHorizontal: 16,
|
||||||
|
marginVertical: 6,
|
||||||
|
padding: 16,
|
||||||
|
borderRadius: 12,
|
||||||
|
},
|
||||||
|
skeleton: {
|
||||||
|
backgroundColor: '#2C2C2C',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default SkeletonLoader;
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { View, StyleSheet } from 'react-native';
|
||||||
|
import { Text } from 'react-native-paper';
|
||||||
|
import { ExecutionStatus } from '../api/executions';
|
||||||
|
import { formatStatus } from '../utils/formatters';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Couleurs de fond des badges — optimisées pour le thème sombre MD3.
|
||||||
|
* Les teintes foncées gardent le contraste sans agresser l'œil.
|
||||||
|
*/
|
||||||
|
const STATUS_BG_COLORS: Record<ExecutionStatus, string> = {
|
||||||
|
success: '#1B5E20',
|
||||||
|
error: '#7F0000',
|
||||||
|
waiting: '#E65100',
|
||||||
|
running: '#0D47A1',
|
||||||
|
canceled: '#424242',
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Couleurs de texte assorties à chaque fond */
|
||||||
|
const STATUS_TEXT_COLORS: Record<ExecutionStatus, string> = {
|
||||||
|
success: '#A5D6A7',
|
||||||
|
error: '#EF9A9A',
|
||||||
|
waiting: '#FFCC80',
|
||||||
|
running: '#90CAF9',
|
||||||
|
canceled: '#BDBDBD',
|
||||||
|
};
|
||||||
|
|
||||||
|
interface StatusBadgeProps {
|
||||||
|
status: ExecutionStatus;
|
||||||
|
/**
|
||||||
|
* Taille du badge :
|
||||||
|
* - small : listes denses (ExecutionCard)
|
||||||
|
* - default : vue détail (LogsScreen)
|
||||||
|
*/
|
||||||
|
size?: 'small' | 'default';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Badge coloré représentant le statut d'une exécution n8n.
|
||||||
|
* Utilise les couleurs MD3 dark pour rester lisible sur les surfaces sombres.
|
||||||
|
*/
|
||||||
|
const StatusBadge: React.FC<StatusBadgeProps> = ({ status, size = 'default' }) => {
|
||||||
|
const backgroundColor = STATUS_BG_COLORS[status] ?? '#424242';
|
||||||
|
const textColor = STATUS_TEXT_COLORS[status] ?? '#BDBDBD';
|
||||||
|
const fontSize = size === 'small' ? 10 : 12;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={[styles.badge, { backgroundColor }]}>
|
||||||
|
<Text style={[styles.text, { color: textColor, fontSize }]}>
|
||||||
|
{formatStatus(status)}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
badge: {
|
||||||
|
paddingHorizontal: 8,
|
||||||
|
paddingVertical: 3,
|
||||||
|
borderRadius: 12,
|
||||||
|
alignSelf: 'flex-start',
|
||||||
|
},
|
||||||
|
text: {
|
||||||
|
fontWeight: '600',
|
||||||
|
letterSpacing: 0.3,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default StatusBadge;
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { View, StyleSheet } from 'react-native';
|
||||||
|
import { Card, Text, Switch, IconButton, useTheme } from 'react-native-paper';
|
||||||
|
import { Workflow } from '../api/workflows';
|
||||||
|
import { formatRelativeDate } from '../utils/formatters';
|
||||||
|
|
||||||
|
interface WorkflowCardProps {
|
||||||
|
workflow: Workflow;
|
||||||
|
/**
|
||||||
|
* Appelé quand l'utilisateur bascule le switch actif/inactif.
|
||||||
|
* Le hook useWorkflows gère l'appel API et la mise à jour d'état.
|
||||||
|
*/
|
||||||
|
onToggle: (workflow: Workflow) => void;
|
||||||
|
/**
|
||||||
|
* Appelé quand l'utilisateur appuie sur le bouton lecture.
|
||||||
|
* Déclenche une exécution manuelle du workflow.
|
||||||
|
*/
|
||||||
|
onRun: (id: string) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Carte représentant un workflow dans la liste WorkflowsScreen.
|
||||||
|
* Affiche : nom, statut actif (switch), date de modification, tags et bouton run.
|
||||||
|
* Le toggle et le run déclenchent des callbacks — la carte n'appelle jamais l'API directement.
|
||||||
|
*/
|
||||||
|
const WorkflowCard: React.FC<WorkflowCardProps> = ({ workflow, onToggle, onRun }) => {
|
||||||
|
const theme = useTheme();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card style={[styles.card, { backgroundColor: theme.colors.surface }]}>
|
||||||
|
<Card.Content style={styles.content}>
|
||||||
|
{/* En-tête : nom du workflow et switch actif/inactif */}
|
||||||
|
<View style={styles.header}>
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
numberOfLines={2}
|
||||||
|
style={[styles.name, { color: theme.colors.onSurface }]}
|
||||||
|
>
|
||||||
|
{workflow.name}
|
||||||
|
</Text>
|
||||||
|
<Switch
|
||||||
|
value={workflow.active}
|
||||||
|
onValueChange={() => onToggle(workflow)}
|
||||||
|
color={theme.colors.primary}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Date de dernière modification */}
|
||||||
|
<Text
|
||||||
|
variant="bodySmall"
|
||||||
|
style={{ color: theme.colors.onSurfaceVariant, marginTop: 4 }}
|
||||||
|
>
|
||||||
|
Modifié {formatRelativeDate(workflow.updatedAt)}
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{/* Tags optionnels */}
|
||||||
|
{workflow.tags && workflow.tags.length > 0 && (
|
||||||
|
<View style={styles.tags}>
|
||||||
|
{workflow.tags.map((tag) => (
|
||||||
|
<View
|
||||||
|
key={tag.id}
|
||||||
|
style={[styles.tag, { backgroundColor: theme.colors.surfaceVariant }]}
|
||||||
|
>
|
||||||
|
<Text variant="labelSmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{tag.name}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
</Card.Content>
|
||||||
|
|
||||||
|
{/* Bouton de déclenchement manuel */}
|
||||||
|
<Card.Actions style={styles.actions}>
|
||||||
|
<IconButton
|
||||||
|
icon="play-circle-outline"
|
||||||
|
size={22}
|
||||||
|
iconColor={theme.colors.primary}
|
||||||
|
onPress={() => onRun(workflow.id)}
|
||||||
|
accessibilityLabel="Déclencher manuellement ce workflow"
|
||||||
|
/>
|
||||||
|
</Card.Actions>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
card: {
|
||||||
|
marginHorizontal: 16,
|
||||||
|
marginVertical: 6,
|
||||||
|
elevation: 2,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
paddingBottom: 4,
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
},
|
||||||
|
name: {
|
||||||
|
flex: 1,
|
||||||
|
marginRight: 8,
|
||||||
|
fontWeight: '600',
|
||||||
|
},
|
||||||
|
tags: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
flexWrap: 'wrap',
|
||||||
|
marginTop: 8,
|
||||||
|
gap: 6,
|
||||||
|
},
|
||||||
|
tag: {
|
||||||
|
paddingHorizontal: 8,
|
||||||
|
paddingVertical: 2,
|
||||||
|
borderRadius: 8,
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
justifyContent: 'flex-end',
|
||||||
|
paddingRight: 8,
|
||||||
|
paddingBottom: 4,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default WorkflowCard;
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
import { useState, useCallback } from 'react';
|
||||||
|
import { useAppStore } from '../store/appStore';
|
||||||
|
import {
|
||||||
|
fetchExecutions,
|
||||||
|
fetchExecutionById,
|
||||||
|
deleteExecution,
|
||||||
|
Execution,
|
||||||
|
ExecutionStatus,
|
||||||
|
FetchExecutionsParams,
|
||||||
|
} from '../api/executions';
|
||||||
|
import { usePolling } from './usePolling';
|
||||||
|
|
||||||
|
/** Options de filtrage passées au hook à l'initialisation */
|
||||||
|
interface UseExecutionsOptions {
|
||||||
|
/** Nombre max d'exécutions à charger */
|
||||||
|
limit?: number;
|
||||||
|
/** Filtre de statut initial */
|
||||||
|
statusFilter?: ExecutionStatus;
|
||||||
|
/** Restreindre aux exécutions d'un workflow spécifique */
|
||||||
|
workflowId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Interface des valeurs et actions exposées par le hook */
|
||||||
|
interface UseExecutionsResult {
|
||||||
|
executions: Execution[];
|
||||||
|
isLoading: boolean;
|
||||||
|
isRefreshing: boolean;
|
||||||
|
/** Exécution chargée en détail (avec logs de nœuds) */
|
||||||
|
selectedExecution: Execution | null;
|
||||||
|
/** Recharge la liste (pull-to-refresh) */
|
||||||
|
refresh: () => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Charge les logs complets d'une exécution pour l'écran de détail.
|
||||||
|
* Peuple selectedExecution.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant de l'exécution
|
||||||
|
*/
|
||||||
|
loadExecutionDetail: (id: string) => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Supprime une exécution de l'historique et la retire de l'état local.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant de l'exécution à supprimer
|
||||||
|
*/
|
||||||
|
removeExecution: (id: string) => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Change le filtre de statut actif et relance le chargement.
|
||||||
|
*
|
||||||
|
* @param status - Statut cible ou undefined pour tout afficher
|
||||||
|
*/
|
||||||
|
setStatusFilter: (status: ExecutionStatus | undefined) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook de gestion des exécutions : listing avec filtres, polling, détail et suppression.
|
||||||
|
* Sépare clairement la liste (vue Executions) du détail (vue Logs).
|
||||||
|
*/
|
||||||
|
export const useExecutions = (options: UseExecutionsOptions = {}): UseExecutionsResult => {
|
||||||
|
const { preferences, config } = useAppStore();
|
||||||
|
const [executions, setExecutions] = useState<Execution[]>([]);
|
||||||
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
|
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||||
|
const [selectedExecution, setSelectedExecution] = useState<Execution | null>(null);
|
||||||
|
const [statusFilter, setStatusFilter] = useState<ExecutionStatus | undefined>(
|
||||||
|
options.statusFilter
|
||||||
|
);
|
||||||
|
|
||||||
|
/** Charge la liste avec les filtres courants */
|
||||||
|
const loadExecutions = useCallback(async (): Promise<void> => {
|
||||||
|
const params: FetchExecutionsParams = {
|
||||||
|
limit: options.limit ?? 50,
|
||||||
|
...(statusFilter !== undefined && { status: statusFilter }),
|
||||||
|
...(options.workflowId && { workflowId: options.workflowId }),
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = await fetchExecutions(params);
|
||||||
|
setExecutions(result.data);
|
||||||
|
} catch {
|
||||||
|
// Géré par l'intercepteur Axios
|
||||||
|
} finally {
|
||||||
|
setIsLoading(false);
|
||||||
|
}
|
||||||
|
}, [options.limit, options.workflowId, statusFilter]);
|
||||||
|
|
||||||
|
/** Polling automatique — désactivé si l'app n'est pas encore configurée */
|
||||||
|
usePolling({
|
||||||
|
callback: loadExecutions,
|
||||||
|
interval: preferences.pollingInterval,
|
||||||
|
enabled: config.isConfigured,
|
||||||
|
immediate: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const refresh = useCallback(async (): Promise<void> => {
|
||||||
|
setIsRefreshing(true);
|
||||||
|
try {
|
||||||
|
await loadExecutions();
|
||||||
|
} finally {
|
||||||
|
setIsRefreshing(false);
|
||||||
|
}
|
||||||
|
}, [loadExecutions]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Charge les logs détaillés d'une exécution.
|
||||||
|
* Appelle GET /executions/:id qui inclut le champ `data` avec les nœuds.
|
||||||
|
*/
|
||||||
|
const loadExecutionDetail = useCallback(async (id: string): Promise<void> => {
|
||||||
|
try {
|
||||||
|
const detail = await fetchExecutionById(id);
|
||||||
|
setSelectedExecution(detail);
|
||||||
|
} catch {
|
||||||
|
// Géré par l'intercepteur Axios
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime une exécution côté serveur et la retire optimistiquement de l'état local.
|
||||||
|
*/
|
||||||
|
const removeExecution = useCallback(async (id: string): Promise<void> => {
|
||||||
|
try {
|
||||||
|
await deleteExecution(id);
|
||||||
|
setExecutions((prev) => prev.filter((e) => e.id !== id));
|
||||||
|
} catch {
|
||||||
|
// Géré par l'intercepteur Axios
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return {
|
||||||
|
executions,
|
||||||
|
isLoading,
|
||||||
|
isRefreshing,
|
||||||
|
selectedExecution,
|
||||||
|
refresh,
|
||||||
|
loadExecutionDetail,
|
||||||
|
removeExecution,
|
||||||
|
setStatusFilter,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import { useEffect, useRef, useCallback } from 'react';
|
||||||
|
|
||||||
|
/** Options de configuration du hook de polling générique */
|
||||||
|
interface UsePollingOptions {
|
||||||
|
/** Callback exécuté à chaque intervalle (peut être async) */
|
||||||
|
callback: () => void | Promise<void>;
|
||||||
|
/** Intervalle entre chaque appel en millisecondes */
|
||||||
|
interval: number;
|
||||||
|
/** Si false, le polling est suspendu sans démonter le hook */
|
||||||
|
enabled?: boolean;
|
||||||
|
/** Si true, déclenche le callback immédiatement au montage sans attendre le premier intervalle */
|
||||||
|
immediate?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook générique de polling configurable.
|
||||||
|
* Gère automatiquement le nettoyage de l'intervalle au démontage du composant.
|
||||||
|
* Le callback est mémorisé par ref pour éviter de redémarrer le polling à chaque render.
|
||||||
|
*
|
||||||
|
* @returns stopPolling - Fonction pour arrêter manuellement le polling
|
||||||
|
*/
|
||||||
|
export const usePolling = ({
|
||||||
|
callback,
|
||||||
|
interval,
|
||||||
|
enabled = true,
|
||||||
|
immediate = true,
|
||||||
|
}: UsePollingOptions): { stopPolling: () => void } => {
|
||||||
|
/** Ref sur le callback pour éviter de re-créer l'intervalle si la fonction change */
|
||||||
|
const callbackRef = useRef(callback);
|
||||||
|
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
|
||||||
|
|
||||||
|
/** Synchronise la ref à chaque render sans déclencher d'effet */
|
||||||
|
useEffect(() => {
|
||||||
|
callbackRef.current = callback;
|
||||||
|
}, [callback]);
|
||||||
|
|
||||||
|
/** Arrête proprement l'intervalle actif */
|
||||||
|
const stopPolling = useCallback(() => {
|
||||||
|
if (intervalRef.current) {
|
||||||
|
clearInterval(intervalRef.current);
|
||||||
|
intervalRef.current = null;
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!enabled) {
|
||||||
|
stopPolling();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Appel immédiat au montage si demandé (évite l'attente du premier intervalle)
|
||||||
|
if (immediate) {
|
||||||
|
void callbackRef.current();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mise en place du polling régulier
|
||||||
|
intervalRef.current = setInterval(() => {
|
||||||
|
void callbackRef.current();
|
||||||
|
}, interval);
|
||||||
|
|
||||||
|
// Nettoyage automatique au démontage
|
||||||
|
return stopPolling;
|
||||||
|
}, [enabled, interval, immediate, stopPolling]);
|
||||||
|
|
||||||
|
return { stopPolling };
|
||||||
|
};
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
import { useState, useCallback } from 'react';
|
||||||
|
import { useAppStore } from '../store/appStore';
|
||||||
|
import {
|
||||||
|
fetchWorkflows,
|
||||||
|
activateWorkflow,
|
||||||
|
deactivateWorkflow,
|
||||||
|
runWorkflow,
|
||||||
|
Workflow,
|
||||||
|
} from '../api/workflows';
|
||||||
|
import { usePolling } from './usePolling';
|
||||||
|
|
||||||
|
/** Interface des valeurs et actions exposées par le hook */
|
||||||
|
interface UseWorkflowsResult {
|
||||||
|
workflows: Workflow[];
|
||||||
|
isLoading: boolean;
|
||||||
|
isRefreshing: boolean;
|
||||||
|
/**
|
||||||
|
* Recharge manuellement la liste des workflows.
|
||||||
|
* Utilisé pour le pull-to-refresh.
|
||||||
|
*/
|
||||||
|
refresh: () => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Bascule le statut actif/inactif d'un workflow.
|
||||||
|
* Met à jour l'état local après confirmation serveur.
|
||||||
|
*
|
||||||
|
* @param workflow - Workflow à basculer
|
||||||
|
*/
|
||||||
|
toggleWorkflow: (workflow: Workflow) => Promise<void>;
|
||||||
|
/**
|
||||||
|
* Déclenche manuellement l'exécution d'un workflow.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow à déclencher
|
||||||
|
*/
|
||||||
|
triggerWorkflow: (id: string) => Promise<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hook de gestion des workflows : chargement, polling automatique et actions.
|
||||||
|
* Délègue la gestion des erreurs à l'intercepteur Axios (errorHandler).
|
||||||
|
* Les screens ne font pas d'appels API directs — tout passe par ce hook.
|
||||||
|
*/
|
||||||
|
export const useWorkflows = (): UseWorkflowsResult => {
|
||||||
|
const { preferences, config } = useAppStore();
|
||||||
|
const [workflows, setWorkflows] = useState<Workflow[]>([]);
|
||||||
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
|
const [isRefreshing, setIsRefreshing] = useState(false);
|
||||||
|
|
||||||
|
/** Charge la liste des workflows depuis la couche API */
|
||||||
|
const loadWorkflows = useCallback(async (): Promise<void> => {
|
||||||
|
try {
|
||||||
|
const data = await fetchWorkflows();
|
||||||
|
setWorkflows(data);
|
||||||
|
} catch {
|
||||||
|
// Erreur déjà remontée via l'intercepteur Axios → toast affiché
|
||||||
|
} finally {
|
||||||
|
setIsLoading(false);
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Polling automatique déclenché uniquement si l'app est configurée.
|
||||||
|
* L'intervalle est lu depuis les préférences utilisateur (configurable dans Settings).
|
||||||
|
*/
|
||||||
|
usePolling({
|
||||||
|
callback: loadWorkflows,
|
||||||
|
interval: preferences.pollingInterval,
|
||||||
|
enabled: config.isConfigured,
|
||||||
|
immediate: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
/** Pull-to-refresh : indicateur distinct du chargement initial */
|
||||||
|
const refresh = useCallback(async (): Promise<void> => {
|
||||||
|
setIsRefreshing(true);
|
||||||
|
try {
|
||||||
|
await loadWorkflows();
|
||||||
|
} finally {
|
||||||
|
setIsRefreshing(false);
|
||||||
|
}
|
||||||
|
}, [loadWorkflows]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bascule actif/inactif d'un workflow.
|
||||||
|
* Met à jour l'entrée correspondante dans l'état local après retour serveur.
|
||||||
|
*/
|
||||||
|
const toggleWorkflow = useCallback(async (workflow: Workflow): Promise<void> => {
|
||||||
|
try {
|
||||||
|
const updated = workflow.active
|
||||||
|
? await deactivateWorkflow(workflow.id)
|
||||||
|
: await activateWorkflow(workflow.id);
|
||||||
|
|
||||||
|
// Mise à jour ciblée sans recharger toute la liste
|
||||||
|
setWorkflows((prev) => prev.map((w) => (w.id === updated.id ? updated : w)));
|
||||||
|
} catch {
|
||||||
|
// Géré par l'intercepteur Axios
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
const triggerWorkflow = useCallback(async (id: string): Promise<void> => {
|
||||||
|
try {
|
||||||
|
await runWorkflow(id);
|
||||||
|
} catch {
|
||||||
|
// Géré par l'intercepteur Axios
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return {
|
||||||
|
workflows,
|
||||||
|
isLoading,
|
||||||
|
isRefreshing,
|
||||||
|
refresh,
|
||||||
|
toggleWorkflow,
|
||||||
|
triggerWorkflow,
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -0,0 +1,204 @@
|
|||||||
|
import React, { useMemo } from 'react';
|
||||||
|
import { ScrollView, View, StyleSheet, RefreshControl } from 'react-native';
|
||||||
|
import { Text, Card, ActivityIndicator, useTheme } from 'react-native-paper';
|
||||||
|
import { useWorkflows } from '../hooks/useWorkflows';
|
||||||
|
import { useExecutions } from '../hooks/useExecutions';
|
||||||
|
import StatusBadge from '../components/StatusBadge';
|
||||||
|
import { formatShortDate } from '../utils/formatters';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Carte de métrique simple pour le tableau de bord.
|
||||||
|
* Affiche un chiffre clé avec un label et un sous-titre coloré.
|
||||||
|
*/
|
||||||
|
interface MetricCardProps {
|
||||||
|
label: string;
|
||||||
|
value: string | number;
|
||||||
|
subtitle: string;
|
||||||
|
valueColor: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const MetricCard: React.FC<MetricCardProps> = ({ label, value, subtitle, valueColor }) => {
|
||||||
|
const theme = useTheme();
|
||||||
|
return (
|
||||||
|
<Card style={[styles.metricCard, { backgroundColor: theme.colors.surface }]}>
|
||||||
|
<Card.Content>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{label}
|
||||||
|
</Text>
|
||||||
|
<Text variant="headlineMedium" style={{ color: valueColor, fontWeight: '700' }}>
|
||||||
|
{value}
|
||||||
|
</Text>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{subtitle}
|
||||||
|
</Text>
|
||||||
|
</Card.Content>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran principal — tableau de bord.
|
||||||
|
* Affiche les métriques clés (total workflows, taux de succès)
|
||||||
|
* et les 5 dernières exécutions avec leur statut.
|
||||||
|
* Supporte le pull-to-refresh via useWorkflows.
|
||||||
|
*/
|
||||||
|
const DashboardScreen: React.FC = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const { workflows, isLoading: wLoading, isRefreshing, refresh } = useWorkflows();
|
||||||
|
const { executions, isLoading: eLoading } = useExecutions({ limit: 5 });
|
||||||
|
|
||||||
|
/** Métriques calculées localement depuis l'état des hooks */
|
||||||
|
const metrics = useMemo(() => {
|
||||||
|
const successCount = executions.filter((e) => e.status === 'success').length;
|
||||||
|
return {
|
||||||
|
total: workflows.length,
|
||||||
|
active: workflows.filter((w) => w.active).length,
|
||||||
|
successRate:
|
||||||
|
executions.length > 0
|
||||||
|
? Math.round((successCount / executions.length) * 100)
|
||||||
|
: 0,
|
||||||
|
};
|
||||||
|
}, [workflows, executions]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Couleur du taux de succès : vert > 80%, orange > 50%, rouge sinon.
|
||||||
|
* Donne un indicateur visuel immédiat de la santé des workflows.
|
||||||
|
*/
|
||||||
|
const successRateColor =
|
||||||
|
metrics.successRate >= 80
|
||||||
|
? '#A5D6A7'
|
||||||
|
: metrics.successRate >= 50
|
||||||
|
? '#FFCC80'
|
||||||
|
: '#EF9A9A';
|
||||||
|
|
||||||
|
const isLoading = wLoading || eLoading;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView
|
||||||
|
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||||
|
refreshControl={
|
||||||
|
<RefreshControl
|
||||||
|
refreshing={isRefreshing}
|
||||||
|
onRefresh={refresh}
|
||||||
|
tintColor={theme.colors.primary}
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Text
|
||||||
|
variant="headlineSmall"
|
||||||
|
style={[styles.title, { color: theme.colors.onBackground }]}
|
||||||
|
>
|
||||||
|
Tableau de bord
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{isLoading ? (
|
||||||
|
<ActivityIndicator style={styles.loader} color={theme.colors.primary} />
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
{/* Métriques rapides */}
|
||||||
|
<View style={styles.metricsRow}>
|
||||||
|
<MetricCard
|
||||||
|
label="Workflows"
|
||||||
|
value={metrics.total}
|
||||||
|
subtitle={`${metrics.active} actifs`}
|
||||||
|
valueColor={theme.colors.primary}
|
||||||
|
/>
|
||||||
|
<MetricCard
|
||||||
|
label="Taux de succès"
|
||||||
|
value={`${metrics.successRate}%`}
|
||||||
|
subtitle="5 dernières exec."
|
||||||
|
valueColor={successRateColor}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Section dernières exécutions */}
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||||
|
>
|
||||||
|
Exécutions récentes
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{executions.length === 0 ? (
|
||||||
|
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||||
|
Aucune exécution récente.
|
||||||
|
</Text>
|
||||||
|
) : (
|
||||||
|
executions.slice(0, 5).map((exec) => (
|
||||||
|
<Card
|
||||||
|
key={exec.id}
|
||||||
|
style={[styles.execCard, { backgroundColor: theme.colors.surface }]}
|
||||||
|
>
|
||||||
|
<Card.Content style={styles.execHeader}>
|
||||||
|
<Text
|
||||||
|
variant="bodyMedium"
|
||||||
|
numberOfLines={1}
|
||||||
|
style={{ color: theme.colors.onSurface, flex: 1, marginRight: 8 }}
|
||||||
|
>
|
||||||
|
{exec.workflowName ?? `Workflow ${exec.workflowId}`}
|
||||||
|
</Text>
|
||||||
|
<StatusBadge status={exec.status} size="small" />
|
||||||
|
</Card.Content>
|
||||||
|
<Card.Content style={styles.execMeta}>
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{formatShortDate(exec.startedAt)}
|
||||||
|
</Text>
|
||||||
|
</Card.Content>
|
||||||
|
</Card>
|
||||||
|
))
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
margin: 16,
|
||||||
|
fontWeight: '700',
|
||||||
|
},
|
||||||
|
loader: {
|
||||||
|
marginTop: 48,
|
||||||
|
},
|
||||||
|
metricsRow: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
marginHorizontal: 16,
|
||||||
|
gap: 12,
|
||||||
|
marginBottom: 8,
|
||||||
|
},
|
||||||
|
metricCard: {
|
||||||
|
flex: 1,
|
||||||
|
elevation: 2,
|
||||||
|
},
|
||||||
|
sectionTitle: {
|
||||||
|
marginHorizontal: 16,
|
||||||
|
marginTop: 20,
|
||||||
|
marginBottom: 8,
|
||||||
|
fontWeight: '600',
|
||||||
|
},
|
||||||
|
execCard: {
|
||||||
|
marginHorizontal: 16,
|
||||||
|
marginVertical: 4,
|
||||||
|
elevation: 1,
|
||||||
|
},
|
||||||
|
execHeader: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
paddingBottom: 4,
|
||||||
|
},
|
||||||
|
execMeta: {
|
||||||
|
paddingTop: 0,
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
textAlign: 'center',
|
||||||
|
marginTop: 24,
|
||||||
|
fontStyle: 'italic',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default DashboardScreen;
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { FlatList, StyleSheet, View } from 'react-native';
|
||||||
|
import { Text, Chip, Snackbar, useTheme } from 'react-native-paper';
|
||||||
|
import { useRouter } from 'expo-router';
|
||||||
|
import { useExecutions } from '../hooks/useExecutions';
|
||||||
|
import ExecutionCard from '../components/ExecutionCard';
|
||||||
|
import SkeletonLoader from '../components/SkeletonLoader';
|
||||||
|
import { ExecutionStatus } from '../api/executions';
|
||||||
|
|
||||||
|
/** Filtres de statut disponibles dans l'interface */
|
||||||
|
const STATUS_FILTERS: Array<{ label: string; value: ExecutionStatus | undefined }> = [
|
||||||
|
{ label: 'Tous', value: undefined },
|
||||||
|
{ label: 'Succès', value: 'success' },
|
||||||
|
{ label: 'Erreur', value: 'error' },
|
||||||
|
{ label: 'En cours', value: 'running' },
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran d'historique des exécutions.
|
||||||
|
* Permet de filtrer par statut via des chips et de naviguer vers
|
||||||
|
* les logs détaillés d'une exécution via Expo Router.
|
||||||
|
*/
|
||||||
|
const ExecutionsScreen: React.FC = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const router = useRouter();
|
||||||
|
const [activeFilter, setActiveFilter] = useState<ExecutionStatus | undefined>(undefined);
|
||||||
|
const [snackMessage, setSnackMessage] = useState('');
|
||||||
|
|
||||||
|
const {
|
||||||
|
executions,
|
||||||
|
isLoading,
|
||||||
|
isRefreshing,
|
||||||
|
refresh,
|
||||||
|
removeExecution,
|
||||||
|
setStatusFilter,
|
||||||
|
} = useExecutions({ limit: 50 });
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Change le filtre actif et notifie le hook pour relancer le fetch.
|
||||||
|
*
|
||||||
|
* @param value - Nouveau statut filtré, ou undefined pour tout afficher
|
||||||
|
*/
|
||||||
|
const handleFilterChange = (value: ExecutionStatus | undefined): void => {
|
||||||
|
setActiveFilter(value);
|
||||||
|
setStatusFilter(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supprime une exécution et affiche une confirmation.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant de l'exécution à supprimer
|
||||||
|
*/
|
||||||
|
const handleDelete = async (id: string): Promise<void> => {
|
||||||
|
await removeExecution(id);
|
||||||
|
setSnackMessage('Exécution supprimée');
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||||
|
{/* Barre de filtres de statut horizontale */}
|
||||||
|
<View style={styles.filterBar}>
|
||||||
|
{STATUS_FILTERS.map((filter) => (
|
||||||
|
<Chip
|
||||||
|
key={filter.label}
|
||||||
|
selected={activeFilter === filter.value}
|
||||||
|
onPress={() => handleFilterChange(filter.value)}
|
||||||
|
style={styles.chip}
|
||||||
|
compact
|
||||||
|
>
|
||||||
|
{filter.label}
|
||||||
|
</Chip>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{isLoading ? (
|
||||||
|
<SkeletonLoader count={8} />
|
||||||
|
) : (
|
||||||
|
<FlatList
|
||||||
|
data={executions}
|
||||||
|
keyExtractor={(item) => item.id}
|
||||||
|
renderItem={({ item }) => (
|
||||||
|
<ExecutionCard
|
||||||
|
execution={item}
|
||||||
|
onViewLogs={(id) => router.push(`/execution/${id}` as `/${string}`)}
|
||||||
|
onDelete={handleDelete}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
refreshing={isRefreshing}
|
||||||
|
onRefresh={refresh}
|
||||||
|
contentContainerStyle={styles.list}
|
||||||
|
ListEmptyComponent={
|
||||||
|
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||||
|
Aucune exécution trouvée.
|
||||||
|
</Text>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<Snackbar
|
||||||
|
visible={!!snackMessage}
|
||||||
|
onDismiss={() => setSnackMessage('')}
|
||||||
|
duration={2500}
|
||||||
|
>
|
||||||
|
{snackMessage}
|
||||||
|
</Snackbar>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
filterBar: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
paddingHorizontal: 16,
|
||||||
|
paddingVertical: 8,
|
||||||
|
gap: 8,
|
||||||
|
},
|
||||||
|
chip: {
|
||||||
|
height: 32,
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
paddingVertical: 4,
|
||||||
|
paddingBottom: 24,
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
textAlign: 'center',
|
||||||
|
marginTop: 48,
|
||||||
|
fontStyle: 'italic',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default ExecutionsScreen;
|
||||||
@@ -0,0 +1,207 @@
|
|||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { ScrollView, StyleSheet, View, ActivityIndicator } from 'react-native';
|
||||||
|
import { Text, Card, Divider, useTheme } from 'react-native-paper';
|
||||||
|
import { useLocalSearchParams } from 'expo-router';
|
||||||
|
import { useExecutions } from '../hooks/useExecutions';
|
||||||
|
import StatusBadge from '../components/StatusBadge';
|
||||||
|
import { formatShortDate, formatDuration, formatMode } from '../utils/formatters';
|
||||||
|
import { NodeExecutionData } from '../api/executions';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran de logs détaillés d'une exécution n8n.
|
||||||
|
* Reçoit l'identifiant de l'exécution via les paramètres de route Expo Router (/execution/:id).
|
||||||
|
* Charge puis affiche les données de chaque nœud exécuté, avec les erreurs éventuelles.
|
||||||
|
*/
|
||||||
|
const LogsScreen: React.FC = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const { id } = useLocalSearchParams<{ id: string }>();
|
||||||
|
const { selectedExecution, loadExecutionDetail } = useExecutions();
|
||||||
|
const [isLoading, setIsLoading] = useState(true);
|
||||||
|
|
||||||
|
/** Charge les logs détaillés dès que l'ID de route est disponible */
|
||||||
|
useEffect(() => {
|
||||||
|
if (id) {
|
||||||
|
loadExecutionDetail(id).finally(() => setIsLoading(false));
|
||||||
|
}
|
||||||
|
}, [id]);
|
||||||
|
|
||||||
|
if (isLoading) {
|
||||||
|
return (
|
||||||
|
<View style={[styles.centered, { backgroundColor: theme.colors.background }]}>
|
||||||
|
<ActivityIndicator color={theme.colors.primary} />
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!selectedExecution) {
|
||||||
|
return (
|
||||||
|
<View style={[styles.centered, { backgroundColor: theme.colors.background }]}>
|
||||||
|
<Text style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
Exécution introuvable ou données indisponibles.
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const runData = selectedExecution.data?.resultData?.runData ?? {};
|
||||||
|
const globalError = selectedExecution.data?.resultData?.error;
|
||||||
|
const nodeNames = Object.keys(runData);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView
|
||||||
|
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||||
|
contentContainerStyle={styles.content}
|
||||||
|
>
|
||||||
|
{/* En-tête : résumé de l'exécution */}
|
||||||
|
<Card style={[styles.headerCard, { backgroundColor: theme.colors.surface }]}>
|
||||||
|
<Card.Content>
|
||||||
|
<View style={styles.headerRow}>
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
style={{ color: theme.colors.onSurface, flex: 1, marginRight: 8 }}
|
||||||
|
numberOfLines={2}
|
||||||
|
>
|
||||||
|
{selectedExecution.workflowName ?? `Workflow ${selectedExecution.workflowId}`}
|
||||||
|
</Text>
|
||||||
|
<StatusBadge status={selectedExecution.status} />
|
||||||
|
</View>
|
||||||
|
<Text
|
||||||
|
variant="bodySmall"
|
||||||
|
style={{ color: theme.colors.onSurfaceVariant, marginTop: 6 }}
|
||||||
|
>
|
||||||
|
{formatMode(selectedExecution.mode)} ·{' '}
|
||||||
|
{formatShortDate(selectedExecution.startedAt)} ·{' '}
|
||||||
|
{formatDuration(selectedExecution.startedAt, selectedExecution.stoppedAt)}
|
||||||
|
</Text>
|
||||||
|
</Card.Content>
|
||||||
|
</Card>
|
||||||
|
|
||||||
|
{/* Erreur globale de l'exécution (niveau workflow) */}
|
||||||
|
{globalError && (
|
||||||
|
<Card style={[styles.errorCard, { backgroundColor: '#2C0000' }]}>
|
||||||
|
<Card.Content>
|
||||||
|
<Text variant="labelMedium" style={{ color: '#EF9A9A', marginBottom: 4 }}>
|
||||||
|
Erreur workflow
|
||||||
|
</Text>
|
||||||
|
<Text
|
||||||
|
variant="bodySmall"
|
||||||
|
style={{ color: '#FFCDD2', fontFamily: 'monospace' }}
|
||||||
|
selectable
|
||||||
|
>
|
||||||
|
{globalError.message}
|
||||||
|
</Text>
|
||||||
|
</Card.Content>
|
||||||
|
</Card>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* Liste des nœuds exécutés */}
|
||||||
|
<Text
|
||||||
|
variant="titleSmall"
|
||||||
|
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||||
|
>
|
||||||
|
Nœuds exécutés ({nodeNames.length})
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{nodeNames.map((nodeName, index) => {
|
||||||
|
const nodeRuns: NodeExecutionData[] = runData[nodeName] ?? [];
|
||||||
|
const firstRun = nodeRuns[0];
|
||||||
|
const hasError = !!firstRun?.error;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Card
|
||||||
|
key={nodeName}
|
||||||
|
style={[
|
||||||
|
styles.nodeCard,
|
||||||
|
{ backgroundColor: hasError ? '#1C0000' : theme.colors.surface },
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<Card.Content>
|
||||||
|
{/* Nom du nœud et durée d'exécution */}
|
||||||
|
<View style={styles.nodeHeader}>
|
||||||
|
<Text
|
||||||
|
variant="bodyMedium"
|
||||||
|
style={{ color: theme.colors.onSurface, fontWeight: '600', flex: 1 }}
|
||||||
|
>
|
||||||
|
{index + 1}. {nodeName}
|
||||||
|
</Text>
|
||||||
|
{firstRun && (
|
||||||
|
<Text variant="bodySmall" style={{ color: theme.colors.onSurfaceVariant }}>
|
||||||
|
{firstRun.executionTime}ms
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
{/* Erreur spécifique à ce nœud */}
|
||||||
|
{firstRun?.error && (
|
||||||
|
<>
|
||||||
|
<Divider style={{ marginVertical: 6 }} />
|
||||||
|
<Text
|
||||||
|
variant="bodySmall"
|
||||||
|
style={{ color: '#EF9A9A', fontFamily: 'monospace' }}
|
||||||
|
selectable
|
||||||
|
>
|
||||||
|
{firstRun.error.message}
|
||||||
|
</Text>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Card.Content>
|
||||||
|
</Card>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
|
||||||
|
{nodeNames.length === 0 && (
|
||||||
|
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||||
|
Aucune donnée de nœud disponible pour cette exécution.
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
padding: 16,
|
||||||
|
paddingBottom: 40,
|
||||||
|
},
|
||||||
|
centered: {
|
||||||
|
flex: 1,
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'center',
|
||||||
|
},
|
||||||
|
headerCard: {
|
||||||
|
marginBottom: 12,
|
||||||
|
elevation: 2,
|
||||||
|
},
|
||||||
|
headerRow: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'flex-start',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
},
|
||||||
|
errorCard: {
|
||||||
|
marginBottom: 12,
|
||||||
|
elevation: 2,
|
||||||
|
},
|
||||||
|
sectionTitle: {
|
||||||
|
marginBottom: 8,
|
||||||
|
fontWeight: '600',
|
||||||
|
},
|
||||||
|
nodeCard: {
|
||||||
|
marginBottom: 8,
|
||||||
|
elevation: 1,
|
||||||
|
},
|
||||||
|
nodeHeader: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
justifyContent: 'space-between',
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
textAlign: 'center',
|
||||||
|
marginTop: 24,
|
||||||
|
fontStyle: 'italic',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default LogsScreen;
|
||||||
@@ -0,0 +1,329 @@
|
|||||||
|
import React, { useState, useEffect } from 'react';
|
||||||
|
import { ScrollView, StyleSheet, View, Alert } from 'react-native';
|
||||||
|
import {
|
||||||
|
Text,
|
||||||
|
TextInput,
|
||||||
|
Button,
|
||||||
|
Switch,
|
||||||
|
Divider,
|
||||||
|
useTheme,
|
||||||
|
Snackbar,
|
||||||
|
} from 'react-native-paper';
|
||||||
|
import * as SecureStore from 'expo-secure-store';
|
||||||
|
import * as LocalAuthentication from 'expo-local-authentication';
|
||||||
|
import { useAppStore } from '../store/appStore';
|
||||||
|
import { SECURE_STORE_KEYS } from '../api/client';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Intervalles de polling proposés à l'utilisateur.
|
||||||
|
* Le choix 30s est le défaut — bon compromis batterie/fraîcheur.
|
||||||
|
*/
|
||||||
|
const POLLING_INTERVALS: Array<{ label: string; value: number }> = [
|
||||||
|
{ label: '15s', value: 15_000 },
|
||||||
|
{ label: '30s', value: 30_000 },
|
||||||
|
{ label: '1 min', value: 60_000 },
|
||||||
|
{ label: '5 min', value: 300_000 },
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran de configuration de l'application.
|
||||||
|
* Gère :
|
||||||
|
* - La connexion à l'instance n8n (URL + clé API + token HAProxy)
|
||||||
|
* - L'activation de l'authentification biométrique
|
||||||
|
* - L'intervalle de polling automatique
|
||||||
|
*
|
||||||
|
* SÉCURITÉ : aucune valeur sensible n'est stockée dans l'état React au-delà de la saisie.
|
||||||
|
* Après sauvegarde, apiKey et appToken sont vidés des champs et ne vivent que dans le secure store.
|
||||||
|
*/
|
||||||
|
const SettingsScreen: React.FC = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const { config, preferences, setConfig, setPreferences } = useAppStore();
|
||||||
|
|
||||||
|
const [baseUrl, setBaseUrl] = useState('');
|
||||||
|
const [apiKey, setApiKey] = useState('');
|
||||||
|
const [appToken, setAppToken] = useState('');
|
||||||
|
const [urlError, setUrlError] = useState('');
|
||||||
|
const [isBiometricAvailable, setIsBiometricAvailable] = useState(false);
|
||||||
|
const [snackMessage, setSnackMessage] = useState('');
|
||||||
|
const [isSaving, setIsSaving] = useState(false);
|
||||||
|
|
||||||
|
/** Vérifie la disponibilité du hardware biométrique sur cet appareil */
|
||||||
|
useEffect(() => {
|
||||||
|
LocalAuthentication.hasHardwareAsync().then(setIsBiometricAvailable);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
/** Pré-remplit l'URL depuis le store (jamais la clé API ni le token) */
|
||||||
|
useEffect(() => {
|
||||||
|
setBaseUrl(config.baseUrl);
|
||||||
|
}, [config.baseUrl]);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Valide que l'URL est bien en HTTPS (TLS obligatoire).
|
||||||
|
* L'app refuse toute URL HTTP pour protéger les secrets en transit.
|
||||||
|
*
|
||||||
|
* @param url - URL saisie par l'utilisateur
|
||||||
|
* @returns true si l'URL est valide et en HTTPS
|
||||||
|
*/
|
||||||
|
const validateUrl = (url: string): boolean => {
|
||||||
|
if (!url.startsWith('https://')) {
|
||||||
|
setUrlError("L'URL doit commencer par https:// (TLS obligatoire)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
new URL(url);
|
||||||
|
setUrlError('');
|
||||||
|
return true;
|
||||||
|
} catch {
|
||||||
|
setUrlError('URL invalide — vérifiez le format');
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sauvegarde la configuration dans le secure store Android Keystore.
|
||||||
|
* Vide les champs sensibles de l'état React immédiatement après sauvegarde.
|
||||||
|
*/
|
||||||
|
const handleSave = async (): Promise<void> => {
|
||||||
|
if (!validateUrl(baseUrl)) return;
|
||||||
|
if (!apiKey.trim()) {
|
||||||
|
setSnackMessage('La clé API n8n est obligatoire');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setIsSaving(true);
|
||||||
|
try {
|
||||||
|
await setConfig(baseUrl.trim(), apiKey.trim(), appToken.trim());
|
||||||
|
// Nettoyage immédiat des champs sensibles de l'état React
|
||||||
|
setApiKey('');
|
||||||
|
setAppToken('');
|
||||||
|
setSnackMessage('Configuration sauvegardée avec succès');
|
||||||
|
} catch {
|
||||||
|
setSnackMessage('Erreur lors de la sauvegarde');
|
||||||
|
} finally {
|
||||||
|
setIsSaving(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Réinitialise complètement la configuration après confirmation explicite.
|
||||||
|
* Supprime toutes les entrées du secure store.
|
||||||
|
*/
|
||||||
|
const handleReset = (): void => {
|
||||||
|
Alert.alert(
|
||||||
|
'Réinitialiser la configuration',
|
||||||
|
'Toutes les données de connexion seront supprimées. Cette action est irréversible.',
|
||||||
|
[
|
||||||
|
{ text: 'Annuler', style: 'cancel' },
|
||||||
|
{
|
||||||
|
text: 'Réinitialiser',
|
||||||
|
style: 'destructive',
|
||||||
|
onPress: async () => {
|
||||||
|
await Promise.all([
|
||||||
|
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.BASE_URL),
|
||||||
|
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.API_KEY),
|
||||||
|
SecureStore.deleteItemAsync(SECURE_STORE_KEYS.APP_TOKEN),
|
||||||
|
]);
|
||||||
|
setBaseUrl('');
|
||||||
|
setApiKey('');
|
||||||
|
setAppToken('');
|
||||||
|
setSnackMessage('Configuration réinitialisée');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<ScrollView
|
||||||
|
style={[styles.container, { backgroundColor: theme.colors.background }]}
|
||||||
|
contentContainerStyle={styles.content}
|
||||||
|
keyboardShouldPersistTaps="handled"
|
||||||
|
>
|
||||||
|
{/* Section : connexion à l'instance n8n */}
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||||
|
>
|
||||||
|
Connexion n8n
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
<TextInput
|
||||||
|
label="URL de l'instance (https://…)"
|
||||||
|
value={baseUrl}
|
||||||
|
onChangeText={(v) => {
|
||||||
|
setBaseUrl(v);
|
||||||
|
if (urlError) validateUrl(v);
|
||||||
|
}}
|
||||||
|
onBlur={() => baseUrl && validateUrl(baseUrl)}
|
||||||
|
error={!!urlError}
|
||||||
|
mode="outlined"
|
||||||
|
style={styles.input}
|
||||||
|
autoCapitalize="none"
|
||||||
|
autoCorrect={false}
|
||||||
|
keyboardType="url"
|
||||||
|
left={<TextInput.Icon icon="server" />}
|
||||||
|
/>
|
||||||
|
{!!urlError && (
|
||||||
|
<Text
|
||||||
|
variant="bodySmall"
|
||||||
|
style={{ color: theme.colors.error, marginBottom: 8, marginLeft: 4 }}
|
||||||
|
>
|
||||||
|
{urlError}
|
||||||
|
</Text>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<TextInput
|
||||||
|
label="Clé API n8n"
|
||||||
|
value={apiKey}
|
||||||
|
onChangeText={setApiKey}
|
||||||
|
secureTextEntry
|
||||||
|
mode="outlined"
|
||||||
|
style={styles.input}
|
||||||
|
autoCapitalize="none"
|
||||||
|
autoCorrect={false}
|
||||||
|
left={<TextInput.Icon icon="key" />}
|
||||||
|
placeholder={config.isConfigured ? '••••••••••••••••' : undefined}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextInput
|
||||||
|
label="Token HAProxy (X-App-Token)"
|
||||||
|
value={appToken}
|
||||||
|
onChangeText={setAppToken}
|
||||||
|
secureTextEntry
|
||||||
|
mode="outlined"
|
||||||
|
style={styles.input}
|
||||||
|
autoCapitalize="none"
|
||||||
|
autoCorrect={false}
|
||||||
|
left={<TextInput.Icon icon="shield-key" />}
|
||||||
|
placeholder={config.isConfigured ? '••••••••••••••••' : undefined}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
mode="contained"
|
||||||
|
onPress={handleSave}
|
||||||
|
loading={isSaving}
|
||||||
|
disabled={isSaving}
|
||||||
|
style={styles.saveButton}
|
||||||
|
>
|
||||||
|
Sauvegarder
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Divider style={styles.divider} />
|
||||||
|
|
||||||
|
{/* Section : préférences utilisateur */}
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
style={[styles.sectionTitle, { color: theme.colors.onBackground }]}
|
||||||
|
>
|
||||||
|
Préférences
|
||||||
|
</Text>
|
||||||
|
|
||||||
|
{/* Biométrie — affichée uniquement si le hardware est disponible */}
|
||||||
|
{isBiometricAvailable && (
|
||||||
|
<View style={styles.row}>
|
||||||
|
<Text
|
||||||
|
variant="bodyMedium"
|
||||||
|
style={{ color: theme.colors.onBackground, flex: 1 }}
|
||||||
|
>
|
||||||
|
Déverrouillage biométrique
|
||||||
|
</Text>
|
||||||
|
<Switch
|
||||||
|
value={preferences.biometricEnabled}
|
||||||
|
onValueChange={(v) => setPreferences({ biometricEnabled: v })}
|
||||||
|
color={theme.colors.primary}
|
||||||
|
/>
|
||||||
|
</View>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* Intervalle de rafraîchissement automatique */}
|
||||||
|
<Text
|
||||||
|
variant="bodyMedium"
|
||||||
|
style={{ color: theme.colors.onBackground, marginBottom: 10, marginTop: 8 }}
|
||||||
|
>
|
||||||
|
Intervalle de rafraîchissement
|
||||||
|
</Text>
|
||||||
|
<View style={styles.intervalRow}>
|
||||||
|
{POLLING_INTERVALS.map((item) => (
|
||||||
|
<Button
|
||||||
|
key={item.value}
|
||||||
|
mode={preferences.pollingInterval === item.value ? 'contained' : 'outlined'}
|
||||||
|
onPress={() => setPreferences({ pollingInterval: item.value })}
|
||||||
|
style={styles.intervalButton}
|
||||||
|
compact
|
||||||
|
>
|
||||||
|
{item.label}
|
||||||
|
</Button>
|
||||||
|
))}
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<Divider style={styles.divider} />
|
||||||
|
|
||||||
|
{/* Zone de danger — réinitialisation */}
|
||||||
|
<Text
|
||||||
|
variant="titleMedium"
|
||||||
|
style={[styles.sectionTitle, { color: theme.colors.error }]}
|
||||||
|
>
|
||||||
|
Zone de danger
|
||||||
|
</Text>
|
||||||
|
<Button
|
||||||
|
mode="outlined"
|
||||||
|
onPress={handleReset}
|
||||||
|
textColor={theme.colors.error}
|
||||||
|
style={[styles.resetButton, { borderColor: theme.colors.error }]}
|
||||||
|
>
|
||||||
|
Réinitialiser la configuration
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Snackbar
|
||||||
|
visible={!!snackMessage}
|
||||||
|
onDismiss={() => setSnackMessage('')}
|
||||||
|
duration={3000}
|
||||||
|
>
|
||||||
|
{snackMessage}
|
||||||
|
</Snackbar>
|
||||||
|
</ScrollView>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
content: {
|
||||||
|
padding: 16,
|
||||||
|
paddingBottom: 40,
|
||||||
|
},
|
||||||
|
sectionTitle: {
|
||||||
|
fontWeight: '600',
|
||||||
|
marginBottom: 12,
|
||||||
|
},
|
||||||
|
input: {
|
||||||
|
marginBottom: 12,
|
||||||
|
},
|
||||||
|
saveButton: {
|
||||||
|
marginTop: 4,
|
||||||
|
marginBottom: 8,
|
||||||
|
},
|
||||||
|
divider: {
|
||||||
|
marginVertical: 20,
|
||||||
|
},
|
||||||
|
row: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
alignItems: 'center',
|
||||||
|
marginBottom: 16,
|
||||||
|
},
|
||||||
|
intervalRow: {
|
||||||
|
flexDirection: 'row',
|
||||||
|
gap: 8,
|
||||||
|
flexWrap: 'wrap',
|
||||||
|
},
|
||||||
|
intervalButton: {
|
||||||
|
flex: 1,
|
||||||
|
minWidth: 60,
|
||||||
|
},
|
||||||
|
resetButton: {
|
||||||
|
marginTop: 4,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default SettingsScreen;
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
import React, { useState } from 'react';
|
||||||
|
import { FlatList, StyleSheet, View } from 'react-native';
|
||||||
|
import { Text, Snackbar, useTheme } from 'react-native-paper';
|
||||||
|
import { useWorkflows } from '../hooks/useWorkflows';
|
||||||
|
import WorkflowCard from '../components/WorkflowCard';
|
||||||
|
import SkeletonLoader from '../components/SkeletonLoader';
|
||||||
|
import { Workflow } from '../api/workflows';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Écran de liste de tous les workflows de l'instance n8n.
|
||||||
|
* Supporte le pull-to-refresh et affiche un squelette au premier chargement.
|
||||||
|
* Les actions (toggle, run) sont déléguées à useWorkflows — aucun appel API direct ici.
|
||||||
|
*/
|
||||||
|
const WorkflowsScreen: React.FC = () => {
|
||||||
|
const theme = useTheme();
|
||||||
|
const [snackMessage, setSnackMessage] = useState('');
|
||||||
|
const { workflows, isLoading, isRefreshing, refresh, toggleWorkflow, triggerWorkflow } =
|
||||||
|
useWorkflows();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Déclenche l'exécution d'un workflow et affiche une confirmation à l'utilisateur.
|
||||||
|
*
|
||||||
|
* @param id - Identifiant du workflow à lancer
|
||||||
|
*/
|
||||||
|
const handleRun = async (id: string): Promise<void> => {
|
||||||
|
await triggerWorkflow(id);
|
||||||
|
setSnackMessage('Workflow déclenché avec succès');
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Bascule le statut actif/inactif avec retour visuel.
|
||||||
|
* L'état local est mis à jour par le hook après confirmation serveur.
|
||||||
|
*
|
||||||
|
* @param workflow - Workflow à basculer
|
||||||
|
*/
|
||||||
|
const handleToggle = async (workflow: Workflow): Promise<void> => {
|
||||||
|
await toggleWorkflow(workflow);
|
||||||
|
setSnackMessage(workflow.active ? 'Workflow désactivé' : 'Workflow activé');
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<View style={[styles.container, { backgroundColor: theme.colors.background }]}>
|
||||||
|
{isLoading ? (
|
||||||
|
<SkeletonLoader count={6} />
|
||||||
|
) : (
|
||||||
|
<FlatList
|
||||||
|
data={workflows}
|
||||||
|
keyExtractor={(item) => item.id}
|
||||||
|
renderItem={({ item }) => (
|
||||||
|
<WorkflowCard
|
||||||
|
workflow={item}
|
||||||
|
onToggle={handleToggle}
|
||||||
|
onRun={handleRun}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
refreshing={isRefreshing}
|
||||||
|
onRefresh={refresh}
|
||||||
|
contentContainerStyle={styles.list}
|
||||||
|
ListEmptyComponent={
|
||||||
|
<Text style={[styles.empty, { color: theme.colors.onSurfaceVariant }]}>
|
||||||
|
Aucun workflow trouvé. Vérifiez la connexion à l'instance n8n.
|
||||||
|
</Text>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* Confirmation d'action non destructive */}
|
||||||
|
<Snackbar
|
||||||
|
visible={!!snackMessage}
|
||||||
|
onDismiss={() => setSnackMessage('')}
|
||||||
|
duration={2500}
|
||||||
|
>
|
||||||
|
{snackMessage}
|
||||||
|
</Snackbar>
|
||||||
|
</View>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const styles = StyleSheet.create({
|
||||||
|
container: {
|
||||||
|
flex: 1,
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
paddingVertical: 8,
|
||||||
|
paddingBottom: 80,
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
textAlign: 'center',
|
||||||
|
marginTop: 48,
|
||||||
|
marginHorizontal: 32,
|
||||||
|
fontStyle: 'italic',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
export default WorkflowsScreen;
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
import { create } from 'zustand';
|
||||||
|
import * as SecureStore from 'expo-secure-store';
|
||||||
|
import { SECURE_STORE_KEYS } from '../api/client';
|
||||||
|
|
||||||
|
/** Configuration de connexion à l'instance n8n auto-hébergée */
|
||||||
|
interface AppConfig {
|
||||||
|
/** URL de base de l'instance (ex: https://n8n.example.com) */
|
||||||
|
baseUrl: string;
|
||||||
|
/** Vrai si une configuration complète a déjà été sauvegardée dans le secure store */
|
||||||
|
isConfigured: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Préférences utilisateur persistées localement */
|
||||||
|
interface AppPreferences {
|
||||||
|
/** Intervalle de polling automatique en millisecondes */
|
||||||
|
pollingInterval: number;
|
||||||
|
/** Active l'authentification biométrique au démarrage de l'app */
|
||||||
|
biometricEnabled: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Interface complète de l'état global Zustand */
|
||||||
|
interface AppState {
|
||||||
|
config: AppConfig;
|
||||||
|
preferences: AppPreferences;
|
||||||
|
/** Vrai si l'authentification biométrique a été validée pour la session courante */
|
||||||
|
isAuthenticated: boolean;
|
||||||
|
isLoading: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sauvegarde baseUrl, apiKey et appToken dans le secure store Android Keystore.
|
||||||
|
* N'appeler qu'avec des valeurs non vides et validées (HTTPS obligatoire pour baseUrl).
|
||||||
|
*
|
||||||
|
* @param baseUrl - URL de l'instance n8n en HTTPS
|
||||||
|
* @param apiKey - Clé API n8n (scope minimal recommandé)
|
||||||
|
* @param appToken - Token personnalisé HAProxy (X-App-Token)
|
||||||
|
*/
|
||||||
|
setConfig: (baseUrl: string, apiKey: string, appToken: string) => Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Charge la configuration au démarrage depuis le secure store.
|
||||||
|
* Appelé une seule fois par le root layout (_layout.tsx).
|
||||||
|
*/
|
||||||
|
loadConfig: () => Promise<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Met à jour les préférences utilisateur de manière partielle.
|
||||||
|
*
|
||||||
|
* @param prefs - Sous-ensemble des préférences à modifier
|
||||||
|
*/
|
||||||
|
setPreferences: (prefs: Partial<AppPreferences>) => void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Marque la session comme authentifiée (biométrie validée).
|
||||||
|
*
|
||||||
|
* @param auth - true si la biométrie a été acceptée
|
||||||
|
*/
|
||||||
|
setAuthenticated: (auth: boolean) => void;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const useAppStore = create<AppState>((set) => ({
|
||||||
|
config: {
|
||||||
|
baseUrl: '',
|
||||||
|
isConfigured: false,
|
||||||
|
},
|
||||||
|
preferences: {
|
||||||
|
pollingInterval: 30_000, // 30 secondes — bon compromis entre fraîcheur et batterie
|
||||||
|
biometricEnabled: false,
|
||||||
|
},
|
||||||
|
isAuthenticated: false,
|
||||||
|
isLoading: false,
|
||||||
|
|
||||||
|
setConfig: async (baseUrl, apiKey, appToken) => {
|
||||||
|
// Écriture parallèle dans le secure store pour minimiser la latence
|
||||||
|
await Promise.all([
|
||||||
|
SecureStore.setItemAsync(SECURE_STORE_KEYS.BASE_URL, baseUrl),
|
||||||
|
SecureStore.setItemAsync(SECURE_STORE_KEYS.API_KEY, apiKey),
|
||||||
|
SecureStore.setItemAsync(SECURE_STORE_KEYS.APP_TOKEN, appToken),
|
||||||
|
]);
|
||||||
|
// On ne stocke que l'URL dans l'état React ; jamais la clé API ni le token
|
||||||
|
set({ config: { baseUrl, isConfigured: true } });
|
||||||
|
},
|
||||||
|
|
||||||
|
loadConfig: async () => {
|
||||||
|
set({ isLoading: true });
|
||||||
|
try {
|
||||||
|
// Seule l'URL est lue dans le store visible — les secrets restent dans le secure store
|
||||||
|
const baseUrl = await SecureStore.getItemAsync(SECURE_STORE_KEYS.BASE_URL);
|
||||||
|
set({
|
||||||
|
config: {
|
||||||
|
baseUrl: baseUrl ?? '',
|
||||||
|
isConfigured: !!baseUrl,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
} finally {
|
||||||
|
set({ isLoading: false });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setPreferences: (prefs) =>
|
||||||
|
set((state) => ({
|
||||||
|
preferences: { ...state.preferences, ...prefs },
|
||||||
|
})),
|
||||||
|
|
||||||
|
setAuthenticated: (auth) => set({ isAuthenticated: auth }),
|
||||||
|
}));
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
import { AxiosError } from 'axios';
|
||||||
|
|
||||||
|
/** Signature du callback de toast enregistré depuis le root layout */
|
||||||
|
type ToastCallback = (message: string, type: 'error' | 'warning' | 'info') => void;
|
||||||
|
|
||||||
|
/** Référence au callback toast, initialisée au montage du root layout */
|
||||||
|
let toastCallback: ToastCallback | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enregistre le callback de toast depuis le root layout (_layout.tsx).
|
||||||
|
* Doit être appelé une seule fois au démarrage de l'application.
|
||||||
|
*
|
||||||
|
* @param callback - Fonction qui affiche un toast dans l'UI
|
||||||
|
*/
|
||||||
|
export const registerToastCallback = (callback: ToastCallback): void => {
|
||||||
|
toastCallback = callback;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Affiche un toast via le callback enregistré.
|
||||||
|
* Ne fait rien si le callback n'a pas encore été enregistré.
|
||||||
|
*/
|
||||||
|
const showToast = (message: string, type: 'error' | 'warning' | 'info' = 'error'): void => {
|
||||||
|
if (toastCallback) {
|
||||||
|
toastCallback(message, type);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extrait un message d'erreur lisible depuis une erreur Axios ou générique.
|
||||||
|
* Ne logue jamais les détails de la requête (qui pourraient contenir des headers secrets).
|
||||||
|
*
|
||||||
|
* @param error - Erreur Axios ou Error générique
|
||||||
|
* @returns Message d'erreur lisible en français
|
||||||
|
*/
|
||||||
|
const extractMessage = (error: unknown): string => {
|
||||||
|
if (error instanceof AxiosError) {
|
||||||
|
if (error.response) {
|
||||||
|
// Erreur HTTP avec réponse du serveur (4xx, 5xx)
|
||||||
|
const data = error.response.data as { message?: string; error?: string } | null;
|
||||||
|
return data?.message ?? data?.error ?? `Erreur ${error.response.status}`;
|
||||||
|
}
|
||||||
|
if (error.request) {
|
||||||
|
// Requête émise mais pas de réponse : timeout ou serveur inaccessible
|
||||||
|
return 'Serveur inaccessible. Vérifiez votre connexion ou l\'URL n8n.';
|
||||||
|
}
|
||||||
|
return error.message;
|
||||||
|
}
|
||||||
|
if (error instanceof Error) {
|
||||||
|
return error.message;
|
||||||
|
}
|
||||||
|
return 'Une erreur inattendue est survenue.';
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Point d'entrée unifié pour la gestion des erreurs applicatives.
|
||||||
|
* Affiche un toast et émet un warning console en développement UNIQUEMENT.
|
||||||
|
* Jamais de log en production, jamais de log des valeurs de headers ou tokens.
|
||||||
|
*
|
||||||
|
* @param error - Erreur à traiter
|
||||||
|
* @param context - Contexte optionnel (nom de la fonction appelante)
|
||||||
|
*/
|
||||||
|
export const handleError = (error: unknown, context?: string): void => {
|
||||||
|
const message = extractMessage(error);
|
||||||
|
const fullMessage = context ? `[${context}] ${message}` : message;
|
||||||
|
|
||||||
|
if (__DEV__) {
|
||||||
|
// En développement : log du message uniquement, jamais des headers/tokens
|
||||||
|
console.warn(`[ErrorHandler] ${fullMessage}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
showToast(fullMessage, 'error');
|
||||||
|
};
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
import { formatDistanceToNow, format, differenceInSeconds } from 'date-fns';
|
||||||
|
import { fr } from 'date-fns/locale';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formate une date ISO en temps relatif lisible en français.
|
||||||
|
* Ex : "il y a 3 minutes", "dans 2 heures"
|
||||||
|
*
|
||||||
|
* @param dateString - Date au format ISO 8601
|
||||||
|
* @returns Chaîne relative en français, ou "date inconnue" si parsing impossible
|
||||||
|
*/
|
||||||
|
export const formatRelativeDate = (dateString: string): string => {
|
||||||
|
try {
|
||||||
|
return formatDistanceToNow(new Date(dateString), { addSuffix: true, locale: fr });
|
||||||
|
} catch {
|
||||||
|
return 'date inconnue';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formate une date ISO en format court DD/MM/YYYY HH:mm.
|
||||||
|
*
|
||||||
|
* @param dateString - Date au format ISO 8601
|
||||||
|
* @returns Chaîne formatée, ou "date inconnue" si parsing impossible
|
||||||
|
*/
|
||||||
|
export const formatShortDate = (dateString: string): string => {
|
||||||
|
try {
|
||||||
|
return format(new Date(dateString), 'dd/MM/yyyy HH:mm', { locale: fr });
|
||||||
|
} catch {
|
||||||
|
return 'date inconnue';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calcule et formate la durée entre deux dates.
|
||||||
|
* Si stoppedAt est absent, calcule jusqu'à maintenant (exécution en cours).
|
||||||
|
*
|
||||||
|
* @param startedAt - Date de début ISO 8601
|
||||||
|
* @param stoppedAt - Date de fin ISO 8601 (optionnelle)
|
||||||
|
* @returns Durée formatée ex : "2m 34s", "45s"
|
||||||
|
*/
|
||||||
|
export const formatDuration = (startedAt: string, stoppedAt?: string): string => {
|
||||||
|
try {
|
||||||
|
const start = new Date(startedAt);
|
||||||
|
const end = stoppedAt ? new Date(stoppedAt) : new Date();
|
||||||
|
const seconds = differenceInSeconds(end, start);
|
||||||
|
if (seconds < 60) return `${seconds}s`;
|
||||||
|
const minutes = Math.floor(seconds / 60);
|
||||||
|
const remainingSeconds = seconds % 60;
|
||||||
|
return remainingSeconds > 0 ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;
|
||||||
|
} catch {
|
||||||
|
return 'durée inconnue';
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Traduit le statut d'une exécution n8n en libellé français.
|
||||||
|
*
|
||||||
|
* @param status - Statut brut de l'API n8n
|
||||||
|
* @returns Libellé français correspondant
|
||||||
|
*/
|
||||||
|
export const formatStatus = (status: string): string => {
|
||||||
|
const statusMap: Record<string, string> = {
|
||||||
|
success: 'Succès',
|
||||||
|
error: 'Erreur',
|
||||||
|
waiting: 'En attente',
|
||||||
|
running: 'En cours',
|
||||||
|
canceled: 'Annulé',
|
||||||
|
};
|
||||||
|
return statusMap[status] ?? status;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Traduit le mode de déclenchement d'une exécution n8n.
|
||||||
|
*
|
||||||
|
* @param mode - Mode brut retourné par l'API
|
||||||
|
* @returns Libellé français correspondant
|
||||||
|
*/
|
||||||
|
export const formatMode = (mode: string): string => {
|
||||||
|
const modeMap: Record<string, string> = {
|
||||||
|
manual: 'Manuel',
|
||||||
|
trigger: 'Déclencheur',
|
||||||
|
webhook: 'Webhook',
|
||||||
|
internal: 'Interne',
|
||||||
|
retry: 'Réessai',
|
||||||
|
};
|
||||||
|
return modeMap[mode] ?? mode;
|
||||||
|
};
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkjCCAxmgAwIBAgISBT2qlP2wn24Guv5h7k0ByET9MAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNTEwMTIwNTU0NTBaFw0yNjAxMTAwNTU0NDlaMB0xGzAZBgNVBAMTEmFw
|
|
||||||
Lmd5b3phbWFuY2F2ZS5mcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABP0WBe5j
|
|
||||||
0Ja8iQL1Xc7b80y6XHigavSCo1Jf+iikBfqaj1YidtH9+4V88WCRZJgTETSLAm8f
|
|
||||||
J5KWy8rrdS4UJnajggIiMIICHjAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYI
|
|
||||||
KwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOEVwQXt
|
|
||||||
gObUsls8MpDoLtpYxokFMB8GA1UdIwQYMBaAFI8NE6L2Ln7RUGwzGDhdWY4jcpHK
|
|
||||||
MDIGCCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL2U4LmkubGVuY3Iu
|
|
||||||
b3JnLzAdBgNVHREEFjAUghJhcC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAI
|
|
||||||
BgZngQwBAgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2U4LmMubGVuY3Iub3Jn
|
|
||||||
LzEyNi5jcmwwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwBkEcRspBLsp4kcogIu
|
|
||||||
ALyrTygH1B41J6vq/tUDyX3N8AAAAZnXMftkAAAEAwBIMEYCIQDmqN+cv9fksyTo
|
|
||||||
HCEc9ugPveDSNC3XCd3i2nFc/JZ4nAIhAJ5FiFRej8HnayMmzH4IU6hjxd4D1d/Q
|
|
||||||
ssaTcikUQRnsAHYAGYbUxyiqb/66A294Kk0BkarOLXIxD67OXXBBLSVMx9QAAAGZ
|
|
||||||
1zH7cAAABAMARzBFAiAFfXId1W2bAS1rdkGkwdQ0iQErKLGUZRWAUbnq242OPgIh
|
|
||||||
ANBX0RmYwnMIyjuhpuwtELLL9HijywXBVZqO1MLOLVhMMAoGCCqGSM49BAMDA2cA
|
|
||||||
MGQCMGXIxwyc3QsDmbr9BODRL039ig55ge/DB8QkpXu1+qJXmsqKOE8lHz+VwQqp
|
|
||||||
RFezugIwJ/GgAmVLODa4txKcvADgb71fUAsfrwXjbZ7PKOLOVScD2UbHGZ9HEeQX
|
|
||||||
ZmxCj5LR
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIC9RwJ6hf/zTwJbX2ECrYxhrqlGBnn5lDYOQbkptuEL5oAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAE/RYF7mPQlryJAvVdztvzTLpceKBq9IKjUl/6KKQF+pqPViJ20f37
|
|
||||||
hXzxYJFkmBMRNIsCbx8nkpbLyut1LhQmdg==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDnTCCAyKgAwIBAgISBnKX1j4PmdT740bS51Wusou5MAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA1MTYyMTA3MjZaFw0yNjA4MTQyMTA3MjVaMCQxIjAgBgNVBAMTGWFw
|
|
||||||
aS5zdGF0cy5neW96YW1hbmNhdmUuZnIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
|
|
||||||
AAT8CJ5e1GXcl0/hOYtMOZFGi1HJweOJiQyGRi/V8Ls56LfU59zQVgcKnl27H3fz
|
|
||||||
5zhU1iPRC0FqYgdlquSDAMu9o4ICJDCCAiAwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
|
|
||||||
JQQMMAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFICOYDM7is9w
|
|
||||||
O9Wnk+Stv3giOzirMB8GA1UdIwQYMBaAFI8NE6L2Ln7RUGwzGDhdWY4jcpHKMDIG
|
|
||||||
CCsGAQUFBwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL2U4LmkubGVuY3Iub3Jn
|
|
||||||
LzAkBgNVHREEHTAbghlhcGkuc3RhdHMuZ3lvemFtYW5jYXZlLmZyMBMGA1UdIAQM
|
|
||||||
MAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNy
|
|
||||||
Lm9yZy81OC5jcmwwggELBgorBgEEAdZ5AgQCBIH8BIH5APcAdgDIo8R/x7OtuTVr
|
|
||||||
AT9qehJt4zpOQ6XGRvmXrTl1mR3PmgAAAZ4y0xxFAAAEAwBHMEUCIQDbfwUB8uLL
|
|
||||||
1SRsrKRjC28A/VHXn5c3X3us97bMFFM9fwIgQDLOuwTU6nC8UuHKaCrRU2KrMKJJ
|
|
||||||
jvuOsKMCOBS9UFQAfQAai51rD/6/gbR5OcbSMQqG1tEC1PBG4hgsneNfXiYl7wAA
|
|
||||||
AZ4y0yBFAAgAAAUAE4gyIwQDAEYwRAIgb7un75QXf3f1R2ayARH2QbhiDcsO5FXo
|
|
||||||
5UzmCjkbQCkCIElkIQyVC2Tsf9mEVtGY7IyiKQn66TgnHk5wwMenxy3vMAoGCCqG
|
|
||||||
SM49BAMDA2kAMGYCMQCXnOWnx/ZxbjyJaPBScqn8QwjthjZzBie/Fa6v13D1oSPf
|
|
||||||
mkYuAIeXQbdZRbFWNlICMQCQaY6pejgmAQhiuIGr4Ns5qPmkH036aJrz/vcO+rgl
|
|
||||||
kP4FRAz9W9hvMfQYG6EdIUQ=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIEbFLRNvbUpgYsXWJf7qRZKQI6sPU3dU7NffjxCFvw79oAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAE/AieXtRl3JdP4TmLTDmRRotRycHjiYkMhkYv1fC7Oei31Ofc0FYH
|
|
||||||
Cp5dux938+c4VNYj0QtBamIHZarkgwDLvQ==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDiDCCAw2gAwIBAgISBr6RXeeIbtaW4W0NCJ84LwrhMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MTcxNjUyMTRaFw0yNjA3MTYxNjUyMTNaMBkxFzAVBgNVBAMTDmJp
|
|
||||||
bGxpc2RlYWQuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+9tiYc95Ejbs
|
|
||||||
2LS2aKIxOV1fHPWus+RY6TI0YMQDxNtKJ6UyIW8F64H3Ql3N6qWc8LYkK1q7wV+R
|
|
||||||
+Hq93g9yX6OCAhowggIWMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF
|
|
||||||
BQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRmVIhu4IaP+QP9ozyODqK4vn09
|
|
||||||
5zAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KRyjAyBggrBgEFBQcBAQQm
|
|
||||||
MCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNyLm9yZy8wGQYDVR0RBBIw
|
|
||||||
EIIOYmlsbGlzZGVhZC5jb20wEwYDVR0gBAwwCjAIBgZngQwBAgEwLQYDVR0fBCYw
|
|
||||||
JDAioCCgHoYcaHR0cDovL2U4LmMubGVuY3Iub3JnLzk4LmNybDCCAQwGCisGAQQB
|
|
||||||
1nkCBAIEgf0EgfoA+AB2AK9niDtXsE7dj6bZfvYuqOuBCsdxYPAkXlXWDC/nhYc6
|
|
||||||
AAABnZyRDTQAAAQDAEcwRQIhAPWheC0YTAIaHWFL2yWjKjT1t0yyxDZUDrqrWr4D
|
|
||||||
QQueAiAG1gWpqDegeSsAQCqjayJkBDo8aHZp5w1jiVSYGG3raAB+ABqLnWsP/r+B
|
|
||||||
tHk5xtIxCobW0QLU8EbiGCyd419eJiXvAAABnZyRD8UACAAABQAJ7VqrBAMARzBF
|
|
||||||
AiAmCePdS6Gm4gMkHGT/fbnSvDUIxIRLDxKtEo1bzeopxQIhAL7+XPeADkGvQjL2
|
|
||||||
sSYF3bs3ywkloWmeLPt115g1BgOUMAoGCCqGSM49BAMDA2kAMGYCMQDEjGpsD0xf
|
|
||||||
XjNLTV3an/uNQRSPkOMHnlnmOouyRLASS0Ja/zwN89bYpWAscuoCXkMCMQC+Rnn1
|
|
||||||
UWtaRr+x0qXuEBbpIQF1ablfgR8Jg2tTmPEfjN8HIb3WMWIazo5UtDrmK0w=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIMa6KvLOOkRrUB/cnrVdNO/jgVal7RcbP+wMVflfrvJgoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAE+9tiYc95Ejbs2LS2aKIxOV1fHPWus+RY6TI0YMQDxNtKJ6UyIW8F
|
|
||||||
64H3Ql3N6qWc8LYkK1q7wV+R+Hq93g9yXw==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFDjCCA/agAwIBAgISBTirsfL94yH52jQYywbrM4oLMA0GCSqGSIb3DQEBCwUA
|
|
||||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
|
||||||
EwNSMTIwHhcNMjUxMDEyMDU1OTEzWhcNMjYwMTEwMDU1OTEyWjAkMSIwIAYDVQQD
|
|
||||||
Exlib29rbWFya3MuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
|
||||||
AQ8AMIIBCgKCAQEAuGEQDPITA3hzriRzhNiaU1KOpu14msclOHX9wWcG/v7QE0EN
|
|
||||||
GPK7bGPqjzrutI09QoFigX4XLIzn0xrRpqKe+fNbgZWoWuOsCeayzKZmc3H+yoek
|
|
||||||
SysRTR9IDI2y3xkU7CZ3EkY7+aDl/9/rv/NBOyQQpDXRFO8SUSIyJ2UyegPaQJuj
|
|
||||||
tsp5p5fG/fkPkMlozPdVwSRUQOQkNqR8M8UcMnmpKc+eG8N/NS/vZ1sMmxWXx00q
|
|
||||||
VbqOUfQEcSDWGt9UdKPwLYZY6w5LmmRTYiE+wUmONbJv0ft3lzGGHzSdsWfp4+mE
|
|
||||||
U3FDOPsRGRRMM0b52R1uRTyaTYXdMtQxe4yi2QIDAQABo4ICKTCCAiUwDgYDVR0P
|
|
||||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
|
||||||
Af8EAjAAMB0GA1UdDgQWBBSkCB9fI7DXtbDuy7fU5fSJP7WPQTAfBgNVHSMEGDAW
|
|
||||||
gBQAtSnyLY5vMeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
|
||||||
MAKGF2h0dHA6Ly9yMTIuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGWJvb2ttYXJr
|
|
||||||
cy5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
|
||||||
JTAjoCGgH4YdaHR0cDovL3IxMi5jLmxlbmNyLm9yZy8xMi5jcmwwggEEBgorBgEE
|
|
||||||
AdZ5AgQCBIH1BIHyAPAAdgCWl2S/VViXrfdDh2g3CEJ36fA61fak8zZuRqQ/D8qp
|
|
||||||
xgAAAZnXNf7BAAAEAwBHMEUCIQCFtgFu/TuVxAd7nax9T2v0zoViH65Ia2mqQeJR
|
|
||||||
iG24bgIgZaHDX1JLnjVvhbprooLvnCcZBxZw0xTrQFud27h8pfkAdgBJnJtp3h18
|
|
||||||
7Pw23s2HZKa4W68Kh4AZ0VVS++nrKd34wwAAAZnXNgZTAAAEAwBHMEUCIQCV37aO
|
|
||||||
2vvowzIZbpNJ/J9UA68bzzR09Y44uGXYCmkDXAIgY7QEtJnXsak5l/xmmbctT67z
|
|
||||||
fz+EH48PANqT8vPgR6wwDQYJKoZIhvcNAQELBQADggEBAG5DIrvRpkdr0BiKBNNi
|
|
||||||
wzJjKPKkPEDnSacBI+ztUrcY4Y4f+f5zUKsjN57/LfoCYtHdn/TPaVBP3gk4U8wJ
|
|
||||||
l32/oAOkP64wa9gx+00j1xG+YUc89/dXtVr/Z5ncIsbgxYvCDW7e0YYiHb3iNABM
|
|
||||||
2w6E8u3vzSAA7b+7WbkZi5RoQoXWve57HGB0jW+Y/eO6PpTapUJVaRZt+p974zJB
|
|
||||||
TlGU4b6HRWs1bRRNdoqoNfPtiaobu4RGVcY/RWtX9uKPCMp8EWVPwi9Ex1pSte/1
|
|
||||||
+5G3x0vkaLGrjH7l5kmm0ac2q0eojdZBQChk+iLI/jwGrW7knSEEBimS2+4iSLy6
|
|
||||||
nTA=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAuGEQDPITA3hzriRzhNiaU1KOpu14msclOHX9wWcG/v7QE0EN
|
|
||||||
GPK7bGPqjzrutI09QoFigX4XLIzn0xrRpqKe+fNbgZWoWuOsCeayzKZmc3H+yoek
|
|
||||||
SysRTR9IDI2y3xkU7CZ3EkY7+aDl/9/rv/NBOyQQpDXRFO8SUSIyJ2UyegPaQJuj
|
|
||||||
tsp5p5fG/fkPkMlozPdVwSRUQOQkNqR8M8UcMnmpKc+eG8N/NS/vZ1sMmxWXx00q
|
|
||||||
VbqOUfQEcSDWGt9UdKPwLYZY6w5LmmRTYiE+wUmONbJv0ft3lzGGHzSdsWfp4+mE
|
|
||||||
U3FDOPsRGRRMM0b52R1uRTyaTYXdMtQxe4yi2QIDAQABAoIBABW8D2XPRXGDyfMt
|
|
||||||
xdZTqEGJOlqwJKbuMdOJiSu6xubZR9L1OKOHvZNF5fkTY98xxRZpZSDJqdatF4jZ
|
|
||||||
oPwpMF9bkh5g83MfYoDaSpp4RRx3xCbAvZvEzGnQdbBRJdRJwx8hW6jyUZCYKHS0
|
|
||||||
wzgh5z8e/b01wNtcYUbiJpJhSgV66jjWbnGWuhFcRVMyGsTnbVAozRL8qniWPkJU
|
|
||||||
/2j8WzVZRB7a69632e2UZ97LemK5r/H1TbvtLPjKZQby521lgRqLKphdf/MA2MHA
|
|
||||||
q75IbM/jZ8M9Uojqvzv3xjflm8BUNrqFOHmDyhRd1d8HcFx1o95ao8xrfNaiaVD2
|
|
||||||
xRDtU3kCgYEA86uqWyZ5Ljy5xN4uR/wE3b1/gk7OgSgMy+wuzmaw25tAbZaHFc9b
|
|
||||||
dUeoQhgnA5RezRIAEvefOm+y5PwrK++Li/EKyI/661gFRH4YC7tHZUAJXyd59PIb
|
|
||||||
wsfie9R01CNO0ixuVMGEVhKPXfRxcKT0DMmOPAfjlBYuXKNgUxR0EM0CgYEAwbVg
|
|
||||||
6aieLxDbGkg8+I6uPBvOzYnnfw2eAaKUPWJiuxuoD3uFz9Yuyiytll82pah8jEG2
|
|
||||||
A2UaBao9ncwDScOC4zRPGwF3Vim3TaOuf4W1WJdtwj7QME7sV9H52vd3C/J4n+9r
|
|
||||||
DFqpKHXNoNsgw+7Aqjk+1Xy2eooklruwC2mvKj0CgYAvMX9UGhZ8SwybwYBrNrdm
|
|
||||||
ju4kOckrIKuhz0OdfCwizGXlE7NkGP4Yr+E5s93Shqj5xNO42LbBJaMbUG+4GbQI
|
|
||||||
TY4OHDy32htjEZzsoMAKLyXhhQ7MzxtrVTVbUGG0OIZqlGpmBfjwhrW3t8FE1N3j
|
|
||||||
oCHpJIoCQ22FSas9TAfSvQKBgHUmT6UgYAJQ7GF5vL4J9F/P5YMy2rlhL+UHQSXa
|
|
||||||
oaFNOZebebLXcta8rILbtH39Zs2gVAa7l0BD1B3hqz9qKXdlRE4t1dFbS0t+KWNg
|
|
||||||
JuucMTofqOL+aDs4dyYxMWMdUkxPjGsdTV512FVnEOrOMuD/2/tbADUd5MDwY6iT
|
|
||||||
Uud1AoGBAMdL6+rK9mbmvLhhN/xDHmWQoe3317NInQCkHJqs41OSUq8/qggxUnMA
|
|
||||||
69yqe5tH5YAqS70bpQ2VgRot+TbP904moftHduHbnNjUTMbYIXCH4eEVX1TKo6Ed
|
|
||||||
FPbxOVDaIuMHCGAiwF7IpSdWrfngG8fatoqBy/KgipUaWLvefUoN
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
2A==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAtXNZoYstloaVDmYS3ueRh7TeQYTye4AInRrHVhgpA0UPEE9g
|
|
||||||
NWIxA8zOzR6acywhu1xATGSIUaJm64PGTTOXiD2ZDQXVUbv+T7xQtpQbhQdqYQDy
|
|
||||||
AjXaxwh+IEVCmc/Ov4sc6gdojbxsqNxLgm4vBE+/9wOJKDqLer7npv5AjkZ0UTyC
|
|
||||||
PHjd2fdA1cuVWVo3JyQeNy9yRNzQpNEw08Kc5yi+rjusuWSpDee3aWNAh/8IAw3h
|
|
||||||
j03HlHTn5E47ZtLhM+vpkP1XEMquH9Wbb3DanLTqQj1okpZKdKIY/eY4OVvb/gv1
|
|
||||||
oKskM2Uh9qqvTuR3HklFzXoED6F2vVQWeh1mQQIDAQABAoIBABcgj9zkZu1H077P
|
|
||||||
6Xl/eCVHuzO2/3XDS2sZgIJri5VZm4JqLj/k9zdd8ZaOXy7tLJLQvsyd3GF/UBvr
|
|
||||||
of5cDuU0E1+9Yxj1sQPhDkPp28TDEwmF0SgmohnP7iIsgcEmDgWMSdAAcrtCDXLL
|
|
||||||
uqocuMxqt8ktqlvgyRSzjsYno6XJLkUGvMMf/DZdxm+2JP3AyqJJeER5+SW9tJIs
|
|
||||||
uaF/TO2chVt7eiztf4NNcAk5QVbBEK6LcXHijNFYfWZsSNKEymraeLVU+WtxezV8
|
|
||||||
t9s+zG+EYHaygibxBEozARofzZLkbKFXmIY3+LnKw8xNZlZ9g39d32xRkes5GBtf
|
|
||||||
b2DqoaMCgYEA7DhbdPe/kI/BkWRjsT78EG6xkFOIDqELlsRGQ6jbxe60TTZeuplF
|
|
||||||
6ynG1EmKLWo8P5rnwxpu3eFVKUj8QWzBaoN3OUX1xIQTuEJlJensoD5KwiNKr3gq
|
|
||||||
nosN0zWoGB+eAp/vY1TrMQb+q6VsnqXZJjQIkcvLNjDcm4HFFE5XdGMCgYEAxKTy
|
|
||||||
OH15f+2xFN/896oAe2K9Yzmgdtv46ihW9HmmxOwPRzs6UpMeK+ek6NMuNdV/f8pV
|
|
||||||
SP1c2cwNEq3sJOOEy6tOLw96C/29LVZO9Nc8vPoWSVmp5RqMWCxEtWztdM2UH1eO
|
|
||||||
cdiqRNBxq89K9+Kzc4ooYtOtO+EJVQz1X0a04gsCgYArc2ZnSpcjKT5K1zN7TAGj
|
|
||||||
qCjjSmoxfrAaCHqAQZRDgVgLB+A+5Ki2zBV1wR04o1z3ui+9dKRGDgfTM0irZCzj
|
|
||||||
wdDxaQv/HOhfsV7XrYLIKw0nTsSTKEB2r09YtXr5DP/Mrcyj8d/dQdMgkao8OHeM
|
|
||||||
DnAxGVKE4lICDMnKpWpyzwKBgQCQFNeRgoZKsMsmI3RDtyFBRrjDgk7LqCN61nHY
|
|
||||||
EWabNOeA5qm2JStfOgw/t7RNJ5CS/pp8r3+f6X3OqPa0lKwRWwQfQTTIonNBS9Lw
|
|
||||||
XOCZCpjXx8XPIyOf21fAov5drd+RE2NAkWM4po4TOACTHl0kFB/BQZ3VmO5wjd0f
|
|
||||||
oTwZvwKBgCiHIdDlpuBWyVEt3mrPWwRsJWpJYMwrG2Ckc0Wmuke2P2oA+JSrVQzz
|
|
||||||
0ts51VYh2qQsN4+TlRKj/IWWTrRGm0qeIq/1OAeXk04BiJyu5xfMQhjwEi07NeqZ
|
|
||||||
kgFmLYy/ecCGWYkSrgU8+PAvUpuyk5cYX22CSn9q8VMbVgEMpI3a
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
|
||||||
CgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ
|
|
||||||
DAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG
|
|
||||||
AGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy
|
|
||||||
6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw
|
|
||||||
SVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP
|
|
||||||
Xzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
|
||||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
|
||||||
/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU
|
|
||||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
|
||||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
|
||||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
|
||||||
AQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y
|
|
||||||
v4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38
|
|
||||||
01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1
|
|
||||||
e9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn
|
|
||||||
UfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV
|
|
||||||
aneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z
|
|
||||||
WghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R
|
|
||||||
PBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q
|
|
||||||
pdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo
|
|
||||||
6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV
|
|
||||||
uYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAsEHWG6js5keVaVLLhUtSN/wCQW9r+4hXkoxB5dzuzvg1IQaH
|
|
||||||
mI6sQq7cCfi6KFTDZkMNenWap2qv54/+fo1OYEkL/XH38b1L2LZip1zb6Pn/51w8
|
|
||||||
LGDlza6qsVVIbTGc+kqm3mkAYMbansYrbfLcbtR3HeKNsyP819wiJUDYUlIB7p3r
|
|
||||||
xf8cC0sid0ROF682ZVwoX8viOQvW+ptjwtLoj+YGnNDq2UQ24uOTCl8KnyeJxtxq
|
|
||||||
ZqFd3kvXkNLaTC4bKvV4cMjAO4PMaaY/gh4v91lhT7Kf6H4TnTZJzhv18f/+M8fH
|
|
||||||
AQgRRksZXFEGZ/KMBaX4PuURW6hN5pidcl+lAwIDAQABAoIBAAIAlXaV+i75hDSA
|
|
||||||
mMhIXUQ+jCYDJoZie6AyELOUSXA3eJ8J7HNqt4FAbEZ+uVqo79lTDK2l9V5Og3YN
|
|
||||||
eDYm08ubONQlvcvUuy5YkBFXqDXi1SnjLdnRNfsar1y5W8vFwwNC4tdm+Page65P
|
|
||||||
EQI8Po3RwxKnVrXAxGgNW6PxsyNoPzZ8mQUn5jIynhDQNeg5cU0lyvIIzmWEBzsc
|
|
||||||
tNheBekfwOpwHXsnq320yMDbFKliKSq1915KBC6vbpfEsxsvD18U5uZ9o+N1nMGs
|
|
||||||
nMnKfwE8fqn+urjgPtCPWGTMUwum9XUdHhn04MrJzBsITRzx839nDO+VGQL5GRkU
|
|
||||||
UoQZl/UCgYEA9K34SOOfaJVCCLaRqhj4Si6+Mdg3ByUBJsqySJoCW9BkcRPak8uQ
|
|
||||||
jmWEBUqe3RxzfbKfujurMiQ2IX9l/lkiAR58p2OLV4VUTr48j33u0NSdVEkY4b2l
|
|
||||||
a+48EvvIcbcn0ttUJQeYwDW8Xmt3DIvsP3292DAYcJeTsN6xOToVDy8CgYEAuGl1
|
|
||||||
foU3hVnnT+8F8xqeVAbJ8cZrne7uaEXwV3sKkNLgpXVaFfjYvooAUd7BNA5elPo6
|
|
||||||
8RGOVh+nlP01iqrz10rJoPLryPTwUbrCaj869gIRiHkkEdwdXEY387h2TLSRTCih
|
|
||||||
SpwV1DApVFvSiHl88tXF95vws09N10DW2ohfMm0CgYBhJAyVy6EHIXL1CJ6uPHme
|
|
||||||
4g3qth+qu3tIjmLXxiU3lHW8GxjFYqVCk3UlsKl/uYL0nY0in/vozU2cYPr6TyLb
|
|
||||||
9OGihzfUCIAfPxHGGkZNLIxF4Tt6rBNX1V6OXt4Gn6O06BTxGqH/dZYSmnHKTmb+
|
|
||||||
EgrkILwjP1qIdvE/ehrQSwKBgQCR5sYR2r5JoA61nEvdwiKgIlrmEfGVG7O+Bg+Y
|
|
||||||
dv2uBVm9LrKejaqWXcLRA2dikzfbsHqvvg8aLqM86nTRCF4x6LbLw0YvUTNNxnAI
|
|
||||||
9YvllU9f5VBXXQpRtjCQgFIAcCBA3Ch4SjOvFIeueZOBbHUh/2ZIeDUg+M6CTodu
|
|
||||||
kNSYpQKBgG+ye9k/stD7Ce2ptZbk50n/iRRdlzbyljHENyBk2DjSviDrxkYbC5Rw
|
|
||||||
EQrmMa4fKRFAAojmtdAqU/QkJZFWwuTpg4j8Fo6FhQvB0MKb2eYMSJkAdOCqSdPY
|
|
||||||
ijbLRw+lIspKjlKY8WsLKLAnQhco9NC//EhQDx7A1KhXcDrZudf5
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpAIBAAKCAQEApqVCWBtyY4nwbxQPqepsDSXUx5q26cGub6z218Rjy/ClAQ1l
|
|
||||||
ojZ/siEOzNKBsDsMlClE1fju+sEuyNRQNB72hkodBBuesXMRshrUqqI2A7ifQI6d
|
|
||||||
AsxidTn3LrP40lyhHQx5veuLsrSoTMTN+5c02UxruYXvkmjCFfHlNq62fSfCgkJJ
|
|
||||||
5p9ai8vSAFZXPt7/MawTvu4oNxId3MMjx0hpmM/AtTrKQ/J8aDY5Zbmehhmaq+F8
|
|
||||||
BSxBcMmk9KiKixlukLKs12Kk8lLwafdnGI6ZcflzInHhz5RFvkBMqGJS8TlNOMFf
|
|
||||||
hGxwMVtUN5drWhEdRpm2OZUFYWpAn2IasPAACwIDAQABAoIBADNIWApVJ/aJ1Hva
|
|
||||||
aJeZlHbXVYu3iOKWv9+OEsiDn1J7U8vnG4e3zcQ7eBqADXj2MwDFUnGmkaSJHqSe
|
|
||||||
8a+Yd7ULybIh7cwd5SwyJY/9KzIp9pgfSyI5U3NPy0mMCN5zswEFfdF8UxlDjydQ
|
|
||||||
yTLLbXARnHUTSo57vn6SWj9htLb+rdKu+myhdxW8XyfCBQF39dT03VsNpvHIG7t/
|
|
||||||
SeYcyGNk+L7o6hsxZA8RiUFzgd1mWp5BlKUhU97rEhLSn8JdwDTLiDEDrFL0OUMw
|
|
||||||
dBXVU0baa5hv4Sin9eXz3Tt72PClwOAG8YSNYhhbVH4Rc7LnRbv184nXIOmVPKaA
|
|
||||||
sxEuGsECgYEA3z4YptbqPfYXaVKpk3dQL7tULCTD/ly/kiu3RvUcFVVmOwADbaoF
|
|
||||||
Z29c3lSitwr8oiuLd/Mby7NHLSrtIcW/Mg8uQ2MFs8nqwcUN15g6sVABTB57dBNG
|
|
||||||
Q6ixo8y9wWRjKzlX4xzkmIgfgIyRO5Los50Cv4fUpJYHp1CHvfb8b3UCgYEAvxkl
|
|
||||||
tp028W/8pfXcIHKZ/UySxcnAh3yBSfHlgsgjAYARu65+Oofoa5X5CMaYVaXclvUp
|
|
||||||
zl5aEZyfMXFTmG9FsPKx13lKMIpkkxTlnANoM7tvpGPHZGLt3InOZARzdxdC+Mw8
|
|
||||||
EyhH4o4nQLY4bhKRz3ka4StE9qs33rf83kbIQX8CgYEAsyrtMgnOmcgGZhtXyei6
|
|
||||||
THS2S29+dYkOn0vCnopd7alKkROjrMIF8EvqZu3aYbnJpIX6O1y79DKAb3nCM5a3
|
|
||||||
qn+Qi7jPfMoTRUzXnS6p/GDPib31KuXFQMwFNgc+TBY7mRc+uCIaPWkSj2NBtGRl
|
|
||||||
qrHa4MktGqLmpZv2NboiQ3kCgYEAnLSUdpGpcodw2O8qWflgSZS3bzYoiXIR239f
|
|
||||||
w8U2344T/KH0pS656y+KjiW82c8veyMD61T36yVSbgsOkBv/PEFokNfHfNKf8vTZ
|
|
||||||
7PvmQTXdMSMZaTqu74CaHO6BeRE8PCXOxa7sc946VhiXYbwckdQvtKH05Yo2QI8D
|
|
||||||
74p/wSUCgYAqjod4CaSM/ITIaHgt88WmItbStaf9nwDUDkH4mWs4ds3RFmzyVSZt
|
|
||||||
yP+m3xsKYjJU8DN+So6CveZFXRhMGmxIwaR0r41hAzskTtUpGRBRcZFMdyWXvKAb
|
|
||||||
FiLanTcRP/F5lpRy88IfnklwbAVvzVScHPltkby5S0Bl/tR+f4Grxg==
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
jg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
nLRbwHOoq7hHwg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFYDCCBEigAwIBAgIQQAF3ITfU6UK47naqPGQKtzANBgkqhkiG9w0BAQsFADA/
|
|
||||||
MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
|
|
||||||
DkRTVCBSb290IENBIFgzMB4XDTIxMDEyMDE5MTQwM1oXDTI0MDkzMDE4MTQwM1ow
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwggIiMA0GCSqGSIb3DQEB
|
|
||||||
AQUAA4ICDwAwggIKAoICAQCt6CRz9BQ385ueK1coHIe+3LffOJCMbjzmV6B493XC
|
|
||||||
ov71am72AE8o295ohmxEk7axY/0UEmu/H9LqMZshftEzPLpI9d1537O4/xLxIZpL
|
|
||||||
wYqGcWlKZmZsj348cL+tKSIG8+TA5oCu4kuPt5l+lAOf00eXfJlII1PoOK5PCm+D
|
|
||||||
LtFJV4yAdLbaL9A4jXsDcCEbdfIwPPqPrt3aY6vrFk/CjhFLfs8L6P+1dy70sntK
|
|
||||||
4EwSJQxwjQMpoOFTJOwT2e4ZvxCzSow/iaNhUd6shweU9GNx7C7ib1uYgeGJXDR5
|
|
||||||
bHbvO5BieebbpJovJsXQEOEO3tkQjhb7t/eo98flAgeYjzYIlefiN5YNNnWe+w5y
|
|
||||||
sR2bvAP5SQXYgd0FtCrWQemsAXaVCg/Y39W9Eh81LygXbNKYwagJZHduRze6zqxZ
|
|
||||||
Xmidf3LWicUGQSk+WT7dJvUkyRGnWqNMQB9GoZm1pzpRboY7nn1ypxIFeFntPlF4
|
|
||||||
FQsDj43QLwWyPntKHEtzBRL8xurgUBN8Q5N0s8p0544fAQjQMNRbcTa0B7rBMDBc
|
|
||||||
SLeCO5imfWCKoqMpgsy6vYMEG6KDA0Gh1gXxG8K28Kh8hjtGqEgqiNx2mna/H2ql
|
|
||||||
PRmP6zjzZN7IKw0KKP/32+IVQtQi0Cdd4Xn+GOdwiK1O5tmLOsbdJ1Fu/7xk9TND
|
|
||||||
TwIDAQABo4IBRjCCAUIwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw
|
|
||||||
SwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5pZGVudHJ1
|
|
||||||
c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTEp7Gkeyxx
|
|
||||||
+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEEAYLfEwEB
|
|
||||||
ATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2VuY3J5cHQu
|
|
||||||
b3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0LmNvbS9E
|
|
||||||
U1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFHm0WeZ7tuXkAXOACIjIGlj26Ztu
|
|
||||||
MA0GCSqGSIb3DQEBCwUAA4IBAQAKcwBslm7/DlLQrt2M51oGrS+o44+/yQoDFVDC
|
|
||||||
5WxCu2+b9LRPwkSICHXM6webFGJueN7sJ7o5XPWioW5WlHAQU7G75K/QosMrAdSW
|
|
||||||
9MUgNTP52GE24HGNtLi1qoJFlcDyqSMo59ahy2cI2qBDLKobkx/J3vWraV0T9VuG
|
|
||||||
WCLKTVXkcGdtwlfFRjlBz4pYg1htmf5X6DYO8A4jqv2Il9DjXA6USbW1FzXSLr9O
|
|
||||||
he8Y4IWS6wY7bCkjCWDcRQJMEhg76fsO3txE+FiYruq9RUWhiF1myv4Q6W+CyBFC
|
|
||||||
Dfvp7OOGAN6dEOM4+qR9sdjoSYKEBpsr6GtPAQw4dy753ec5
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDR2YvNy8yxYbh0
|
|
||||||
kCKjc5pIXHlH5rGucN+vq1UZlJdx0kEDcc3kDod4slC+46FIJfjinUfe7bGLUAqU
|
|
||||||
nUTngd4sCgJKbiNBlUfTECbIPbCvqf/aBLmQlz6bL8uso8Aw/qAvSp1jgU/YoRJi
|
|
||||||
bhTIYz8DGV1YWZrkeVDYrFS7sByPnvtkpiQxg5iQa4UWcgDlCUeZofz0yYvbYPNG
|
|
||||||
7w0/86hlGPK2e6ldIHphwcUWTZ7I8Q7cgivYVT82vPHnA+T7fBRkXv+/zgP4pgWt
|
|
||||||
+BRxV9Cb/7N0patvktYjbEduHYWRi9hnFpSlKX78AyvErGZ/6zgfLs5oaacrxGQh
|
|
||||||
2NjCUAz7AgMBAAECggEBAJqWHYzuss2A5TbI7xtlj6P6q0UyRnXwpHduSXRcp+ur
|
|
||||||
LUVyUm/L3DQnd6AHY8oYXu3hWw54HzA3OHQeHqJEYvwiK2nVFJe9dnmfDlK4Ty44
|
|
||||||
l0dt75z6LZ54aRu2TWBKUopD9wlUOxOkJDzqRtkPc12/E6p/58CjNdFHsevJYmDR
|
|
||||||
MW6TwVdAaJVSsDdaVBVU0AJ3LE9lmI6qJ8mUlDWe3un4kV+5HpSu8G5eLKkbfOIF
|
|
||||||
5ylvWMhsq2rhpExy34CdI2C4zDMMKRxlnukwzWnrCk0u5mcr492Xo8QIOskGa6tJ
|
|
||||||
YRNycp1Cfcqg6INxLXVRjaM5qHs0CfAD4CZV9SaPtnECgYEA6xu/X3Dge4DHRSRJ
|
|
||||||
UTjXqP0QkaD25zZ8PQLQ48TapGm43EHFhYyf47blZiVRJzxAwAlBh9K6wUlBLeZC
|
|
||||||
N0qBjJYXvIUiJYzyvQCvRGHdDvvc5i6qiO/2ETiEPMUmR2gch/yXmeQLoUqGTgwA
|
|
||||||
S/Bj0U37LcSEkPG760QFbTuvulcCgYEA5H83F9bYiyqKVUBsOTFRFAath5ZfCR3n
|
|
||||||
9GzBUyiNJpfOMeEoeTLF5gUAj6T6RZHT/P+najwxC3e3mtKC8Cg4ecwHdOI+METe
|
|
||||||
4r7ek6jnNwutZ2uTNV4yqBK1OkKj1ukmn7UAGRj28yRL4pDs6xFXpCHxcRTsPUOp
|
|
||||||
5MjLiwVNI/0CgYBvP9L/c2cVqashQXlb8JzDvvOvJU6Pu81wBTwY+xZGhCxQNOMl
|
|
||||||
PZSO6QWFnxTWjwFInVifz4xFV8d606DzjtLcVk1nDExLHnXiD0fgALrckztExEI3
|
|
||||||
x+xU27xfER763P3bLyABVtJWAPCqT614QYjKCq9XSc081NYKDkbPGFYfwwKBgC1n
|
|
||||||
tivvjoJBBtIgBiFrUmA3X35E/EeUgMZKYjRDJ6FWoyu4QVGsLDUkI1NoBi+S5dwt
|
|
||||||
dTggE+LifEKwuEI+y9IwH/8zAgaXeO733MTc2G1QzblyYANH36sUZJzaJzKKjBlK
|
|
||||||
X2WdV11DhizUfa/Md2zvLco5zSPzcSw8Vm4etJCFAoGBAM1NS02sZ9FxREjvT3gi
|
|
||||||
AaLZfpVb5QPcMp6ac/WByKeTWFgKcchbxENQ6Ciiehog8qOkXubKsKFWnl2fjDPI
|
|
||||||
tXmo71hUhyVnumU3pm4aaFFraeEGUWeVD8vE0nBRZ9sh8Xrm+2IG41ihbEWGobn/
|
|
||||||
eC0cwEOiWNLj4ZO3Sn8Ri8Ma
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAnfJ8wbGA1Y93BT04aanc/N5F1nL4OxzZuDu/UOIhYia9BoFe
|
|
||||||
+2l7dIGnGt/iewZjFrbEjNKoN3/x+Wjmyf+QqJdiuV8SKEXca1mBclXJ5cs3ft6H
|
|
||||||
lDFXS7+HpTdkjNlSOPpSwWlxlkZzYYSQzy3RV0WzqRmX5pcEMzDEFaHgmqCMK9/b
|
|
||||||
9wjU38J7yYFBbst1wFPNNaIn5C/qCyzjXSXNZBjGQkIQrnOQzhPYu4xUKKi3/i8q
|
|
||||||
35DHsxuyt4c4a9unebduPA0e0IEk5v1wrb2p9+ZQERwrA+91o0MzC5lKYpoFuLdD
|
|
||||||
MZQnXHe8zFC1Tjdo4Xe1HG5kd4oVCLLWNbAY5wIDAQABAoIBAAvC0qdZoE5GsIYj
|
|
||||||
WOAFVf8+TdT6GqHMNCoTyNss+29jkw+48mmmIRs7zEWkBilDAH3gfiI+TWhUjqAT
|
|
||||||
v5uq/AqRuzgybBeznAYiVBE/chk6WJeJ2m6effGWAXO7/DDAve6gNSlRwLN/63eH
|
|
||||||
d4D12HC3L/mXfkgdVqK5LuCtfRwGWnRewNi6sLvrcgx+alJ28W4kAyuP61Yg1/A7
|
|
||||||
xxuZUkS6gP39yLxz16UbuaBt9BxHhNSQI3Bk408nm+BaPGaYpPwa1rXN/jEa+Arm
|
|
||||||
7BY+3qb/ImWTAqlKz7CVdUD1sirFLNOg1t+EpDsZmoZRuisqDRlErPheH9QZE9zT
|
|
||||||
FljxZgECgYEAzsgT7j25uia6Aehi+kJZTtr1iShB94hdrR+jBWTLKA+M3hHms6+B
|
|
||||||
alMKdo+wOatdZi3ZoxwtmrFS9iKQ9LCrz/3MFzuo63DyXy5tONuv3VIt5mhOD9aX
|
|
||||||
sTtPIamVN59lVyumuXzWVHF5rl2vUPNyuvG9Rb5Sp7umZNz8nmlr9PcCgYEAw4rD
|
|
||||||
QvHHeTjQWLp77VFPiNUimobrKHzBjXDMoSZ+2XjOwSIm+JOwd21uK9DQHU9cDFqQ
|
|
||||||
tDh1cnXhVpqESLk+V6eTD5+evsBw6lgX0z9u6Am364LAPp+gUahQFuvu7PezBjhp
|
|
||||||
y/7WzrwaTIw0QG0DMmDyWAVlK2kqnWVDD7e3L5ECgYBo9eI4AhjuRo4QPddP1LHk
|
|
||||||
dvw/PLIPZaa3I+Hp8Pm2Qf5tEoUaHDICuFgNSm5XN4bXQNrCEqGLbgsAaRdPPQZZ
|
|
||||||
MyiPencJ23ELo1NJkym3m+k0lSlanMCu8739Bkl5zGzyTHP6n0Vj452yRlehLZHF
|
|
||||||
FsPOTQdDoNqbRBjuh/CGjQKBgG/9YwNOMa4NidWnSB6MuP5nAuB5cOjJOpjlB20r
|
|
||||||
/O5UMCWQh71J6IEdnUFe4DJJJzC0FbgBtdIODTZqXGTCIyBUivchtesNkB3Gwi5s
|
|
||||||
X/poxnsNcUjsZwcdXHEkQrxYyKFBYeZBV4kjVfSNP8e+J1yNBX6/6EdKfeuS+Sth
|
|
||||||
TnrhAoGBAI8zVMbobWeIPVb5RYuXB2y0JxZbDrp4pIKRCotA5aLOB7J7n9qkELyG
|
|
||||||
AjXxirj3RSzFvwhKBRLQecJVKM+thormbDN2NZrFRliwsEXKn0sD/8GYF1lZlpQs
|
|
||||||
BeGatEURKl784kZvkU++a0LHGUljCdb1WoZ4iQs4Z3wLXwINw+jZ
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFXTCCBEWgAwIBAgISBj1+oZzFbeoM1+Urdk4veU0+MA0GCSqGSIb3DQEBCwUA
|
|
||||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
|
||||||
EwNSMTIwHhcNMjYwNDE3MTY1OTAxWhcNMjYwNzE2MTY1OTAwWjAfMR0wGwYDVQQD
|
|
||||||
ExRjaGF0Lmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
|
|
||||||
AQoCggEBAJwkG3KparKxpFvZtVi80w/Dc6klY+oTPhy1UG8+fFrC4zJ2Ce5MVoTM
|
|
||||||
bNkPtDY93onZbpCVayYxpK8BeP2mgJDveXBg0QQxOquD5Ajhn6cQs2gPrTMC8NxZ
|
|
||||||
rxnrLv4kwIjmIiB+Sv/wtXFWkVM6qjxDz10qe80QPk7bmAhHuO+8hK6PvApR98Is
|
|
||||||
njbea75CYUf6iNbQVb/E55olQ6PWkL76oIc2bT5f2PwGP+qgmwZi+Rk8ahSOemxu
|
|
||||||
ri4hHVJgG0GJlnTIwCaaiabrhytehUpLdh+wNRorEzSCFn37RjHNYWYtIZXQRPAJ
|
|
||||||
Y4MvgkQl7tAzg42hxZAkb50OIQ3wchcCAwEAAaOCAn0wggJ5MA4GA1UdDwEB/wQE
|
|
||||||
AwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW
|
|
||||||
BBRc8Z0PWNcLzSy8tePBRSJaPL2A/zAfBgNVHSMEGDAWgBQAtSnyLY5vMeibTK14
|
|
||||||
Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTIu
|
|
||||||
aS5sZW5jci5vcmcvMHkGA1UdEQRyMHCCFGNoYXQuZ3lvemFtYW5jYXZlLmZygg9n
|
|
||||||
eW96YW1hbmNhdmUuZnKCGGplbGx5ZmluLmd5b3phbWFuY2F2ZS5mcoIVaml0c2ku
|
|
||||||
Z3lvemFtYW5jYXZlLmZyghZtYXRyaXguZ3lvemFtYW5jYXZlLmZyMBMGA1UdIAQM
|
|
||||||
MAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9yMTIuYy5sZW5j
|
|
||||||
ci5vcmcvNjMuY3JsMIIBDQYKKwYBBAHWeQIEAgSB/gSB+wD5AH8ARq+GPTs+5Z+l
|
|
||||||
d96oJF02sNntIqIj9GF3QSKUUu6VUF8AAAGdnJdB0gAIAAAFAAQk19EEAwBIMEYC
|
|
||||||
IQDOTZt9FqHojlJ0PPFTGupKYnXIz4BOb42YukJu5Av9ewIhAJWbSE9zDcxIYpcj
|
|
||||||
A9ronzMtHs74NjpdxwWGJw1xYVGvAHYAr2eIO1ewTt2Pptl+9i6o64EKx3Fg8CRe
|
|
||||||
VdYML+eFhzoAAAGdnJdCHwAABAMARzBFAiAcARsCtgaEEGx6H1nuCT9DJrLcEetU
|
|
||||||
AvC04vhlqGVUqwIhAMsslb3BqRFoUWm6qGpkcwhsQY6xEtZ78XKV6xI/FgJbMA0G
|
|
||||||
CSqGSIb3DQEBCwUAA4IBAQBE8tvnqbKzBtaUn4BwYCrCIAK5gdv2eU+Vth/4N+la
|
|
||||||
FbRqjokq4/DjNR7cKsLolxw5Z/r4gSa4ycxRVpApUhH898wK6XDZsH6fMwFxl/If
|
|
||||||
/iR+PH74oyz8kJVWtk6mvFY4vqm+7DGQkcPsKvtHdIMmrvABAi4xQasZX7JJERx0
|
|
||||||
cOozV3Pm97O0KI5qZg1yCq8Q0DEDOunaNL5BS9im3Wfob9MNJjudIrohDXGbiHfQ
|
|
||||||
3v7pCNHJ5kQ5JmTC8CGDUtyZSAOVpm2z3YWu2CSz4/Zy/NdGPb2x9JjLOLnkn+c/
|
|
||||||
ahXWm0PqPIIf8WBFYAOugfLcfwCgqjtRE7QR9RAXz+F4
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBjCCAu6gAwIBAgIRAMISMktwqbSRcdxA9+KFJjwwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDEMMAoGA1UEAxMDUjEyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
|
||||||
CgKCAQEA2pgodK2+lP474B7i5Ut1qywSf+2nAzJ+Npfs6DGPpRONC5kuHs0BUT1M
|
|
||||||
5ShuCVUxqqUiXXL0LQfCTUA83wEjuXg39RplMjTmhnGdBO+ECFu9AhqZ66YBAJpz
|
|
||||||
kG2Pogeg0JfT2kVhgTU9FPnEwF9q3AuWGrCf4yrqvSrWmMebcas7dA8827JgvlpL
|
|
||||||
Thjp2ypzXIlhZZ7+7Tymy05v5J75AEaz/xlNKmOzjmbGGIVwx1Blbzt05UiDDwhY
|
|
||||||
XS0jnV6j/ujbAKHS9OMZTfLuevYnnuXNnC2i8n+cF63vEzc50bTILEHWhsDp7CH4
|
|
||||||
WRt/uTp8n1wBnWIEwii9Cq08yhDsGwIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
|
||||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
|
||||||
/wIBADAdBgNVHQ4EFgQUALUp8i2ObzHom0yteD763OkM0dIwHwYDVR0jBBgwFoAU
|
|
||||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
|
||||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
|
||||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
|
||||||
AQELBQADggIBAI910AnPanZIZTKS3rVEyIV29BWEjAK/duuz8eL5boSoVpHhkkv3
|
|
||||||
4eoAeEiPdZLj5EZ7G2ArIK+gzhTlRQ1q4FKGpPPaFBSpqV/xbUb5UlAXQOnkHn3m
|
|
||||||
FVj+qYv87/WeY+Bm4sN3Ox8BhyaU7UAQ3LeZ7N1X01xxQe4wIAAE3JVLUCiHmZL+
|
|
||||||
qoCUtgYIFPgcg350QMUIWgxPXNGEncT921ne7nluI02V8pLUmClqXOsCwULw+PVO
|
|
||||||
ZCB7qOMxxMBoCUeL2Ll4oMpOSr5pJCpLN3tRA2s6P1KLs9TSrVhOk+7LX28NMUlI
|
|
||||||
usQ/nxLJID0RhAeFtPjyOCOscQBA53+NRjSCak7P4A5jX7ppmkcJECL+S0i3kXVU
|
|
||||||
y5Me5BbrU8973jZNv/ax6+ZK6TM8jWmimL6of6OrX7ZU6E2WqazzsFrLG3o2kySb
|
|
||||||
zlhSgJ81Cl4tv3SbYiYXnJExKQvzf83DYotox3f0fwv7xln1A2ZLplCb0O+l/AK0
|
|
||||||
YE0DS2FPxSAHi0iwMfW2nNHJrXcY3LLHD77gRgje4Eveubi2xxa+Nmk/hmhLdIET
|
|
||||||
iVDFanoCrMVIpQ59XWHkzdFmoHXHBV7oibVjGSO7ULSQ7MJ1Nz51phuDJSgAIU7A
|
|
||||||
0zrLnOrAj/dfrlEWRhCvAgbuwLZX1A2sjNjXoPOHbsPiy+lO1KF8/XY7
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAnCQbcqlqsrGkW9m1WLzTD8NzqSVj6hM+HLVQbz58WsLjMnYJ
|
|
||||||
7kxWhMxs2Q+0Nj3eidlukJVrJjGkrwF4/aaAkO95cGDRBDE6q4PkCOGfpxCzaA+t
|
|
||||||
MwLw3FmvGesu/iTAiOYiIH5K//C1cVaRUzqqPEPPXSp7zRA+TtuYCEe477yEro+8
|
|
||||||
ClH3wiyeNt5rvkJhR/qI1tBVv8TnmiVDo9aQvvqghzZtPl/Y/AY/6qCbBmL5GTxq
|
|
||||||
FI56bG6uLiEdUmAbQYmWdMjAJpqJpuuHK16FSkt2H7A1GisTNIIWfftGMc1hZi0h
|
|
||||||
ldBE8Aljgy+CRCXu0DODjaHFkCRvnQ4hDfByFwIDAQABAoIBADnpPnDpmxRJxK74
|
|
||||||
cUVHS3TWRiifII6psmjNatbHszGqhL+rfgVvNMuuUlSzeWCA0/AGv/ZKJOKWmQD7
|
|
||||||
p9dUEO0wlLb0gbFvXNZOZZ5RqHg7Pn9DCTcZSSJA9SvEybojAXIFAPVSQhjpOzKd
|
|
||||||
K+tVn9wYPmnMnvwwoRt4YMv5ZgMsMSr+Ke3Z0gnsWi1cnfZQvr3qv2fcIrpAxzKC
|
|
||||||
T9MAxar+nTyEjLICscURpiU9moaNAZ4u1tV+f0299AJJXsZNgSiQbRzRM2bKgilg
|
|
||||||
HB14AhZTpCfp9b4ARO7C9Auv5Pc4eTBhlAdwzr4T8RrjDUs+LCoQb8ib6CePbezN
|
|
||||||
EMee8jkCgYEAywB4sYzGQbXC+oCrG0ogelK7JFNLzKc6Xdv3rbBv43YgJ3uxyQ0b
|
|
||||||
X85qr1fe9Em9P57X9JQNVCRtZS+inhftlzNPFAFQ/qk9XV/cwgeX92RMoFgnAWyU
|
|
||||||
67tF4vFONEFerD3ccJqU72iE801iTiqQoiCeypSHgX8pNAxd/270KmUCgYEAxOe3
|
|
||||||
ogYduiic8zhrah7mhcBvb5umt05SjleiOTlmkIOGHrtvev8BQsMX/KSJefQU+MCF
|
|
||||||
E4UPs5itUQm6S/ZVlGk1NyUjb0xplIC/s5vGeYavJ+QjtYmRMcCfNCShsE6NRFyj
|
|
||||||
7nd35A80JsBr4DsfXnt7zjnd5jYUSykbPuHQRMsCgYA2YtvzBXogJKgmIM62svdc
|
|
||||||
jkmhA8fs/mh+uO30VK7FS+J1cYhCCwbodg7TB0GuRQs0vkOxPPENN+0vDMIOhO6c
|
|
||||||
cZygCXI/p+vO1l34hbxLBU4aL0PT99k2BqhEks2W5mSM1M34RRHdyizEWlkaBAFX
|
|
||||||
zlF8iKp9ISpSzXVpd7pmmQKBgAx6Rpe83XtjgXakN6JU7PTC2gzvhyQMkYy1nvET
|
|
||||||
Yx17SC+AXzMjH7hUVpvK7W9N+Vo+EPDIuNL/tNPy0txncsrh0953uwQdin8/nWZL
|
|
||||||
U8t1rnnPqjehzRKjCzOpsplSkP8pA7Zj2bQZBowCG5PtCzLYjmLmJdqlyKlupGxa
|
|
||||||
sPD7AoGBAJDvjwGColrYrAP/4H9JHssFJrk8LtT/HC9AHP0Qjk0rUedImblpSqqi
|
|
||||||
kRklhhmybgN7WNI9btJS1ou3jvUvYi3nzpVZUk6TFSIG38u+9//Na/B6adTsz31y
|
|
||||||
JbZOgxGXJ9Q8aygxE1aGIZtC2uSwqudEnRporjXHcaEsttkjDP+C
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBTCCAu2gAwIBAgIQWgDyEtjUtIDzkkFX6imDBTANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQwwCgYDVQQDEwNSMTMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
|
||||||
AoIBAQClZ3CN0FaBZBUXYc25BtStGZCMJlA3mBZjklTb2cyEBZPs0+wIG6BgUUNI
|
|
||||||
fSvHSJaetC3ancgnO1ehn6vw1g7UDjDKb5ux0daknTI+WE41b0VYaHEX/D7YXYKg
|
|
||||||
L7JRbLAaXbhZzjVlyIuhrxA3/+OcXcJJFzT/jCuLjfC8cSyTDB0FxLrHzarJXnzR
|
|
||||||
yQH3nAP2/Apd9Np75tt2QnDr9E0i2gB3b9bJXxf92nUupVcM9upctuBzpWjPoXTi
|
|
||||||
dYJ+EJ/B9aLrAek4sQpEzNPCifVJNYIKNLMc6YjCR06CDgo28EdPivEpBHXazeGa
|
|
||||||
XP9enZiVuppD0EqiFwUBBDDTMrOPAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
|
||||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
|
||||||
AgEAMB0GA1UdDgQWBBTnq58PLDOgU9NeT3jIsoQOO9aSMzAfBgNVHSMEGDAWgBR5
|
|
||||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
|
||||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
|
||||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
|
||||||
AQsFAAOCAgEAUTdYUqEimzW7TbrOypLqCfL7VOwYf/Q79OH5cHLCZeggfQhDconl
|
|
||||||
k7Kgh8b0vi+/XuWu7CN8n/UPeg1vo3G+taXirrytthQinAHGwc/UdbOygJa9zuBc
|
|
||||||
VyqoH3CXTXDInT+8a+c3aEVMJ2St+pSn4ed+WkDp8ijsijvEyFwE47hulW0Ltzjg
|
|
||||||
9fOV5Pmrg/zxWbRuL+k0DBDHEJennCsAen7c35Pmx7jpmJ/HtgRhcnz0yjSBvyIw
|
|
||||||
6L1QIupkCv2SBODT/xDD3gfQQyKv6roV4G2EhfEyAsWpmojxjCUCGiyg97FvDtm/
|
|
||||||
NK2LSc9lybKxB73I2+P2G3CaWpvvpAiHCVu30jW8GCxKdfhsXtnIy2imskQqVZ2m
|
|
||||||
0Pmxobb28Tucr7xBK7CtwvPrb79os7u2XP3O5f9b/H66GNyRrglRXlrYjI1oGYL/
|
|
||||||
f4I1n/Sgusda6WvA6C190kxjU15Y12mHU4+BxyR9cx2hhGS9fAjMZKJss28qxvz6
|
|
||||||
Axu4CaDmRNZpK/pQrXF17yXCXkmEWgvSOEZy6Z9pcbLIVEGckV/iVeq0AOo2pkg9
|
|
||||||
p4QRIy0tK2diRENLSF2KysFwbY6B26BFeFs3v1sYVRhFW9nLkOrQVporCS0KyZmf
|
|
||||||
wVD89qSTlnctLcZnIavjKsKUu1nA1iU0yYMdYepKR7lWbnwhdx3ewok=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAt1wXtVgB7+WLxJ7zaDukGiJO94sGUfOkBnhLnCmysdccFjUm
|
|
||||||
zYNnb6skDaoYmpp/gXtuQRgnPMwVOxpiW7eJkoLcSV8zdZ4Lyjngbdb/aqHFTr2L
|
|
||||||
pPnuYT6E16pREY4HBerCSZSSeEpaBrzLzhp3FnO3ZAFVyPE65PBZkFmjMc23TGNb
|
|
||||||
UJVUyIx3ZXPfBs77aQI0sYkiUr89qsB4q0ac6EWmAusesGvY1etZ50com0Hbh4SW
|
|
||||||
GD7xcFXxcE0+J29tDxc+QTmL74bCbEHKcgf9DSKRVZtAzkHnRTbPIpBs8CGmVIaF
|
|
||||||
Sb0rgHKBwKxB2bK+9/TrI08AkrdLhBzWbnvHFwIDAQABAoIBABDIWpksFX1OLtVP
|
|
||||||
0Sqcrt//fOfWbz0oBj7bWtxPyr3RWQ5FTihoWxrS+MlRZNAdzQbec9B8c/byHQ1c
|
|
||||||
VF1dtrdUx/HlR1IAJcccNgkHsTgi12rmGXZ/s8xtyv3sZmArdkQZ4S+X7DIbaBMO
|
|
||||||
y76xGG5TKBl8r8vlHIVg5Gm8cp33tSIP/rX3cZHhZ/XLICfqyynkqiaaudZtpl1g
|
|
||||||
XVyO7YxX3bnhOMWihS/734Vx6CkHQxgm2mOUYZCWAi9Bv1pwWIJYk9XeLCrEfgkj
|
|
||||||
DaxBQPGjeqQ1+J9y4E+AuicJMQ7VQmvdQ+sF3tC5DUwVFODYar0KfBwKG+ZGkPCB
|
|
||||||
yH9G9EUCgYEA2sFQp8Wapytjw96fZjVfuFKjbDjAcSKvF3ucHDW4CDX4FP7Ns5GB
|
|
||||||
Cfm25uIwmRIhjzERck9tObUgGyZQ683k+4+ambOWvgkbqLLw1SGLWTx64cNr8XKB
|
|
||||||
dCD5DP0yZy9vhBEhPVR0m0Lr6zFDQsAEEUtQmrues+Dixks1/co9HcUCgYEA1pQH
|
|
||||||
ouEIDlQIS22an/57ki6N5aFaoThHbNXZ6/cMidhKG00uRP6kA5EGsu/b9dCMzNJN
|
|
||||||
OB+Btn67vztfHXF5atUHqA4doNBj2o5QpXOy5UlkenjqPms+YSiB4tjPj7+zYch/
|
|
||||||
jusSPfnNboB0+Bq3H/zHxcREkDGbiXcuCCkEGysCgYBxZDFdtdUzgA9HsXcosNP8
|
|
||||||
JIHnkAdY3aSq5H0INmQ9hVQh9e5EfVDJDfLb/TU5sydIJSQo/7jbZ+LLj/H0ORbP
|
|
||||||
uyFlOK0Ttn7q1E53+9pSmEIOEpE6Z6Nowcq3C+v7hqAkcgir1MJY1Libgj6eNBAn
|
|
||||||
ssWGX2ilTxXduZC0DAfgDQKBgQCLtHNIU7T4BzQjT+gFVR3FLjRKloQ4RTkTniQ1
|
|
||||||
InLyaHTPU6/VUekdPVYcOFiAsdiKHj4SVUkRtW+tcQ1bUR8ZNDu46f/WTPdGO7Q8
|
|
||||||
FJkb+W3G42S3YQGLJmFyfXCeCdTTzENonJoS6cobsNz3EAW8eMrkcwWkz/eRR5wb
|
|
||||||
ygCXYwKBgGXiHmyFHyEi/m2RvlandCgxDneyWrM9yH8yJAeKvtzrVQtWXAAfS55u
|
|
||||||
ozBzsQxnYDZW8BTkPuSSfcj+h0ArJom4NusRHYVf1+WlpPjQW3OYTCGR7ZuJnB2Q
|
|
||||||
3YX9p3jyAln9ZnQMbzAGj3aPMEoTdUF5QeqXNgX9wOkD4MqVsr1w
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDmjCCAyCgAwIBAgISBfySdZ0A9mv868RaP62AnRGrMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MTcxNzAzMjVaFw0yNjA3MTYxNzAzMjRaMCIxIDAeBgNVBAMTF2hv
|
|
||||||
bWVnaXQuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
|
||||||
a2FHSg+Sxk60SVqrqOgF34Jd68deYxLXmKsb4IXQIqTg3c/wY3cHwLqqgVPjbQUD
|
|
||||||
23pB+ghro5pAUQBHS6W6NqOCAiQwggIgMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUE
|
|
||||||
DDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTdBEW+vjkX+8xT
|
|
||||||
eSx1+8eq8JmHeTAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KRyjAyBggr
|
|
||||||
BgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNyLm9yZy8w
|
|
||||||
IgYDVR0RBBswGYIXaG9tZWdpdC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAI
|
|
||||||
BgZngQwBAgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U4LmMubGVuY3Iub3Jn
|
|
||||||
LzQ0LmNybDCCAQ0GCisGAQQB1nkCBAIEgf4EgfsA+QB2ANdtfRDRp/V3wsfpX9cA
|
|
||||||
v/mCyTNaZeHQswFzF8DIxWl3AAABnZybSkAAAAQDAEcwRQIhAKoduGqfIRaSj1/P
|
|
||||||
cKURgfI2Z4AfQh9aabwwQsxK4GCoAiBKu47TQW7qPE7jZJh2RXjBfU+c/4nXc7bO
|
|
||||||
v0pxqo+KXAB/ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV05Mz/ZkYq0cjAAABnZyb
|
|
||||||
SnMACAAABQAH/ABmBAMASDBGAiEA/VWgMUTDuLN6X8748c2iOwG4Y/nKvesejOWa
|
|
||||||
5rtSO9wCIQCSEPlVV75ZVwiQuqp/BlSQB26UrT0/UXVOpi6aIgDwwjAKBggqhkjO
|
|
||||||
PQQDAwNoADBlAjAEQHquMjFHuX3ox5KqOIz4h0HI6HLL0+myDP4GfTrOfaOeSEho
|
|
||||||
VHfxKPohxtiJ9YkCMQDT9jn2ls0qupqtMpCyhj/9ngASoCxZaTsTxWn3BGsZM4vh
|
|
||||||
Z8jkBdztWCSkzx2pFZ4=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIIKjPCN4ROsOfaI5ax7Ad7LA+tXgBGe1uXUqwdbuBKa4oAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEa2FHSg+Sxk60SVqrqOgF34Jd68deYxLXmKsb4IXQIqTg3c/wY3cH
|
|
||||||
wLqqgVPjbQUD23pB+ghro5pAUQBHS6W6Ng==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEA18KT1RcbYgMLoibSlEvey87TDfA8VdhVbqE7JgFYZwFGwDMm
|
|
||||||
k7nLnswzoZ+hjOGDl0u8zluF0Ro5eWTqCpod1hawdftcLQH7F92DisxQClNuVuUD
|
|
||||||
kUkrvwn097vZSzDd5xkme7Dwvhtx0X748rmP6sjtZKXMefCGmQWgaZ+eWSNVya1w
|
|
||||||
hM3j/Tj5CmKPcI2W6d2JaDAkBThqIScPZAmP2pv6uy3HycfkpdHznZDUxwG1qP7I
|
|
||||||
LJlg47lgPzNKVtI4YA+mshFtnWiyfM0o+yf0jQXnMo+zIHmqdJt4g9S41KBV1Z4B
|
|
||||||
gj0j1TCb7shiKq/M1HVO1spTYsc947I9S892QwIDAQABAoIBAF10I7k4PX2aCRdu
|
|
||||||
jmZ6aGHJz2PpqxCZ2ANHpcmD6qkPBfipDywMXVSGaVS3wm81nNxTC1Asl00neT6K
|
|
||||||
Bc+aypKZGEy6F8ZM5dgD8/6SGZcnZRMRNhbfZSnlo6wMOwXVAEChhagsz1HgrE+M
|
|
||||||
GkN0OZB+AElIgUVN99be94jYgOtlVWYWOiAsfzsaAQRTTzNIbdfza//4dwPINGSi
|
|
||||||
ymr4EjiN6Lp9gNTw9FbDL/YOwr8+Eh1THfj8vVBKoyUM0bJqXcruQck6zHnPeGUf
|
|
||||||
K7qJWyQLZNgrVE9bKvG99cqNSmkl1OL1O7swK4CLQ7b7/GC02W/PVKyCFB2pmUjI
|
|
||||||
cKPaJCkCgYEA9plM5yELaHux4rRLptwz6CPCpV+bXO6eX+Fv3gq2r69lxnkOLqos
|
|
||||||
auGlIaE58WLIkT7aglt/9qUVAf+5ZU5ze4cEZ5B704/IyLS5DrTc1r/xh1ZNmZae
|
|
||||||
iGmSyLJOPxvQHBVlnIRVZMeikSD82+frx9xnn3itWFiCenMuTrujKMsCgYEA3/xN
|
|
||||||
y2oA+eJPi+ozI+o/x+L3SDus0Phewr04/TviI8mT4mm4lBCNlt8DdcHSWyRUZsy/
|
|
||||||
GPHn/LPojDC7P6I2weLsUO7+vHB1HVtWw2YT8eaK6t1OqZwdJ11ghVr4E2LygQ1Q
|
|
||||||
EOaVqxtdNJRJnbYapzHKifTUmRpZ1wBdiXAC0WkCgYEAvKYaRtbou02lkCENnuDm
|
|
||||||
dLimt4ykdju1vPPheKQJje1IlsUVLG3S/RESGuAUS62ecj77Oq50/mLb52OSmQWj
|
|
||||||
IuTvYasOj5J3r9NRnwaNy1ubkkVbqBupvAHH4PFHGtBULKfRzCMQkMCIhS4PQsvx
|
|
||||||
fDwIqd7P/b34U2S6EFFLSHECgYANoFjPPjSu/xCdz3KrBa45p9opX9AEqoeBS2ez
|
|
||||||
KDh6uuGvTYU4JMWoXwrj2BXHC6/CzUP27YiSfBNyq+hIV8MDCp4b0l5W8nR9g7gE
|
|
||||||
jSo7di4PWcVWVjQD2A9uLXmYHFXqeffb/1stnK2P7FGKMbDvaP0MZYOliM/cX55R
|
|
||||||
JSpWuQKBgDuTDABQA8tmBkwo2X2NQZdEG6Q1xhxuZrug6zRDzCC4nqJq4k7JaNSX
|
|
||||||
uvBq8Uyau9luLu7T2soUaWmQObFrpBZuIcKf/UByhbHA8eBdHAHNdUaUa9pVGk8W
|
|
||||||
nkboRwh2nwdFLjDcvKqhIdJAAm4vMSc/HnKWpxjIqj02KyHL5mB0
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkjCCAxmgAwIBAgISBnUG70RV4b9fPF7DNUOL1RwlMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
NzAeFw0yNjA0MTcxNzA1MzhaFw0yNjA3MTYxNzA1MzdaMB8xHTAbBgNVBAMTFGxl
|
|
||||||
ZGlnaXRhbGJvdWRvaXIuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPvF+
|
|
||||||
08TgMlVBOj8cE1VdnHWiD+8IytHx/bSH1C/cSVxg60y46+MnagjbdbDH2bLZ2Nn8
|
|
||||||
syQLo2CKLNoOcHBZsKOCAiAwggIcMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAK
|
|
||||||
BggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRboVEnHfxId40QdWEC
|
|
||||||
aw2MGHHpVDAfBgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEF
|
|
||||||
BQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wHwYD
|
|
||||||
VR0RBBgwFoIUbGVkaWdpdGFsYm91ZG9pci5jb20wEwYDVR0gBAwwCjAIBgZngQwB
|
|
||||||
AgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U3LmMubGVuY3Iub3JnLzM4LmNy
|
|
||||||
bDCCAQwGCisGAQQB1nkCBAIEgf0EgfoA+AB2AJROQ4f67MHvgfMZJCaoGGUBx9Nf
|
|
||||||
OAIBP3JnfVU3LhnYAAABnZydTiIAAAQDAEcwRQIgdBvmPEo5ubkKunBz0W5hvTq5
|
|
||||||
RDZsXQ/W2UOeb2GV5jUCIQDDF5U9UTlvXdYFaYIbNiYjDqWCdq+oKoh223RIZAJs
|
|
||||||
lwB+ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV05Mz/ZkYq0cjAAABnZydTkwACAAA
|
|
||||||
BQAH/BreBAMARzBFAiAw21QEWisT3ZbJu64GaANr8BCBDC87eZ3/kaXDeLGsnAIh
|
|
||||||
AM/4d4+KCHM0DIJlX5uFwkIodq14k3DMpnsRDo5VJJWCMAoGCCqGSM49BAMDA2cA
|
|
||||||
MGQCMBcLBNRSXmUgUZb9/EIhWmCMns3gu+Q9pnyEQurOp7LZpKga83jkj+flt6W8
|
|
||||||
mk4ytgIwD7XMHUG5pH19pcm5OKmQ8P+gBS+C9nq4+J7ih0KJ3A+sX+KcJpyi7wTX
|
|
||||||
irxUSi65
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
|
||||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
|
||||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
|
||||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
|
||||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
|
||||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
|
||||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
|
||||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
|
||||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
|
||||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
|
||||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
|
||||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
|
||||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
|
||||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
|
||||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
|
||||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
|
||||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
|
||||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
|
||||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
|
||||||
+VUwFj9tmWxyR/M=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIBcJCs+3muGFQeUUqu9MaXc8d3g+goe+Ug7J2NuvphkOoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEPvF+08TgMlVBOj8cE1VdnHWiD+8IytHx/bSH1C/cSVxg60y46+Mn
|
|
||||||
agjbdbDH2bLZ2Nn8syQLo2CKLNoOcHBZsA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkzCCAxmgAwIBAgISBRRu2SiVN4mjdKWnsPUP083aMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MTcxNzA3NDdaFw0yNjA3MTYxNzA3NDZaMB8xHTAbBgNVBAMTFGxp
|
|
||||||
bmtzLmJpbGxpc2RlYWQuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErlt9
|
|
||||||
cwSzz+fJF+uZI0uyGnaDO5O8pPNlS4iVOC0EIOn7JFjepvFTi622jFt4Zi9gbV1t
|
|
||||||
gm3hXLNbW/X8/lsiI6OCAiAwggIcMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAK
|
|
||||||
BggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTj3msMAmSrI3XDCJ6M
|
|
||||||
8c8Iy/Uu1TAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KRyjAyBggrBgEF
|
|
||||||
BQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNyLm9yZy8wHwYD
|
|
||||||
VR0RBBgwFoIUbGlua3MuYmlsbGlzZGVhZC5jb20wEwYDVR0gBAwwCjAIBgZngQwB
|
|
||||||
AgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U4LmMubGVuY3Iub3JnLzkxLmNy
|
|
||||||
bDCCAQwGCisGAQQB1nkCBAIEgf0EgfoA+AB2AMijxH/Hs625NWsBP2p6Em3jOk5D
|
|
||||||
pcZG+ZetOXWZHc+aAAABnZyfSGEAAAQDAEcwRQIgUK2TZ8zPwNJraIA+e1v5vW+p
|
|
||||||
28gbcrqnZMYVLST6xAwCIQCG5Jviip3x8HQR8/g210w/n8Pz9i3V3nfaltWQ1Zz7
|
|
||||||
aAB+ACbjZG5YaSEjvDQ/RyQ1mzeSzSRaiNgV05Mz/ZkYq0cjAAABnZyfSG8ACAAA
|
|
||||||
BQAH/DREBAMARzBFAiACKAYf95bToh4jieRBArPGtHFMwmZXFNnXWr/V5i2fhwIh
|
|
||||||
AO5fmfcFt64RrEiSiz+8ZUePTc+kQ5UWqfqcDNZuiarSMAoGCCqGSM49BAMDA2gA
|
|
||||||
MGUCMEWItGD23HQkTq/Z+qW0NB90KDAEhpoIvqN0kFv7OYfoK+ELZ94J+UwwJdC+
|
|
||||||
ZPHEyAIxAPCVwFCeU/P37DU4QlQImrEcGk6YBVivUFsrmbK2YfzfnrpSVDN3bt/x
|
|
||||||
y2guMZTLQQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIG2qY0oLeFCeMLS6x+8tjVlW7+WbGHsqmCKm6F/I/DFFoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAErlt9cwSzz+fJF+uZI0uyGnaDO5O8pPNlS4iVOC0EIOn7JFjepvFT
|
|
||||||
i622jFt4Zi9gbV1tgm3hXLNbW/X8/lsiIw==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkzCCAxigAwIBAgISBe3W4hIHs3wjsEG6aqbFA2j9MAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
NzAeFw0yNjA0MTcxNzA5NTdaFw0yNjA3MTYxNzA5NTZaMB8xHTAbBgNVBAMTFGxp
|
|
||||||
bmtzLm1ydGVkZHliZWFyLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERGEK
|
|
||||||
grfmOJFBb5pzv6ZS9va1hcNRfi53xwBXh3OYWCGJ4fD8b1ZwFpJbZI6xzsnmMzTs
|
|
||||||
jQoCBPtEmCk4xCGY/KOCAh8wggIbMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAK
|
|
||||||
BggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTgb59HmrQZRn75m9Y2
|
|
||||||
HPRZHrmRcTAfBgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEF
|
|
||||||
BQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wHwYD
|
|
||||||
VR0RBBgwFoIUbGlua3MubXJ0ZWRkeWJlYXIuZnIwEwYDVR0gBAwwCjAIBgZngQwB
|
|
||||||
AgEwLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2U3LmMubGVuY3Iub3JnLzEyNi5j
|
|
||||||
cmwwggEKBgorBgEEAdZ5AgQCBIH7BIH4APYAdQDIo8R/x7OtuTVrAT9qehJt4zpO
|
|
||||||
Q6XGRvmXrTl1mR3PmgAAAZ2coUU+AAAEAwBGMEQCIGQCI7dGWydSuY26+MykEePI
|
|
||||||
a3whSwzjDk8rkCRN2SDkAiA9Qn37uN+knijljnIKzrz4662nzyuzeO7Xrb/vo04r
|
|
||||||
bgB9AKgmy+MKxjUSRlM/4GXxTxnZbhkIE8Qd2W15ALMSPFUnAAABnZyhR1EACAAA
|
|
||||||
BQAHRVQ0BAMARjBEAiBMhc8XM3R9WVy8g5nPyRDGq5euPOy54Kror9/G7eSbUgIg
|
|
||||||
COFcxoynlPxmEs/Wq/bHXQWR13DkvAZcfRQvvmE69IAwCgYIKoZIzj0EAwMDaQAw
|
|
||||||
ZgIxAN3CgnVOfvBR0IVTx7lj0PngaPR2l9/PUO3ZGC0JwwgLYMaC4Wj3s5nyEkEP
|
|
||||||
YOMpZwIxAIH2fwAwnQ4NpwTxP7foq7yFku/+FDNuAqNVk/1XRtoC0gWL0+5jdeOh
|
|
||||||
LhbPvogGCQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
|
||||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
|
||||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
|
||||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
|
||||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
|
||||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
|
||||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
|
||||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
|
||||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
|
||||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
|
||||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
|
||||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
|
||||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
|
||||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
|
||||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
|
||||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
|
||||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
|
||||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
|
||||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
|
||||||
+VUwFj9tmWxyR/M=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIFsb2NvEJ2uGR4/+NBFXTo2hS9sqd4V+FGx5zkj038v+oAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAERGEKgrfmOJFBb5pzv6ZS9va1hcNRfi53xwBXh3OYWCGJ4fD8b1Zw
|
|
||||||
FpJbZI6xzsnmMzTsjQoCBPtEmCk4xCGY/A==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDkjCCAxmgAwIBAgISBhaxUcnziRQeWEELquhgqfiOMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
NzAeFw0yNjA0MTcyMTA0MjFaFw0yNjA3MTYyMTA0MjBaMB8xHTAbBgNVBAMTFG1h
|
|
||||||
aWwuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtMNs
|
|
||||||
EPgwS4uHHRgv6iekRln5BLMYn61kMeO9EivXoqCeyAg1YfFk88O7Q45H/GFYl5rv
|
|
||||||
HE+534b8g5233k0XT6OCAiAwggIcMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAK
|
|
||||||
BggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSd+VlvcH6LOX8OHPD/
|
|
||||||
kP8nvQfrLjAfBgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwAgDAyBggrBgEF
|
|
||||||
BQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNyLm9yZy8wHwYD
|
|
||||||
VR0RBBgwFoIUbWFpbC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwB
|
|
||||||
AgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U3LmMubGVuY3Iub3JnLzE1LmNy
|
|
||||||
bDCCAQwGCisGAQQB1nkCBAIEgf0EgfoA+AB2AMijxH/Hs625NWsBP2p6Em3jOk5D
|
|
||||||
pcZG+ZetOXWZHc+aAAABnZ132zkAAAQDAEcwRQIgKRJ+dtJZctC7FoKJLnMoQpFt
|
|
||||||
qr0M2S6xZW+Xap06Yq8CIQCISyv008YBr0QfEH6O5Q0tmY7JSTcUwV4lONBl6isZ
|
|
||||||
XAB+AGz+UBlDqF6pFrxS0TPk3Mke8UEcfSWEINFzgJ4YGOs6AAABnZ13248ACAAA
|
|
||||||
BQAHo4LKBAMARzBFAiBodIVh2P5BcJkyiK2gZ3qdkbTdUZU/NhFKzJ6Ni4Rq3AIh
|
|
||||||
APeVfgb4rgyYfyyPQXxGgTCwdSGr+rupI4V2ZQVslMl+MAoGCCqGSM49BAMDA2cA
|
|
||||||
MGQCMH40XII+D2gkJcwRgdxhZOBpWHo1mPepLN3TZI/Ii4Vh9mF/HwVaDu9Y5mdU
|
|
||||||
ZFRhDwIwGOfd9XwZ2XvLbsfqbGxxMz6YDuRWQEuL7IVfjg5vcaGZnLUu7y05fciJ
|
|
||||||
N5JucskP
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
|
||||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
|
||||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
|
||||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
|
||||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
|
||||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
|
||||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
|
||||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
|
||||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
|
||||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
|
||||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
|
||||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
|
||||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
|
||||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
|
||||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
|
||||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
|
||||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
|
||||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
|
||||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
|
||||||
+VUwFj9tmWxyR/M=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIJCeZkg84q6THGikzSJoHRB/fFJtzohr3K8R+HeJBQsaoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEtMNsEPgwS4uHHRgv6iekRln5BLMYn61kMeO9EivXoqCeyAg1YfFk
|
|
||||||
88O7Q45H/GFYl5rvHE+534b8g5233k0XTw==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAtFGL1Lhh1fgQBQQN4E4ip52qsVbOkfmiYStP3j9KT0n7UxA3
|
|
||||||
WlOaNTlgcM0O07ZcZf4EixlRB4Q1jiVt8taZDjxwXrCAiscCkMRzt+IgNATRx1B/
|
|
||||||
nePPK50hjtrwbXPcXvCV0L15/0PdUkBRdpvkTDDI8aS15t8YXyyOhR0O54Z2yOJI
|
|
||||||
KcfkzdOWG0NlxfN+l3zKkiAVRnl8ILoVFvPM1bTPisKnZ6nYkL8sOx/qpbWJaJtN
|
|
||||||
oWgYTszrn05kMgNY2dN+/Fr49uCcQjGN+urXK+Pt04pOlQ+zUdVYK9bRWHovsrY+
|
|
||||||
XIIuHCufPxGOmBaBiamwJZgnie0bPh32N2L8ZwIDAQABAoIBABAHH5LCQOVargcu
|
|
||||||
xmeltQGJIN8FLvSyvR2TUqoX82xQ0HzK+DXt2yCCqnExs5uwnfiYN6HVl5TqH4iJ
|
|
||||||
sy2JUwQnmHq83ZrNowtogDtcEi4NhPKz07lzwmUctnA9mG63hGMRUiptF9GkyqDB
|
|
||||||
BCdde/wkafgbV+qJnLT4/5doGdG3xSuVP0kQ++cIZEjMOI37VzdI6aR/7fxfRxHt
|
|
||||||
AktbsNiP4Rjdw1XfUaa6J/qXs13m380u8+fnA9WFPp0gCc3sKt6p9xL+wlXrZtSR
|
|
||||||
QZgf9/ext6j5H6FACYZlyB8Yp+VwQFubb503rTc4Nz2Uo9877lSVpq6JbQRBwM1K
|
|
||||||
YfyNyQECgYEA2sUBYXnz/Mf4vp14iZAj5xBWhVM4KnWNI30Oo87FtcCAvT3VDK7P
|
|
||||||
uv79ALnw1TfUzfq/6+hEtkWHsfS5bRSmeOfB3Fm+FO0i6gSRz26Nx7xIbokjOyal
|
|
||||||
dc7rT5jnDxX6I9OAOq7LQ6hWWhHqEeAH96d2oO9NX10qUf42emMzTyECgYEA0wFe
|
|
||||||
seiYGOPbZiz33CwHu0XAkWpQZkMClABc6n+F+SE99axtzPQmfDob/mmVmMlc4MBa
|
|
||||||
t/daxDehRYP3+otRHvx2SHl1GulSBmJM6ef+1gctIh/FGAO6kZrZ7SvznJvKu/R9
|
|
||||||
arfD7yFE1++Elr2SxsyjLudNQzVPqOOJS5f2AocCgYAB6oPOlMDcT+wPz1VE7yxB
|
|
||||||
U9VOKaJuTMVFsEy2hpMYumzmO2poSAetvZn9raM8WtbUTwPrTwd7CTTdDCWrnOiw
|
|
||||||
WmdKRMbza/hIUG3ugStgundv8GeMlxQP6hYJhm9PpIOiWLHg0bMaDpljBJEmQu4O
|
|
||||||
7zqMwkvNMAW03iMgA0ppwQKBgQCShO0AlQaoofCDrs4eMOTdgb4KO8zAdd+gbfAX
|
|
||||||
VZ3uNMsVgTpti0v+D0vJCgA7K/g2iNt1y2lXv1lZMB5N99fIsH5iLRTILyQqErBd
|
|
||||||
7B7k9+67N1xhJJW07dZN/qsXIIdSpJ9CL4D62Bs55rQnCFSXfxoBQ9Q+yxIZsIZx
|
|
||||||
23+UmQKBgEaTy1m9wi/A3qtshIMcw4wyADZ93uf/rVi9rYFxjdTYcX3JblfWIIMm
|
|
||||||
Qgj5R/XWc2Inigng1kx3cD3o2fbNWjFAGTXXeaCvPmex0N6t990UCq2jp2o30p8j
|
|
||||||
2NU4CkWnXsQOr2mr7d2TdS4yAVnxb+iaLG4rBFB9wquJbeGqlevr
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBjCCAu6gAwIBAgIRAIp9PhPWLzDvI4a9KQdrNPgwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAzMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDEMMAoGA1UEAxMDUjExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
|
|
||||||
CgKCAQEAuoe8XBsAOcvKCs3UZxD5ATylTqVhyybKUvsVAbe5KPUoHu0nsyQYOWcJ
|
|
||||||
DAjs4DqwO3cOvfPlOVRBDE6uQdaZdN5R2+97/1i9qLcT9t4x1fJyyXJqC4N0lZxG
|
|
||||||
AGQUmfOx2SLZzaiSqhwmej/+71gFewiVgdtxD4774zEJuwm+UE1fj5F2PVqdnoPy
|
|
||||||
6cRms+EGZkNIGIBloDcYmpuEMpexsr3E+BUAnSeI++JjF5ZsmydnS8TbKF5pwnnw
|
|
||||||
SVzgJFDhxLyhBax7QG0AtMJBP6dYuC/FXJuluwme8f7rsIU5/agK70XEeOtlKsLP
|
|
||||||
Xzze41xNG/cLJyuqC0J3U095ah2H2QIDAQABo4H4MIH1MA4GA1UdDwEB/wQEAwIB
|
|
||||||
hjAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwEgYDVR0TAQH/BAgwBgEB
|
|
||||||
/wIBADAdBgNVHQ4EFgQUxc9GpOr0w8B6bJXELbBeki8m47kwHwYDVR0jBBgwFoAU
|
|
||||||
ebRZ5nu25eQBc4AIiMgaWPbpm24wMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAC
|
|
||||||
hhZodHRwOi8veDEuaS5sZW5jci5vcmcvMBMGA1UdIAQMMAowCAYGZ4EMAQIBMCcG
|
|
||||||
A1UdHwQgMB4wHKAaoBiGFmh0dHA6Ly94MS5jLmxlbmNyLm9yZy8wDQYJKoZIhvcN
|
|
||||||
AQELBQADggIBAE7iiV0KAxyQOND1H/lxXPjDj7I3iHpvsCUf7b632IYGjukJhM1y
|
|
||||||
v4Hz/MrPU0jtvfZpQtSlET41yBOykh0FX+ou1Nj4ScOt9ZmWnO8m2OG0JAtIIE38
|
|
||||||
01S0qcYhyOE2G/93ZCkXufBL713qzXnQv5C/viOykNpKqUgxdKlEC+Hi9i2DcaR1
|
|
||||||
e9KUwQUZRhy5j/PEdEglKg3l9dtD4tuTm7kZtB8v32oOjzHTYw+7KdzdZiw/sBtn
|
|
||||||
UfhBPORNuay4pJxmY/WrhSMdzFO2q3Gu3MUBcdo27goYKjL9CTF8j/Zz55yctUoV
|
|
||||||
aneCWs/ajUX+HypkBTA+c8LGDLnWO2NKq0YD/pnARkAnYGPfUDoHR9gVSp/qRx+Z
|
|
||||||
WghiDLZsMwhN1zjtSC0uBWiugF3vTNzYIEFfaPG7Ws3jDrAMMYebQ95JQ+HIBD/R
|
|
||||||
PBuHRTBpqKlyDnkSHDHYPiNX3adPoPAcgdF3H2/W0rmoswMWgTlLn1Wu0mrks7/q
|
|
||||||
pdWfS6PJ1jty80r2VKsM/Dj3YIDfbjXKdaFU5C+8bhfJGqU3taKauuz0wHVGT3eo
|
|
||||||
6FlWkWYtbt4pgdamlwVeZEW+LM7qZEJEsMNPrfC03APKmZsJgpWCDWOKZvkZcvjV
|
|
||||||
uYkQ4omYCTX5ohy+knMjdOmdH9c7SpqEWBDC86fiNex+O0XOMEZSa8DA
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAuE+xCGBSEJ9SMZCGTawqCKupoAOukBR3I/i3hjwy5fc/9jm7
|
|
||||||
0jzCKW5Y0WJzAesSI3SVoTEg19wzskn25G46Fr/fe1b2V9qfCuckHWIavCF8Y48q
|
|
||||||
YKXoiMunTFyGtrr2waY1B6gU3eAqp1lLr0bmPtwQwL5iE/ZG4fhAKkxznPaoJJ/X
|
|
||||||
GE2OYuYuWequlijC0474shT4e8CTmYjrrdj+AkHpMWnAe9FUzfPxGKsPA8qs0i5C
|
|
||||||
yq5HCNp7snc7KK32DBvLV20fgMTiuOfurCXYDY7LqOqw5KlWXPmSjw/kfzRsMonE
|
|
||||||
ouDUKlWylXOoe2lrXF2OTB2YIYNy3rNDHXAC5QIDAQABAoIBAAQNIZW1TLOxIm5u
|
|
||||||
YC4rZPlWHdWjikeZx4+kTmADPG9gURXbHLhV93YCxxPp9dManp/l/P1maTPArM5t
|
|
||||||
s64l1R2KzKfQ2GJDrv/5AJerwFPKNnCxMcWFLnh5TFCQbrHSdMBhCqSqZDQ6hfCy
|
|
||||||
Dm8uuaEAMQpHjqJxMdgsOIU/Gah4z7OCSuzeJ731DOBnG0Qk38hE5MrdJLbywUOQ
|
|
||||||
c/NfENf16t6DfTkzvJu8CEEg6SLEazFOUssDQVoDgyOqmJRf1d0VXulfVvm50N8o
|
|
||||||
Fwgc79dfsdNMHI9IbcTfJD9xPzpwfhwcYAnKgdMXDzjU7a8ibYGdiUaQPlBmLdUh
|
|
||||||
jyEAo0ECgYEA8Rj5uAw9aJxgDrdUFqNfDWFtnj6KHA0eBQFYQmmZHW4OWcke3Xcj
|
|
||||||
V5GBw6Oy/nJWFIpQa4v1NMvufW6JsLVokhglEEkDAXABpSNSVZ92MZdBhZGh4DUx
|
|
||||||
T2aWalhgr53A8+6h8/VyozCmY34D5K6u4izemZ68NXu4tcIvE1rE0sECgYEAw7Qn
|
|
||||||
jyB8Q7empbm/Mmekjcg8KKfaleaM1rSsikUJk0nGR/QfQJ6gv3pn/yuiY2KKCu0G
|
|
||||||
/V3CoSYeg/7vQ+wn0lfQGPEQw+kU4YSH8WN8OGC4sxc7wtoITPZZkzcxGZY7S7sE
|
|
||||||
rObODdw//4qQ3EktQhXDzVvn6m2ee7rpIgV5zSUCgYEAm43tsJ3VESWzpEsMaf7G
|
|
||||||
WS+/NhZLrYWZFMmlVFQlgiN8BtoInAM+PkWXX87CsgC7IU2MTZdjgckB+tPS6rxg
|
|
||||||
18HUSAmTct39cbq0aKIV9DEPCUrJEou/YOdjrQGQgD5cPAZ/X5PBfyDoedDYWjeK
|
|
||||||
hktE5ADSlf9ZUYwUK3yo+QECgYAee5Et2gGBCroKVkRRtZMMAoRcUMjbUG3fg4Tc
|
|
||||||
hKRZLMSVsJCtoAepy4cnV8STdmXKDeFo1ZHbR/S42pyqF76cJNFlESdrXILEHcCO
|
|
||||||
+NAAeBBM1PGaCBwC4NxS8eXT9nKF+TthMxIlVokhZJPru/owsPMuqYIWIbztyM9H
|
|
||||||
XVL7gQKBgG9ff1FvX+vRLGN1ro3kHqD9BRmo0Tnt/tjz8l9cKJn/ELrabp1cblqI
|
|
||||||
yrMy2hQAIepvZbrurw4e9ZXKBqUUT+pL0Kf2/+alwn9elqZbDYSttw01xWwoKpRW
|
|
||||||
w+tYPoiydYbTinN6hXv5r99H3s1yk6bmkUyL+Y4UptBpRFf9nwd4
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFDjCCA/agAwIBAgISBkihEmQzDzkDD6h2jqmzYmBGMA0GCSqGSIb3DQEBCwUA
|
|
||||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
|
||||||
EwNSMTIwHhcNMjYwNDE3MjEwODQ0WhcNMjYwNzE2MjEwODQzWjAlMSMwIQYDVQQD
|
|
||||||
ExptYXR0ZXJtb3N0Lmd5b3phbWFuY2F2ZS5mcjCCASIwDQYJKoZIhvcNAQEBBQAD
|
|
||||||
ggEPADCCAQoCggEBAMhIqvHSPpmjNut00DD0FUswvljRLittP0UmS299xfMMgaEf
|
|
||||||
lx3rXsaszkYq+/Cyqvv34BkIiLAopVaLembcG0pD9jPDcFd5fn3UkXABybpBRmQ+
|
|
||||||
pvQDh4yGiPhXSJCMwXSalf1yv44jJbQbqvxH0m43qx9m8otPRGEWx0aXAPXZyp1k
|
|
||||||
7XV+/Q1cMqqgp62Mv829/5+UboexgUi1xIi521eAigqZYp7pGas13myTZGwy05S8
|
|
||||||
mYKfbhg0JqbVsdp7QAeKuAx4TBIvXysSc8f/8BvQA+WKcIF3eQvalnsy1L1OMZ5g
|
|
||||||
mPVIE9FZATa18XCfx0xt7nurWf/f8zxkJj7Vps8CAwEAAaOCAigwggIkMA4GA1Ud
|
|
||||||
DwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0G
|
|
||||||
A1UdDgQWBBQ2fIe8jiTYEmwMNVN0EgWrz7L7KDAfBgNVHSMEGDAWgBQAtSnyLY5v
|
|
||||||
MeibTK14Pvrc6QzR0jAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0dHA6
|
|
||||||
Ly9yMTIuaS5sZW5jci5vcmcvMCUGA1UdEQQeMByCGm1hdHRlcm1vc3QuZ3lvemFt
|
|
||||||
YW5jYXZlLmZyMBMGA1UdIAQMMAowCAYGZ4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+G
|
|
||||||
HWh0dHA6Ly9yMTIuYy5sZW5jci5vcmcvNzEuY3JsMIIBDAYKKwYBBAHWeQIEAgSB
|
|
||||||
/QSB+gD4AH4ARq+GPTs+5Z+ld96oJF02sNntIqIj9GF3QSKUUu6VUF8AAAGdnXvh
|
|
||||||
KQAIAAAFAAQoeqYEAwBHMEUCIH2htZhA24YtXTDcqoxqdthSBaEQqhfcOxSFblGs
|
|
||||||
eQn3AiEA/9NIrjEUbfnoKQtHlcbhDK98KI8fpj/FEnZXKgxP8xwAdgDXbX0Q0af1
|
|
||||||
d8LH6V/XAL/5gskzWmXh0LMBcxfAyMVpdwAAAZ2de+DlAAAEAwBHMEUCIQCUFmwE
|
|
||||||
pvVNWx9Yf3W+V49NHj/GU+vfcRzw3A2ZErw5VAIgRv/A1gZPSsWTR+6z6rqbVtsn
|
|
||||||
qy3DoqiCfLrTFMQ5h1YwDQYJKoZIhvcNAQELBQADggEBAKBwxBx3xa07BfQ4AbQ6
|
|
||||||
m+NF0RhW9KXuhJ57C2PnAaKyHBmd0oZcs3zHW/PYJOaiwc100nHXWB5EoFU2upJc
|
|
||||||
mO1D9+SyfhpES3jIoZiXZUFRn42Mc5QTqbo7uDeSoNe4ToHIp7HBQBr4pYIYBumc
|
|
||||||
QI/pXGT5IrCt2jYZIYWMaw2LpN7Tkd5kh0akCKhnZYHAXjhGPGSIxLOxjrtaT1et
|
|
||||||
FiwriIEvHdmk5HYbudnUsMrjuayoTPR4qD8lJpMqSNguyzM0F+h3uK60OzOlXMOl
|
|
||||||
A0q65xuFXyg7bfdNxNAN5a0DuUUOLZKRCYuy2EK61z9OhkgKIKbKDashdgxhuw+1
|
|
||||||
uKA=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEAyEiq8dI+maM263TQMPQVSzC+WNEuK20/RSZLb33F8wyBoR+X
|
|
||||||
HetexqzORir78LKq+/fgGQiIsCilVot6ZtwbSkP2M8NwV3l+fdSRcAHJukFGZD6m
|
|
||||||
9AOHjIaI+FdIkIzBdJqV/XK/jiMltBuq/EfSbjerH2byi09EYRbHRpcA9dnKnWTt
|
|
||||||
dX79DVwyqqCnrYy/zb3/n5Ruh7GBSLXEiLnbV4CKCplinukZqzXebJNkbDLTlLyZ
|
|
||||||
gp9uGDQmptWx2ntAB4q4DHhMEi9fKxJzx//wG9AD5YpwgXd5C9qWezLUvU4xnmCY
|
|
||||||
9UgT0VkBNrXxcJ/HTG3ue6tZ/9/zPGQmPtWmzwIDAQABAoIBAFLiB6QVPoS0D3k3
|
|
||||||
GST5DYrVPCBjSHj+N821AEi+QtnHFioIebAPBGSxhJdzGFnOhoXJWXriljZYS7vZ
|
|
||||||
8qh4c+6y20MmoOoCRD9sZVd11fZ3Jts7NjoK7+BOmIY1ELmJFlHb2zBMeUsn7mVv
|
|
||||||
gb3vNv0XmoBfSQYvonuPQp5KxUH3x5VI4orQjvJSZBtF3ltCjsEe5txzQbCldNhO
|
|
||||||
JPe9ayevfdBg9G1pxesJbBDLbsR8J0yv86ogJTwulJ9etlzSzvsc/tBkAvb8dn+q
|
|
||||||
eMCLpJlASLnUeFSKT4/ah7naPLCS5R+j1tzXTxjeZU41VWpsgqlev/7je/zXiuok
|
|
||||||
PAIiy5kCgYEA/TGw23/gNjNuITwvMOZhB3yEwuCXFIVTu+lJF15hcGBEtPDqrXlq
|
|
||||||
HMBVJdxhnrTKNU08HDkXfK+vaZbWesxTBkZ4acuplNLTb72C6PQa4DoDNx4dplEo
|
|
||||||
4m5mgZREc751BDZ4wZwTwV4FBEPZxlsLGFAMv+/6ISN1DpzCX+qZ9f0CgYEAyoDe
|
|
||||||
/eKZbU/2tdiiXMgC/WMFCe5+9avy//Hy8jk6Mc9/hB0Grr5EbJW0c0I9sE8k7CnZ
|
|
||||||
4AeeeI4sUtWcySszKt6M38X6IfeF3nSCGzzRJN3HryEke/J+QVcG39JrkMwbc+SD
|
|
||||||
OWfaNPEjZL7hwoT0Ugx/cyct6jOEbae14PaBA7sCgYAbka2QOPxQ6oizVbpNuMgX
|
|
||||||
6JcMIShSM7JKY7xxrvUtJ05T5WeoO/Ax8T9UQArhHQ5nf2FsMUs9aGPRO3tfI6Bm
|
|
||||||
roWt/18XtV0QbbIza2EByU9QURcpZOzuutauhVZuw+455zR+4F/GTlZ9gGXWE1PB
|
|
||||||
8fVxcM/ri9DTJn6DsyfQgQKBgQDFhor87ullfRhTLKrDAb4Y11t04pQoor729VRa
|
|
||||||
/YNMTvA9N+rqzGEF4ckQnE58CdckHXaOViA3y8ZkTkUO3PqeGFMle4GPXFfSM6ct
|
|
||||||
VldTNJmwtA1YcaLBrVfhPuj5Zn5ovz9Y4XoxJf22KZMhIHsJBXPUKSVaS0Iji/GX
|
|
||||||
LBuQPQKBgBeZRxlP+hoRiZ8AM9aj76yXndO3duWe2qZjlmbvmR+lOB3MzClpI1mU
|
|
||||||
Td0VoSBOEVqMXAsT/sr2wpxc4NTaSKMAuVTUbN2xCzX7WcDMtvpeXYiCcyVghb0X
|
|
||||||
xCZxEkIOR1oS/QGvVJN8kH64cZ1plE6zbnGAKpaEO54hWvYcBByK
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDmzCCAyKgAwIBAgISBmRPC6KGb7rrw0FG5XAxnbieMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
NzAeFw0yNTA5MjExMjU0MDFaFw0yNTEyMjAxMjU0MDBaMCIxIDAeBgNVBAMTF21p
|
|
||||||
eHBvc3QuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
|
||||||
SsfEQjkc4mQcl8T57zJSFoB9qUbda1vJqLYIAiRSxeoz4LlIhbEtz8XkHwH7szW6
|
|
||||||
H0HFJe6pC1k2TCufP4tjf6OCAiYwggIiMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUE
|
|
||||||
FjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU
|
|
||||||
fyCFQih3NwcSgBk68SoZCnjFZ5swHwYDVR0jBBgwFoAUrkie3IcdRKBv2qLlYHQE
|
|
||||||
eMKcAIAwMgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTcuaS5s
|
|
||||||
ZW5jci5vcmcvMCIGA1UdEQQbMBmCF21peHBvc3QuZ3lvemFtYW5jYXZlLmZyMBMG
|
|
||||||
A1UdIAQMMAowCAYGZ4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lNy5j
|
|
||||||
LmxlbmNyLm9yZy8zMS5jcmwwggEFBgorBgEEAdZ5AgQCBIH2BIHzAPEAdwCkQsUG
|
|
||||||
SWBhVI8P1Oqc+3otJkVNh6l/L99FWfYnTzqEVAAAAZlsjDJCAAAEAwBIMEYCIQDv
|
|
||||||
j7pnXllaqandpPIwijJ0wFjI0K4t/67Wr8ryovNzdAIhAOXvoGQKlB4TxfG9ERjr
|
|
||||||
e+7rKSdpCe2YK9Xhrq2r5JaEAHYA3dzKNJXX4RYF55Uy+sef+D0cUN/bADoUEnYK
|
|
||||||
LKy7yCoAAAGZbIw6RgAABAMARzBFAiEApmZDFJt4b3VyU7NoYxfwExWfoQVSOOHz
|
|
||||||
tVknfroOLD4CIFYEUxvAiW+evBoo7Dk34tKV8jABkSxFzVwFAZuXirIDMAoGCCqG
|
|
||||||
SM49BAMDA2cAMGQCMF2o0w47tze7uqEAWOtIkoDRZSszwmNbBU3gGl0YshbOV1yU
|
|
||||||
7lEd9IzK9coGl7xdoQIwCs3KThdJjkUftWp1Xrmeo0IM00yIZIsK/7TPveUQOoNu
|
|
||||||
CXmX+8UkgYUSVFlQ2mY4
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
|
|
||||||
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
|
|
||||||
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
|
|
||||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
|
||||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
|
|
||||||
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
|
||||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
|
||||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
|
||||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
|
|
||||||
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
|
|
||||||
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
|
|
||||||
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
|
|
||||||
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
|
|
||||||
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
|
|
||||||
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
|
|
||||||
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
|
|
||||||
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
|
|
||||||
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
|
|
||||||
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
|
|
||||||
+VUwFj9tmWxyR/M=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIDZziRuoBQkofhTQAe5nBz34C5Tlwitw+buoh+ckpGhyoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAESsfEQjkc4mQcl8T57zJSFoB9qUbda1vJqLYIAiRSxeoz4LlIhbEt
|
|
||||||
z8XkHwH7szW6H0HFJe6pC1k2TCufP4tjfw==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIE9TCCA92gAwIBAgISBkxj1t4HcoJyjhkLx4RqBABMMA0GCSqGSIb3DQEBCwUA
|
|
||||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
|
||||||
EwNSMTMwHhcNMjYwNDE3MTcxMjA2WhcNMjYwNzE2MTcxMjA1WjAZMRcwFQYDVQQD
|
|
||||||
Ew5tcnRlZGR5YmVhci5mcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
|
||||||
ALzNN/kM7bnK17O0YmJrbjYSRBoESz5KmXLpn0hL6xp4g7BzxiSrtlyuAHMqs6wB
|
|
||||||
LXaqoLkk1PQ1zB3AlQBAuNy60U2gM9Y0Sg90Jmk24vjz7ZLbnqtDGKlcYPp/mjgu
|
|
||||||
+S83JnKyUL6skwwN1fxj8c04UyBIq61v9Lb6KZIwueHpU8sLY6CMUVhGXrK4KDv/
|
|
||||||
RG1in/Mv8DAarfUGG6AArmdMlybpgMCHHWHse/hYjg3achiSdaQqz+VrBZdibnwm
|
|
||||||
1jZzi+noOkt+xbk3TJdmaExYqZcfVF7RKzZF6iT4kq4hdpG6q6Xq5Kx3q4WL1kPR
|
|
||||||
LlOlMNSqfzq/0EbwlK6kSy0CAwEAAaOCAhswggIXMA4GA1UdDwEB/wQEAwIFoDAT
|
|
||||||
BgNVHSUEDDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBR4832F
|
|
||||||
OieS6E9IfPotfx+wUBdZ4zAfBgNVHSMEGDAWgBTnq58PLDOgU9NeT3jIsoQOO9aS
|
|
||||||
MzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAKGF2h0dHA6Ly9yMTMuaS5sZW5j
|
|
||||||
ci5vcmcvMBkGA1UdEQQSMBCCDm1ydGVkZHliZWFyLmZyMBMGA1UdIAQMMAowCAYG
|
|
||||||
Z4EMAQIBMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly9yMTMuYy5sZW5jci5vcmcv
|
|
||||||
NzcuY3JsMIIBCwYKKwYBBAHWeQIEAgSB/ASB+QD3AHUAr2eIO1ewTt2Pptl+9i6o
|
|
||||||
64EKx3Fg8CReVdYML+eFhzoAAAGdnKM7PgAABAMARjBEAiAGqYYX80HeAQL1EZ3j
|
|
||||||
e9/Fed3BlISPHz4CV3VzXDB63AIgT/bMaI85DCBQfz+aEYJrcJWo+M666663u1cv
|
|
||||||
kc9BXcIAfgAm42RuWGkhI7w0P0ckNZs3ks0kWojYFdOTM/2ZGKtHIwAAAZ2cozqI
|
|
||||||
AAgAAAUAB/xotQQDAEcwRQIgGtUtRgOHjpFgv61HneX0htbbvU6WZXPABb8IrkG3
|
|
||||||
xikCIQCzKa0d5Bo+e4viltQonoszLvYqjuhb7rqVQb3OXY3EGTANBgkqhkiG9w0B
|
|
||||||
AQsFAAOCAQEAWDp+0rRupYRWVgnNjei0u9DleoLf3uSoKm8kO7qJCQ84U/yl8pQa
|
|
||||||
Pu5/WF3fyAi2xKEq/56gt0qxbx/DbY7ORD1jksurnfmm6PrgEXYo+pzWezL/u/s8
|
|
||||||
OHCmw271j90FG+YK95EheXCORhrsbVDOuBBKwzclXDJV9WSLryt0Ml+BoZ56m10l
|
|
||||||
6tLR9s+gpkqZkHQ22iVgA5Qd+POGR3UFArsqthl/TFZ5DooZWs35trDSLQJf67vO
|
|
||||||
8CxV5q1wFt5qWgIp3zZLWcR+ugk/5mo+oJxCS+31sACSpEpk1BM24uCm/c+kVIS4
|
|
||||||
XofbqeAVG6D2anngr2QNcfZuiYhHBgDd6w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpAIBAAKCAQEAvM03+QztucrXs7RiYmtuNhJEGgRLPkqZcumfSEvrGniDsHPG
|
|
||||||
JKu2XK4AcyqzrAEtdqqguSTU9DXMHcCVAEC43LrRTaAz1jRKD3QmaTbi+PPtktue
|
|
||||||
q0MYqVxg+n+aOC75LzcmcrJQvqyTDA3V/GPxzThTIEirrW/0tvopkjC54elTywtj
|
|
||||||
oIxRWEZesrgoO/9EbWKf8y/wMBqt9QYboACuZ0yXJumAwIcdYex7+FiODdpyGJJ1
|
|
||||||
pCrP5WsFl2JufCbWNnOL6eg6S37FuTdMl2ZoTFiplx9UXtErNkXqJPiSriF2kbqr
|
|
||||||
perkrHerhYvWQ9EuU6Uw1Kp/Or/QRvCUrqRLLQIDAQABAoIBABlsRYq5j8inrzxU
|
|
||||||
CwwiAjZcEaPdNdKT/K4Ja7jc/DIAI190dNca8NScW5Qmc7OIJGU+caOspCj5ljGK
|
|
||||||
wqWaPCpWKk6acWXOfGCGApFtYh/QHOAHHF+xtRWXymPrdcqgofjrzgy+Gnr/xac8
|
|
||||||
X7b7haOy321RS8jFcr2G2b0v5tUsDdmV/hL9dfgkpqjB47evhQrWszTNSs2jqBEW
|
|
||||||
V3Tcwed8Y+P/CHqkBDJwvTZdOdUAzdPiqeIigpjIHqu5NFOuXfysmWTEgtCI2VEg
|
|
||||||
DVp1HsyN9ztkPUO3NYwX+aqOWKZNnN8RyapROaeUzincnLuueJrOEeFTrIkPwAjE
|
|
||||||
COu30vMCgYEA+1EKfa+j5HIYirEvj/2FfL6B1dXjTZlN0NmRNcBNd1UpCk/e6Wpc
|
|
||||||
DL9czGF7XRr4J3SMGXPGAu3DPq66Vv31V6gYp7TyIW45xF0UrEsKTTmUnhHZFJRJ
|
|
||||||
weELbGJwM4pO1RtEDL7x1A5VwB7+j+sfSckxtQhdEsu9NTrSBRXIZysCgYEAwFHv
|
|
||||||
2cqmF7EUTRPxd8zSMCnOeomppkoqEs47fN6ikNx+GwCLvXp7m8S7H1zuDyHP0pJV
|
|
||||||
nCBA2M3mdkrZ3DOnX2E72shl0XjEjrx6ZMa5vVDaG5TMx2jj3YZTXSIrmrrXUf30
|
|
||||||
hdhU04BScJJKHHuTwi+klLNS9qUuXivgoEPf6wcCgYEAtSMgMJ7bvdgOoEg9Q8cy
|
|
||||||
40pcQke7YT7Ru2pVIyzLqOsUfX476Hjkh7uVoynPxLefjLCQGfg8C/ha9V7yp6i7
|
|
||||||
oMZjntzod/f+Yu3D7LrZXffWimfK0u5eiwMtPJ1myX8yep8AWT93BaSfYa31RL3u
|
|
||||||
+zusPBMfImD+qtMOdOPSYakCgYEAp4I2gOHrDNOltQTb2tbBdEXVnBFvfHE4eCy8
|
|
||||||
z6QywC3sgKRXEnAuXZxax5RvnSp8ExJ2EohdMvkT9JB5dTxgWckdExBc7rhbq18q
|
|
||||||
07/rY6OadU+DlWQcpIQs8/+hLyHyDW4+np2wNI+ePoKMnoZcSlSo6wPODRoOauOY
|
|
||||||
wL6dt90CgYBJcenfjB3wAgFfM0zmaNU6hTTCOmnuPN4hVRWbhAdK7Oxg4yY5Br7b
|
|
||||||
8DJBqRZk2rA4dMibJZq42rdne0ez0BYwzlriRRf5Jarf0tziZNaACHYvIVEaspbC
|
|
||||||
rBquKO09pHnP63qZb/Wbc3gjomv2+ozUVycFLBGf+30WTq4iJw3OnA==
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEogIBAAKCAQEApZozzbYKQBOvR7+YEkfSGtc6YFsLthqRsEUPEzXSuY3Rkak/
|
|
||||||
OjpRKiQb5PYI5tB4vCeALxTBVcJeCXouk6Otw0EGRpc+oZxj/13X7Obnt7/SYyah
|
|
||||||
na9kiSh6UNUs4OTuKL/Q73J8aMTosY705FJ2hDGNUPmEqo+TqgZpSPAje2xInHuC
|
|
||||||
cs9kReV+6Y0SYXykh/9akdT6ht8watK+gBO2k+jICPJsOIkfSaC3XqgSdNhcBIVJ
|
|
||||||
+kR79taZNysqwOp2WiV9bVX9j7RiNVFckiUJ0wJOrySCvM+wP3JXN77uSQfS85sm
|
|
||||||
xxnRMmq9H3S7IVmCQeLzhIGZXVfQG3XjOBRZCwIDAQABAoIBAACRi/X71wMrTiG/
|
|
||||||
7aS6bGU9Me0cwuiIJNHnGsslFykd7IdEfnwTsS2k3BeoJJWuR4vV0uHWf2ds+Get
|
|
||||||
7LUDDdiqw3vAjy183PcGenRMwqTl2rIOcuWYsY6q/eiDItlOz+aB6hS4Xub5LhdV
|
|
||||||
909FXTTM+sA5axQu1AH0ba4bbPPChP04BEVpT3g/3Pi2rXwuGSPRZRrMD5YLhVsE
|
|
||||||
/52GufglHzXKIQn4BwCKPMG4IEhCqR+ZQV0bFawsWxgbBlEyURuZBS+S0wmnZIsQ
|
|
||||||
Fz1pZ0pbLbugoWHozNbN1zrTEOd9hRcwLHOVZP07o25Sz4rVhTavnaAMswMyVHIE
|
|
||||||
hKkenpECgYEA5ZfHFR92bId5YASLGxqcg08Cy6uQaGAwQOg+lt7v5Z+2KKmKoOzn
|
|
||||||
VRcSu9Bd5w0U0S2jeMz9R0B0xIgAQj9RtAEppAP1cKHJO5sFHn0UiXdqKJRnCDhR
|
|
||||||
l4IVRxqR0t7qflI28P56bb42ss0NB1CLDxwTd+aDtVMAtXLWNt200/MCgYEAuKZD
|
|
||||||
Osa9OjxWQF8mJhZs2aNUQU/kj8FMoYa6He4es4SXexCDS8C/Z7P9JbP4P3IRnL+y
|
|
||||||
EsHRIROlyw6bETbreH0/OXJ3v5XR5TskE2mqcLPOqStkuHsuvQeu8cZeVxVvujmN
|
|
||||||
lH7XoC4Vs+TnSUTJ2CzU0VTOCJFYpjW/5adsZIkCgYBIuV3nM/MYB4WLw4SojjJb
|
|
||||||
aXCSQQLZ/PXr6WTB91X33zIdCS8PMFtKWaemdCb6Y+tfItywDAaCRkl2YznpwhLI
|
|
||||||
OMIO4O4iwixyw/TIJoiVzoyC1BcaxHQb0KmavzDHobKXVsVuar0u+9xpoIfq9DlI
|
|
||||||
DPWhuhOoIOWNlBWEhY+cvwKBgGmizLFyg00uuZVoGdYOXEWCWDBpOXQ4fNOn1RBM
|
|
||||||
awn+n/7KqqKK6bW1Vezc8feyFXtce86ZTUAkEmSBvZrylXHADYya/QEBACypUfE9
|
|
||||||
MUH6zA8iASQ9bLa+D4rIFq6xV9LtHB9JFajQ1J+vI9ZZ4TOoKjR71Mc4B8RG2brT
|
|
||||||
toIpAoGAED2mY/GarPck1msFlS//NbUfj5i5lwYEnPS+YZnjqvJKbpyKoYPCIkxq
|
|
||||||
NAzs/F4yMO2b13q82aL6GGqRMSBiVrH5SB9XR0oflKjxP9nxJWF7I0ygaebEpR9U
|
|
||||||
XIdbsuOX6iYxUyGsUc7YtPbZHDwcf5veqynxN1JQKBa70DOY0kA=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEowIBAAKCAQEA+F6JtJ1rkgWpMlg/f4fr9TWhJJ/eLRX0ohLOGRYo+mltPBwz
|
|
||||||
HeNjOxyghanQtDGFFyl8xsi/OgCfGlt2USYEIj5kzAZ3btC+bBVc/tRvkkMkP5xk
|
|
||||||
uG24g7rWN0tA4htehKbDNZlkuOIET20Pd5MeiNc5/g2AJ6UhDXpHZQkTQfRrIo/Y
|
|
||||||
5IAN4fNdyhH9o1eFR2oorrjRWP3c34lZmVGP1NYeH6tCMokUMGWyZ2bYN/cp5zge
|
|
||||||
uRbM20v77qcxECdxXIreXtMySbQhQJ0hreO12Rdbj+3AwdBA9ove2jAvh0xi9/jI
|
|
||||||
ZBLjI8+PeszrRLIyslcvYWU4uNaR++dZ59OF4QIDAQABAoIBABU/6GX7tHcENTlN
|
|
||||||
l9QyVb+vaJO0ulpu5xThSUEX9mZTVBFZI832NRia/shk0qqCFJ4aUnbC+OpuYG5t
|
|
||||||
vhocB61C25ahpIEGis4+Ryw10nxn8m9fUvY9C/T4TKjjL0BRIWV1y5yXvMh9LOt7
|
|
||||||
PCApxgpk6K0p7EmoDQOFT1uverZxFv3RGv/aPKydXXIszSvemMKnFXrfVkjoWyT/
|
|
||||||
nE8zZrC+ufqrY5Hok7jsKrMJ+Bd9IUPv5W+WQwZ/HX6qpLsLuUka3jxBiFy9W5Zz
|
|
||||||
87JvQ6pUoLSAhub6k3N1LPMxzi6zPNWsirKcMN6O+WQrfB/rBGuZbcjA+DkjYAIt
|
|
||||||
QSGQ/9kCgYEA/gb+mOL/4P569XgQ2LRAy4RWs6Susk9J91FmH32w2zuXINgfXgTI
|
|
||||||
lJai807BBYYFYUpzwe/x0OKGXYmjJvf7K+9yV/AiNFmszOYBJAYEzYcmZa/G2yVJ
|
|
||||||
1Jk1l+9+/hu0pyOcFpNntG8KXgrvjghQS19oczzRbWlAfqTBTcjc4VkCgYEA+kxL
|
|
||||||
lNNZPaU7wwsGvQv/7npTAqB03qJmLogpgIehGTfcBmjmC7EmRA21ruhQHtE7TprD
|
|
||||||
H8XO6Vf5z1M+Ve6gvIc1t9gGbSkpu87gcgnfnzy/xR1TjB6LI/guEFc47z3KsiMo
|
|
||||||
rlDDIUtudE+eteBIHYBJlyLKdQV+P2tLOGMZb8kCgYAphkkuAsVjKRY+dA8E7Yo9
|
|
||||||
+ncVzJDGExH7PLId6bT0UWxl8Q5Hly6Wo30lmrUQyxSsD7iWdjuoMq9WMP6biyPi
|
|
||||||
zbR6TYW52wLVR6/eDKHSWwpayv4Nqq3D8/t/x6WRskO4oqiMRDJKm3AtaUo5hIBj
|
|
||||||
ocf4NnPhl7f0O8hhh7kbmQKBgE1J8+jP3nWvqSWQKROFOhFcync8Lvp0cVMbDp22
|
|
||||||
w+MyoYmFKMwhdqx7A0gwSlVJzKN4HJqaDUt2tBf2H4CPgCjXI5pSZaGdnVp2Bk6Q
|
|
||||||
h/H240ytwpe48sQ3pZm8JUOS9B1PyAcTvz1vunrF/z8wM3SQoai+wH+kI5jXu9F8
|
|
||||||
oGUpAoGBAI+MmNhhPs0Dqo4IfXPQc9yIN8c+IdrC/mIe0Ia0LdZYVfaIDlrwsFcj
|
|
||||||
NszTYuDhdFGznbj9uKdDNLaOxlQ5rSJIDnWs/wdsdCAPRyTssMifAI3KccxRCkJs
|
|
||||||
ExGEPM1QoGIyChLHAzUqhoc4hGYqCKLy6Ndy6KxhM9Fo0S5krgcI
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpAIBAAKCAQEAvu8NyJmZ3r674XBTJbDR7mcVZAJGaCylAIS5Kwg9iwCN1QOx
|
|
||||||
V3TdNd7J+8XuUpu0aoP/rw3kOXhqqJtM5P9rodL+kMXVBKrYyx+k4ODkFaz3ly94
|
|
||||||
Nm+mL4CjpHklLVJ7y26uRpRPFrAJz27d1E2LHpyi/udFIqXJiE7QASoswOR0CBUM
|
|
||||||
7ki4Py+RHKoiE/cJKkqb6UaC/pTqiCnx3WJOdIvb4NfuhyWr6xt4vSb+ggA1hUty
|
|
||||||
PZIGBroRGi40j5qKC9xjSwiksuaLdqnrWw1aB3ib7aX8u+KWI8pf6VFZiPTirDhN
|
|
||||||
4TmChqlYap1d5RJzxAB+g2pKnhhlLC6tdUG1lQIDAQABAoIBAAxJgwgRRnMssBeS
|
|
||||||
bG9lASWH8br1YIWMtfOiFu57gcZjuzzll3CK3z97vmDa/HrJdWNTak1gJftC0g5W
|
|
||||||
rCyieVE5LFOxv4Mk4X205B3qqxLwBiDvF5vdNIMjEqTffPJ9N+VAEqwNGEfb/U2h
|
|
||||||
k1n5wYWvS9f+lxbjN2RzufQRPD8PeCVc5/iwg5gX5HS8r1b5Yat8+JEEqXw4yH8X
|
|
||||||
fRAM2Cs0czhNi8xCnuBLhR0By2Og+mzfJ+sCyc9PGLuECQE6Buwknq+PtOC5lGMJ
|
|
||||||
gI7nNrRhm2c8pFakjNV/5Ym4fJzyHcmMxT6/ejj7beC829krTXj/SNaNnoiIe0g8
|
|
||||||
FNoIKNMCgYEA5KgCxJAUr6H4nkPFSGV8PNBqvPNasrw2wSrBTlD6kqQgaAEr4ZNF
|
|
||||||
JqnlFmTMCU3kAPvzO8pohuFktmKTQjkBlSvWdPkY09+2BnPRoXYakV4lgRq/Ktr1
|
|
||||||
wyZwaTgSNUmLjMycRtVMejs/2qIJWRfV8uRL/ZIqXq420uqhzSLhxbcCgYEA1cQ4
|
|
||||||
7Y5HMo0J/2d366OSGR0Line2jK1s5fc42+fTAbTio/431dlqwVoyUqcWjkrR4BzW
|
|
||||||
3/ksiuKhYL/+8qA5WIiFtrVWtHuDANx9UyBbTUDu16OVatLwzSjUHnlHvZvnTZPx
|
|
||||||
r9nGTtRukXhpAgnGX6cto7Pil0hJ/FCz/efoPxMCgYEA2A3c16igszfjuH+m2Ppz
|
|
||||||
wu7X/IQhjkODpVBl6T9hFNCagkuhD/tc2uSrv1Ys6Rm9OCTZNwTRcallxWQtauR8
|
|
||||||
l1wdvtdkW0bGMyCa0urKvdLssyn3umG82NHoY7OEmO9OOhNYEyIWqmRzuH1lQdbg
|
|
||||||
5SpMl2PWPzJ0QSVND41HMc8CgYA4937YR9dPcGieqLs7j66qhKQDtZ1vZfQkYLrF
|
|
||||||
V8VSqhrP6zqEAdnCR0Ar6J1JNEUz/VuB+oxVQsoQ13mgvPQrVM6Vf0Po+xVRUHER
|
|
||||||
iwjp0IkV7GEwQ6Cqe9vzdwyYSgjdErUQ0O9ZKKGCoN0TDvnPmeS+wHx9JmWZGQSu
|
|
||||||
gHPTAwKBgQDOaQGVCwFPUXU0eezz3hDeLjhqic+nCWFSZvaORCOzSHqc9w0X8TlD
|
|
||||||
X9njs+605fqQZS0hxXMHNvf9CMcJZNBKMkF9xP14oAOaU5+Pv1chJWN3CJBdCqj3
|
|
||||||
YN1zIMVIJUxA0/0HmG625UZoYe31HvitvC+0OlKhDlK/maSBuRzdBA==
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDnzCCAyagAwIBAgISBt22Sh8i6Gam9yW1bpg0FqSLMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
NjAeFw0yNTA4MTgyMjUzMTdaFw0yNTExMTYyMjUzMTZaMCQxIjAgBgNVBAMTGXBs
|
|
||||||
YXVzaWJsZS5neW96YW1hbmNhdmUuZnIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC
|
|
||||||
AARfPnh9MtauhJr78C7Srfyz3hhh6tMJaTEbaXPw8fmPPcD1NWFQsiVljV7AO9tD
|
|
||||||
Xkl6tZgWxkzlZ4YTG3hdB28Jo4ICKDCCAiQwDgYDVR0PAQH/BAQDAgeAMB0GA1Ud
|
|
||||||
JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQW
|
|
||||||
BBRjuoW/PybowuNTIysjd9HwTPwKXjAfBgNVHSMEGDAWgBSTJ0aYA6lRaI6Y1sRC
|
|
||||||
SNsjv1iU0jAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNi5p
|
|
||||||
LmxlbmNyLm9yZy8wJAYDVR0RBB0wG4IZcGxhdXNpYmxlLmd5b3phbWFuY2F2ZS5m
|
|
||||||
cjATBgNVHSAEDDAKMAgGBmeBDAECATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8v
|
|
||||||
ZTYuYy5sZW5jci5vcmcvMTIuY3JsMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcA
|
|
||||||
DeHyMCvTDcFAYhIJ6lUu/Ed0fLHX6TDvDkIetH5OqjQAAAGYv5ih/gAABAMASDBG
|
|
||||||
AiEA8II4kvBrbJTNJJS3jB6zVfXzCsJmdvV02LVFwPzsDwQCIQCAFlmdkkdS/zaS
|
|
||||||
8ckrSA99y+fXkIPR9TwjY2FxrZxsqQB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeN
|
|
||||||
tql+VMD+TA2wAAABmL+YoiIAAAQDAEcwRQIhAO9AitWJLl5mKEFzK/7PuA7sUN3H
|
|
||||||
1UfytoQ9cUQ77zj9AiBs4nkVvllaut3/oFMLBg69RI/HYs37hTnppOCpPOQ/JTAK
|
|
||||||
BggqhkjOPQQDAwNnADBkAjAgkQkgEuh8NOv1Zvmitg8d4Ccex6X2GARTEnQEy4AQ
|
|
||||||
H9lCmJrZrf8ad8iY4C0ULtwCMHJn3ND5cUs+ZCN1qw6dxbl2WFdkyRuCQeJ+vKIK
|
|
||||||
EUu9Yru4R8VQjUqwiWf4qBhbYg==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw
|
|
||||||
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
|
|
||||||
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
|
|
||||||
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
|
|
||||||
RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G
|
|
||||||
h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV
|
|
||||||
6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw
|
|
||||||
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
|
|
||||||
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj
|
|
||||||
v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
|
|
||||||
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
|
|
||||||
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
|
|
||||||
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc
|
|
||||||
MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL
|
|
||||||
pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp
|
|
||||||
eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH
|
|
||||||
pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7
|
|
||||||
s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu
|
|
||||||
h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv
|
|
||||||
YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8
|
|
||||||
ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0
|
|
||||||
LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+
|
|
||||||
EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY
|
|
||||||
Ig46v9mFmBvyH04=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIEkSxLTZjOYdt4jCC2x1ZU62bHdODKe3joNRQJoHMjI8oAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEXz54fTLWroSa+/Au0q38s94YYerTCWkxG2lz8PH5jz3A9TVhULIl
|
|
||||||
ZY1ewDvbQ15JerWYFsZM5WeGExt4XQdvCQ==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEogIBAAKCAQEAlpsG6EGKrt7R7QHgMhb+7gddcXG5phOg+h0pe/m2TEgsQ3VM
|
|
||||||
/1RdQu23se5AjoIDbsTx/ITYCbErSKwlDs7WbqoKYMjKh7t48hwOxMXUUFACzlrU
|
|
||||||
jsBENlqvqCfvAdtTS1xt1FE0v+pDmKZEm3htE6eH3vb5W3I8DwmvW26Q9lxddDv9
|
|
||||||
pZ1Tt1ykbMsHktZ1XARI1xmolPoMc6esYDOPhx6wf1HKP4LDFqlMGcjX28M8NPzP
|
|
||||||
puZf9bWzPw3YUalf9I1US7dmREhWeBHa6lkuXkL6HDLZf8Hw2UPoCc/CslXteEFY
|
|
||||||
2DrRABo2Rz4nKiBJsUn2ljYYDKVShJGZxbPocwIDAQABAoIBAAEeNH5r4iIrMEbA
|
|
||||||
oU/t4MWWk2iArh6f/a1tov2zHFnTnVSA3en1T93r0tXEzYDhUTI0zxEPUWU9BfO7
|
|
||||||
p2jFO01GAN64DtzUFPFDKQ7n4wwXk/XBMdu/bKI0qSIn7bvHS4Z/MKeHVMtp60eK
|
|
||||||
UG8RBUpEj5slnTNDFVQNP9p/Zx8VDIbuKU4MqccZzP9qNU86TpsLnU/czIe3vpM3
|
|
||||||
Hm1l8FekZ1bYf3imgiA6dOS4B7AHhaUlfpG4FFJ6pbUwwMdLLfiXKj94Vy/BGQ6t
|
|
||||||
CfXtrVOV9POV0oUKC4uVfYUqnOeRcO7ceQscyNjD1ghpxEv6J/r3QENiz9a0Cs3t
|
|
||||||
WT/5rhECgYEA0GKrpMJG/wDqKL2OIdVxO+c9+8Os3AY1qxP+gO3XqI4C7+P3akAB
|
|
||||||
ysWKahY5DMs4DKJht0zPA/Pz2VlrXHzpCXnoUXlY35+gsQZkqXKJeqCG4Jan1glh
|
|
||||||
jGy8/C61CwCVqRaoloO+Vs213Ov7KAvkKKkdiDFSLZXsJ3jPIWHvulECgYEAuQSS
|
|
||||||
l2VTynG8XQ0OvHdZNZZWB+RFY9VlxaMtLDogDRSa112b+/DH3NRds1opwhZ8GNtp
|
|
||||||
hKNrRI9SuRgr1xp+8uI8YXfQoW4K737H9TwDqZrbIFcXuAZCnfnLiV9gI7wX4UuL
|
|
||||||
p3LVbYqy3EBEdvcOomowhTZICkqVpSRpL1bpQYMCgYBLsRuBvCPHqpBjff7roTkB
|
|
||||||
NkyYb4oRXZwO6TNPp5TnH7ZHZrnO+TLtcXWGdU4BrKtOQ4lU6Gxlli4j68wIi0Km
|
|
||||||
c4aEWZyDldrrklPsDLONPFPhrjeGkl/BfxniTCDsvyidg6J3EaGIrC378ieHc1JL
|
|
||||||
xqn4d1nPPx7Jc6NhD87hEQKBgCeEkIMBw4nkDSWa2mDq5QULHUkGOsP+GoTCO63M
|
|
||||||
pHfmxMPnXJ/NaAME4Raj1XN9NfhhNQJ9nTXBnxulzAdfw2nBZMA0xT0VsgRBghgh
|
|
||||||
P28EgnU/5PMLc0MmzZCD7Jb1X+xhJG0Zm/iPvXBJ0dXPIzMRl1d8ppp8H8ZsJoNT
|
|
||||||
/vJdAoGAR6C6LyF+AZpI/ga8TctLOoPftjuOatQDPaPB2GFeTFwGMloyRB01q47G
|
|
||||||
w56K3+KAKBroRauo8ZksbEAn4NDon3xrCSvGfblV/4R7voIUeuGB+8ssero7cyl2
|
|
||||||
VHGdkC2xEaUCIM18z50mvQEFERYCgofJ+g6cDcKRLuXEsha6kxE=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEogIBAAKCAQEA7DdHmNWL3B7XFwxjQke27fT44BkGTHV+4Ru/eHphsGULUpxm
|
|
||||||
TYqWI++rbWxdNwHMyR44LW3mqORK4CfrW1c7sTwTl76vAxaE0JNRc41bw+RE/J95
|
|
||||||
4uH/xGyFEEhP2v6xRV1Qfgk/6ljgcdP/QFj5/YETgffjC7eM8vSVRK6B8R6zktTg
|
|
||||||
analDQLg3dRC5tSR0tY2BtvzIuRytr/S2rhnzp0fjOAL9KPJt+jSJZNP0TV3/iN+
|
|
||||||
VPyWAZ20GHFNjU7XAoUD3rWv4ZZ5MGbX0du9SVr4fSTqwHTgscdFv0OD/ZRY61Ww
|
|
||||||
4kPjxLGBPbDQ5Bwc6pB6yPQ0YJnMq2xTRI62vwIDAQABAoIBACIrPOgWu8xziZmD
|
|
||||||
6TfFN+jj7rw74nVc6aWWZfP/f/IMK78fcIz25xD7skh5zGIQmJbfEDFCHIOBwnL6
|
|
||||||
U0k7LR9OGWdx5c8EiuHA7Z9Ra1zCwFfqma8AEgdPy0+3phV/khT+ko4ouF4lzRGq
|
|
||||||
INomBMNu0GuUd/tR6cmbJ5xvwcwm5Z5LM5svUUvJBGxGGcnjR1IuZHRquaNURXUr
|
|
||||||
fYGBziMql/8oBC7aIwsFIBfjemio+sCQ2NvYnAqs+xirfGMMV96nctLC7RwKJFqW
|
|
||||||
zJAEQedipeNG2Er9EIi2jLk7wyOFDmzQ+sPim8ukKQlzbrL68dphWOFMbDWsRkA+
|
|
||||||
Q1Ag68ECgYEA9fwzApgW6bVr+YjShx8dPYzHDEfK7tdFxo0MSAI5d1F2qooRu8JG
|
|
||||||
W22TotChbeHhq8YqQBWTyI+HKQZ2vdIBPWIPvkHU5a5VlAfBewHdCvuLlN3VRyhd
|
|
||||||
V0Q4SxGZ32qUwp3uylz/61+oQnYWXMzs2vmiDLT9cMuI0r3kX6AcaS0CgYEA9dVC
|
|
||||||
i1cn38SfwWId3sclsJazmgIPIAAQgETlX7hTT2jSxD+C08q20U+DVQCYYe5fJ8Z1
|
|
||||||
bJF2amnZ5d4rP59qQPjVlUUDW9W7KN2Y2wIXtF2sdx8TROv8AWL/Ys//uOaZInUr
|
|
||||||
EgcsNxd7L0ou3VeErSqGpU+pfb8uCO2gDS2DexsCgYBniH7v2JPMSk/n926k8LOd
|
|
||||||
9GLTCGShonn71+ITbNxDHEaWAQb1wA9c7AH3xVgsp6YUZpPh5TMOd1qsKcxQmNNs
|
|
||||||
wplduteg1H+wjpMg8ufWd4mIXtYl3RdsY4pODlp1bqauQ0r+YaZVqy1my80dwiLv
|
|
||||||
B6LtNkB1+TTdfo9gsENFAQKBgDSLeMW/w04ZAOycxDWx62RrUchBWGpGmUBReZWU
|
|
||||||
GHqItUQtLxGF6r2ieTfaALgt8zjVOpQSI3VrWp+/dQ8MS/HHPh/BuI4QiQibFOj6
|
|
||||||
8YYj35E2my/IIP1K47uDKe2jnGe5E5Ou5MyBwFrDSHEXG8zHojADbv7ptjVCVUt7
|
|
||||||
xvaxAoGAAkA3xxEKdN9lK96X1THnr+pJwEkHIZDnVDaB3O0CVOTVoio+q14HY5CU
|
|
||||||
dJ6uPv/+L2h8pfWcwu9ZSYYuCnTRkeQwkgjm/a90nVly+aU2/o8Z9Ga7NFw3gQRQ
|
|
||||||
m4eHneweUPO1Njd2MZoX2WqqV1G4fq0idjgQX06a92I3Lk9jSFQ=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDlTCCAxugAwIBAgISBTtNlUHa3pbEoLoOa6MelfNrMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MTcxNzI1MjBaFw0yNjA3MTYxNzI1MTlaMCAxHjAcBgNVBAMTFXN0
|
|
||||||
YXRzLmd5b3phbWFuY2F2ZS5mcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCf7
|
|
||||||
neY/wnyRIq3O5bLu29iHwu4CVj9S+KOUD4WH+q3X0ZlJSNY8LHTSKQf9pkEWf0o3
|
|
||||||
jRgXe7LUgIWH8w29BESjggIhMIICHTAOBgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAww
|
|
||||||
CgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUoy6LovEOCyc0RjRQ
|
|
||||||
xJrEMYSFVCgwHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcowMgYIKwYB
|
|
||||||
BQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5vcmcvMCAG
|
|
||||||
A1UdEQQZMBeCFXN0YXRzLmd5b3phbWFuY2F2ZS5mcjATBgNVHSAEDDAKMAgGBmeB
|
|
||||||
DAECATAuBgNVHR8EJzAlMCOgIaAfhh1odHRwOi8vZTguYy5sZW5jci5vcmcvMTA4
|
|
||||||
LmNybDCCAQsGCisGAQQB1nkCBAIEgfwEgfkA9wB1ANdtfRDRp/V3wsfpX9cAv/mC
|
|
||||||
yTNaZeHQswFzF8DIxWl3AAABnZyvWUIAAAQDAEYwRAIgZ9DxzbvlUkR+K7eots93
|
|
||||||
yZFPOJldqN0uTJBUX7jtLrUCIGnxd4ay0WhkcK9ly5UTvRIUF1AMDlqKlLvcalhv
|
|
||||||
lmUqAH4AbP5QGUOoXqkWvFLRM+TcyR7xQRx9JYQg0XOAnhgY6zoAAAGdnK9bbwAI
|
|
||||||
AAAFAAeepHsEAwBHMEUCIAhvdAp9P5ZfGPgb1Agjua5k6XlQyOEfgPJDBqTCB/Y8
|
|
||||||
AiEAjokxkF6MhDsQg4iWa+MPOWW59DOTph54wmaEN3PlWKEwCgYIKoZIzj0EAwMD
|
|
||||||
aAAwZQIxAMQixbfYQY0E5RDytBjZSaQ9evu4Q9z8lceWNijtKitJdhfBcHd+zbuD
|
|
||||||
eZUcKN4PTQIwZxmuALvsfsoyLVtrcK18HBt4FMrTcetvoXsUJRdF87YLFxseO1sz
|
|
||||||
Y26j0bVojxtj
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIEBUDcPu1Cd1huCZihyy4quXbar4cNOmLdGYMuxoPcdboAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEJ/ud5j/CfJEirc7lsu7b2IfC7gJWP1L4o5QPhYf6rdfRmUlI1jws
|
|
||||||
dNIpB/2mQRZ/SjeNGBd7stSAhYfzDb0ERA==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDmTCCAyCgAwIBAgISBYWRSftnuM4F2wVlsA2DcC9iMAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MDkxODMyMTdaFw0yNjA3MDgxODMyMTZaMCIxIDAeBgNVBAMTF3Rl
|
|
||||||
bXBsZXMuZ3lvemFtYW5jYXZlLmZyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
|
||||||
doecYbXgFnK1nqBw3fq62k6EmiVRKptwmGdktvimshZhKT+5Fkg35olb7fLmasbv
|
|
||||||
hQ36t6hyJYAPKLoggpvkDqOCAiQwggIgMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUE
|
|
||||||
DDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBS8abdT4AFn+oD1
|
|
||||||
cjRXR+CTeqx4QTAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KRyjAyBggr
|
|
||||||
BgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNyLm9yZy8w
|
|
||||||
IgYDVR0RBBswGYIXdGVtcGxlcy5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAI
|
|
||||||
BgZngQwBAgEwLQYDVR0fBCYwJDAioCCgHoYcaHR0cDovL2U4LmMubGVuY3Iub3Jn
|
|
||||||
Lzk5LmNybDCCAQ0GCisGAQQB1nkCBAIEgf4EgfsA+QB3AMs49xWJfIShRF9bwd37
|
|
||||||
yW7ymlnNRwppBYWwyxTDFFjnAAABnXO5xuMAAAQDAEgwRgIhAJjx4xMKMj9x2Up0
|
|
||||||
tuh81IeGkwZIgLedG6VDw10ena3sAiEAoR8W2h+7I/K6xbLEj4mRsfY1ob2yWbkx
|
|
||||||
fN1+gXCjRBMAfgAai51rD/6/gbR5OcbSMQqG1tEC1PBG4hgsneNfXiYl7wAAAZ1z
|
|
||||||
ucj9AAgAAAUAB+RdrwQDAEcwRQIgA7HOGwe8d2qdVcy0lPspyTIH/FZ7wJ/hndzh
|
|
||||||
Ck5MPxsCIQC4M7k41GSL1ly/nGoziakfq1QKLZP2aIHU6i+jb231lDAKBggqhkjO
|
|
||||||
PQQDAwNnADBkAjAIe/XyLr35Dq+5oDxBZEKg9QvO0Zw42SBPCRqUMXwBTH82WJaY
|
|
||||||
Kv4rkV/5kRCIGHMCMEZo5mTtvW3urzy6BwpmNHyYAD/galYHZAwjV1sbixSnH4ro
|
|
||||||
3kgbyYvWcS8lQECdxA==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIDIwdc0EdISca2aBEwRxNVbSmX2zWhobVUGKXGF0DWYeoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAEdoecYbXgFnK1nqBw3fq62k6EmiVRKptwmGdktvimshZhKT+5Fkg3
|
|
||||||
5olb7fLmasbvhQ36t6hyJYAPKLoggpvkDg==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIDljCCAxygAwIBAgISBiQAfqhyQLDCgYf06ydiaPg/MAoGCCqGSM49BAMDMDIx
|
|
||||||
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
|
|
||||||
ODAeFw0yNjA0MDkxODQzMjhaFw0yNjA3MDgxODQzMjdaMCExHzAdBgNVBAMTFnRl
|
|
||||||
bXBsZXMubXJ0ZWRkeWJlYXIuZnIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATh
|
|
||||||
dDmX3BWIVm+speoiNz7zh9Pqo6dAxmv9eeTcAcWHb67mk9IYeUdzMdPF7w+2KRjf
|
|
||||||
CgeSglkVGwmdjgOOhoz2o4ICITCCAh0wDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQM
|
|
||||||
MAoGCCsGAQUFBwMBMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFKaK0ys1bUzr4Y3o
|
|
||||||
rq55a+ntZmidMB8GA1UdIwQYMBaAFI8NE6L2Ln7RUGwzGDhdWY4jcpHKMDIGCCsG
|
|
||||||
AQUFBwEBBCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL2U4LmkubGVuY3Iub3JnLzAh
|
|
||||||
BgNVHREEGjAYghZ0ZW1wbGVzLm1ydGVkZHliZWFyLmZyMBMGA1UdIAQMMAowCAYG
|
|
||||||
Z4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNyLm9yZy82
|
|
||||||
NC5jcmwwggELBgorBgEEAdZ5AgQCBIH8BIH5APcAdgDCMX5XRRmjRe5/ON6ykEHr
|
|
||||||
x8IhWiK/f9W1rXaa2Q5SzQAAAZ1zxAHIAAAEAwBHMEUCIEtElrsWI6nBQAkzsYZu
|
|
||||||
UXL+IomaQWWgfJTK6HkBrFDNAiEAspprEqJaM4Uqeu+skpZPNvNSewPI/PFSCGVC
|
|
||||||
i1fJbMgAfQBs/lAZQ6heqRa8UtEz5NzJHvFBHH0lhCDRc4CeGBjrOgAAAZ1zxAPu
|
|
||||||
AAgAAAUABoP/yAQDAEYwRAIgKv+YPjawWKDOaICJkRJqYKHG7xEYwvvQlEIkESC1
|
|
||||||
yTsCIBqKpw/3UEeHjxwEWJYJvQVXSBt0Yr+05CD4JycQI/4ZMAoGCCqGSM49BAMD
|
|
||||||
A2gAMGUCMEzUbDcmwOmBOw4/nPZ9T5vpNlniWfPYkBpMlOUT2HXdA4x9meEdn0Fz
|
|
||||||
CWvOPkRZCwIxANbzg/76ev+jhny/KsC7v3fHQUK78G3lDyc+JUYfHblD5UOenUBH
|
|
||||||
qLjpEd3aLo+S1w==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
|
|
||||||
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
|
|
||||||
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
|
|
||||||
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
|
|
||||||
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
|
|
||||||
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
|
|
||||||
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
|
|
||||||
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
|
|
||||||
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
|
|
||||||
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
|
|
||||||
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
|
|
||||||
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
|
|
||||||
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
|
|
||||||
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
|
|
||||||
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
|
|
||||||
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
|
|
||||||
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
|
|
||||||
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
|
|
||||||
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
|
|
||||||
u1igv3OefnWjSQ==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN EC PRIVATE KEY-----
|
|
||||||
MHcCAQEEIOltdYErco0s2aaG2UBKlKT/2NCQP/qvmDR7X6r5xnExoAoGCCqGSM49
|
|
||||||
AwEHoUQDQgAE4XQ5l9wViFZvrKXqIjc+84fT6qOnQMZr/Xnk3AHFh2+u5pPSGHlH
|
|
||||||
czHTxe8PtikY3woHkoJZFRsJnY4DjoaM9g==
|
|
||||||
-----END EC PRIVATE KEY-----
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDKQkz/76XvjEur
|
|
||||||
vcOD4fSMSbLf63iXCBbcTYvbGqpkQxBs0MSjOxPaW/eeknYAx+VSsk8TZhkb0Umw
|
|
||||||
X4pNABdqVAiMrCUlV92tZEeYGV9HqYKUhiXcIkHY4bdFtOhB88ytp2BVd/PrkPZ+
|
|
||||||
StYzexpQHkfShIDJ1g/HSpN6g1Nt+7O/x/IL3goKXRS+cuzNlTEtVB3gEVD/SWMf
|
|
||||||
gaE9vGufrCylusmyLwCYKOnpsAp+6zKYJNI13/j+mLqJTl94tdiEKsxaqq34WEDe
|
|
||||||
5/2m4QFq+lGwT5y+AB5sG1hAHYc+9OkUxRJde/tjCnuDJXnOb5oJlrK1wE/XM6Xe
|
|
||||||
vxRBcKD7AgMBAAECggEBAKyOvjTI19A06MZgQvM8jrA1nFdwBNUOALr5qe1HpcGe
|
|
||||||
ed/siSceGwT725m9KNHnuV3BZLePLrLN7sl76XliL5f2k8i4gYSHn0f0OySn2ONB
|
|
||||||
2ncusBRMYdNQV1UwT8sc3i31k7m3ejIq3jHHVVJcn4llHC+d/ma0q4eCt6oZas90
|
|
||||||
HxGi3lU5KMhlSwQaH5YtT8Syx7N2uD6GfmMUtInr1tGxQysvu2Dwu4lVAKc3/qdB
|
|
||||||
FA+MylCgKUs/FcEep9+sNnzpc5I2YvTZCMS3dkRHZIv4bBJ+lh9roVZPWvB1gQoC
|
|
||||||
I9XGSSvz+1RwyCyJ62Qr/5u1frhV1m1hSPE6T2YH/YECgYEA74LJM0zfCFA143Rb
|
|
||||||
TLinoPsncdK+6lz0W3NaPH34yVJSdo6S/Pqn+sLC1hWRHabemdPn50E6/ma4aY1p
|
|
||||||
sACVJVAvafX1qmH0NPbBalA7xNzhuCoFPHJTZKKSrj+zJZ2nvQDcHh/Rs7JAX6OX
|
|
||||||
UVQMxrWXDgRduiQ3imXRwoumR8ECgYEA2C750/CSADRc+Ys7BgDXpo67Vm14JdLg
|
|
||||||
AxKvcSwgnJOYE4SjVKoaRpG9ObljaDF7q7SBu+COY4NlCgLT8kFDPo8/DrxeN8Nx
|
|
||||||
lkatnqThbBn/hwS7rIYSEE7nUde4LXuT+bgCSZHv5T2oLwPB5V2KGL6mkzL25NtI
|
|
||||||
J8lLAvd/97sCgYEA3atO6dLYjQonhdcX9N7mDgDE1fy1w5S6d7VAK8JvMmylc6Kq
|
|
||||||
+cZHF7ePubIGN8pMNVTBSe++WNvbC53c1g8D+p/G8iu47bNw4GAMTIfreVzw75C8
|
|
||||||
feBVvEsWtHyyIjtSloOoNZ0/aS+tkpaGorfGh1Zjco6p7HA+kzF/PK4g/EECgYAo
|
|
||||||
6OraEqJua3pUtuZagnpMyKHm/xxHfBpsOnL85a7eMogK2YTXFsGWLSoz7ENFimeu
|
|
||||||
3J/YX+xSJKFQPazCIVuKUS1LqpXh05iBKardZLJL9LeIY3rocQ6mC2h28m2mHcao
|
|
||||||
8QttxLIzHXHgQ8PDlen2OM3o+TIDqQOEk/EgBJow1QKBgC52SDq16yvNvXFx2vV+
|
|
||||||
aGYqvs0WDrmehBac5KLtqm4MnKlgI07lDNmCgX5nRIQU/n1o9EFdh70fjbCMrP6l
|
|
||||||
TegzxB1Gcs+8UC5fXf8GQIn1LwxU9Vj+QAgAu2gfo6napXguKmIcHQgERihEZ4mO
|
|
||||||
5l7+s6Ojdjfi3BK6rDg55J9Z
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFDjCCA/agAwIBAgISBvXqmV6Yo20cqoicnC24QiS9MA0GCSqGSIb3DQEBCwUA
|
|
||||||
MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD
|
|
||||||
EwNSMTAwHhcNMjUwNzEzMjEwMTUyWhcNMjUxMDExMjEwMTUxWjAkMSIwIAYDVQQD
|
|
||||||
Exl2b2ljZWNoYXQuZ3lvemFtYW5jYXZlLmZyMIIBIjANBgkqhkiG9w0BAQEFAAOC
|
|
||||||
AQ8AMIIBCgKCAQEAz7nF1NdS9EcSNmzwXHpLCN/qGC9qvRUkrKkzOj5q1EXpSO/p
|
|
||||||
5poIoJXud5cD1b979uCndW3sksk3iHHh5+NsgdX4Zj493ex0ANJLRqsxaTdp6+bv
|
|
||||||
u0fwX+JzgWjHv34Xj024Y2BAFLEHdAyKGm+Y2qoT1Q50zCt0vZMhzdgGOBq3RxBE
|
|
||||||
OZA+V9E0ni3KangUm9BIS41gtz8oZ9VIeJnix/nZ/rQla+ybmTNVAeiTYSlc8EmF
|
|
||||||
ErsOSQ48vfzfs6+Wy3vfyVUX3kOEVFoUpxB4emQvou3RrQDY00oC2E4Y5Or+TcYF
|
|
||||||
N/WGVrNSGz6/pVnnnV+Q1FNnI0SBtL4MqhwsqQIDAQABo4ICKTCCAiUwDgYDVR0P
|
|
||||||
AQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMB
|
|
||||||
Af8EAjAAMB0GA1UdDgQWBBSAVoRznHEv4Oa09LYaNFZ+5MsoVTAfBgNVHSMEGDAW
|
|
||||||
gBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH
|
|
||||||
MAKGF2h0dHA6Ly9yMTAuaS5sZW5jci5vcmcvMCQGA1UdEQQdMBuCGXZvaWNlY2hh
|
|
||||||
dC5neW96YW1hbmNhdmUuZnIwEwYDVR0gBAwwCjAIBgZngQwBAgEwLgYDVR0fBCcw
|
|
||||||
JTAjoCGgH4YdaHR0cDovL3IxMC5jLmxlbmNyLm9yZy82Mi5jcmwwggEEBgorBgEE
|
|
||||||
AdZ5AgQCBIH1BIHyAPAAdgAN4fIwK9MNwUBiEgnqVS78R3R8sdfpMO8OQh60fk6q
|
|
||||||
NAAAAZgFza5qAAAEAwBHMEUCIFESO+P2EFHDKu58Ar43tlAvfE0budnfR1nvEFwo
|
|
||||||
Mm7pAiEAsoiU9VcglbJlLVr8Sa5xcULfgjD/VYM3An07w11+JWIAdgAS8U40vVNy
|
|
||||||
TIQGGcOPP3oT+Oe1YoeInG0wBYTr5YYmOgAAAZgFza58AAAEAwBHMEUCIQDjZ6+M
|
|
||||||
/iItF+ZJO6kudVhSzOcG2D3qdOiYh9Rl1inDxwIgLc2Fz7q8sP3A0Giv6vUQnUME
|
|
||||||
ADI3eTywT606bhRFKWswDQYJKoZIhvcNAQELBQADggEBABSpS/Npc/26FjrQADNO
|
|
||||||
7fv/xO3CVbHrnkLJQlT4+dq+GCQ8PEFFG7Kjsdok0V2NGSDZCAHOEW7RFE5FAJQA
|
|
||||||
3yb+3Zi32fUpfgDLdIXIAOIg9xa2rD2fgB5JTS7teKXqkdkVrgpO3I7QDnIFhhsa
|
|
||||||
HaINxS7zLR7NH1Zf/LLPU6u7pjtslHLWbvxcHi+PcZrfnLVmPPau06PU65M+hel0
|
|
||||||
AvHsNMKrb76M8yA0D4UVvLWN7EOxNGCluVaA0qEdmmhGPFlEt+KkF66ZfQnPqT8v
|
|
||||||
L7X/dwxCCSGFx/j9tk0oPsLzixSOgM/PDV1Mw3O6gDRA8VgHrBH89LMb+gZ9A3fj
|
|
||||||
2so=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIFBTCCAu2gAwIBAgIQS6hSk/eaL6JzBkuoBI110DANBgkqhkiG9w0BAQsFADBP
|
|
||||||
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
|
|
||||||
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
|
|
||||||
Fw0yNzAzMTIyMzU5NTlaMDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
|
|
||||||
bmNyeXB0MQwwCgYDVQQDEwNSMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
|
||||||
AoIBAQDPV+XmxFQS7bRH/sknWHZGUCiMHT6I3wWd1bUYKb3dtVq/+vbOo76vACFL
|
|
||||||
YlpaPAEvxVgD9on/jhFD68G14BQHlo9vH9fnuoE5CXVlt8KvGFs3Jijno/QHK20a
|
|
||||||
/6tYvJWuQP/py1fEtVt/eA0YYbwX51TGu0mRzW4Y0YCF7qZlNrx06rxQTOr8IfM4
|
|
||||||
FpOUurDTazgGzRYSespSdcitdrLCnF2YRVxvYXvGLe48E1KGAdlX5jgc3421H5KR
|
|
||||||
mudKHMxFqHJV8LDmowfs/acbZp4/SItxhHFYyTr6717yW0QrPHTnj7JHwQdqzZq3
|
|
||||||
DZb3EoEmUVQK7GH29/Xi8orIlQ2NAgMBAAGjgfgwgfUwDgYDVR0PAQH/BAQDAgGG
|
|
||||||
MB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATASBgNVHRMBAf8ECDAGAQH/
|
|
||||||
AgEAMB0GA1UdDgQWBBS7vMNHpeS8qcbDpHIMEI2iNeHI6DAfBgNVHSMEGDAWgBR5
|
|
||||||
tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKG
|
|
||||||
Fmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0gBAwwCjAIBgZngQwBAgEwJwYD
|
|
||||||
VR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVuY3Iub3JnLzANBgkqhkiG9w0B
|
|
||||||
AQsFAAOCAgEAkrHnQTfreZ2B5s3iJeE6IOmQRJWjgVzPw139vaBw1bGWKCIL0vIo
|
|
||||||
zwzn1OZDjCQiHcFCktEJr59L9MhwTyAWsVrdAfYf+B9haxQnsHKNY67u4s5Lzzfd
|
|
||||||
u6PUzeetUK29v+PsPmI2cJkxp+iN3epi4hKu9ZzUPSwMqtCceb7qPVxEbpYxY1p9
|
|
||||||
1n5PJKBLBX9eb9LU6l8zSxPWV7bK3lG4XaMJgnT9x3ies7msFtpKK5bDtotij/l0
|
|
||||||
GaKeA97pb5uwD9KgWvaFXMIEt8jVTjLEvwRdvCn294GPDF08U8lAkIv7tghluaQh
|
|
||||||
1QnlE4SEN4LOECj8dsIGJXpGUk3aU3KkJz9icKy+aUgA+2cP21uh6NcDIS3XyfaZ
|
|
||||||
QjmDQ993ChII8SXWupQZVBiIpcWO4RqZk3lr7Bz5MUCwzDIA359e57SSq5CCkY0N
|
|
||||||
4B6Vulk7LktfwrdGNVI5BsC9qqxSwSKgRJeZ9wygIaehbHFHFhcBaMDKpiZlBHyz
|
|
||||||
rsnnlFXCb5s8HKn5LsUgGvB24L7sGNZP2CX7dhHov+YhD+jozLW2p9W4959Bz2Ei
|
|
||||||
RmqDtmiXLnzqTpXbI+suyCsohKRg6Un0RC47+cpiVwHiXZAW+cn8eiNIjqbVgXLx
|
|
||||||
KPpdzvvtTnOPlC7SQZSYmdunr3Bf9b77AiC/ZidstK36dRILKz7OA54=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN PRIVATE KEY-----
|
|
||||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDPucXU11L0RxI2
|
|
||||||
bPBceksI3+oYL2q9FSSsqTM6PmrURelI7+nmmgigle53lwPVv3v24Kd1beySyTeI
|
|
||||||
ceHn42yB1fhmPj3d7HQA0ktGqzFpN2nr5u+7R/Bf4nOBaMe/fhePTbhjYEAUsQd0
|
|
||||||
DIoab5jaqhPVDnTMK3S9kyHN2AY4GrdHEEQ5kD5X0TSeLcpqeBSb0EhLjWC3Pyhn
|
|
||||||
1Uh4meLH+dn+tCVr7JuZM1UB6JNhKVzwSYUSuw5JDjy9/N+zr5bLe9/JVRfeQ4RU
|
|
||||||
WhSnEHh6ZC+i7dGtANjTSgLYThjk6v5NxgU39YZWs1IbPr+lWeedX5DUU2cjRIG0
|
|
||||||
vgyqHCypAgMBAAECggEBAKxDpnEc5FlZ+xuRej9m14UTlCHcaMtHlnNtmeMKUjOZ
|
|
||||||
ip4G/9VSFid+TxVz8iU3uAkDQzxaHZ+ZKOmJb8uLSbfehzHbGhlJduYbf3uqir5z
|
|
||||||
yu5sRJDuVsRdmmZOS6BdZBJeZLRc5KeEK+csYvcLZxqnguzkIS4UN6rjMlxvcrDg
|
|
||||||
zqeJfRgk/ubYNoYIuUPOxMlnHZjSEPRdGnKaWDV/K78E6mPjeuPP0s5ELkWtBDtj
|
|
||||||
ChQipYujUbW4w9pITYzieQEkelJM+esUGtwabraf+VOF5GQ0InTN1NFURUCKcmzr
|
|
||||||
anErwgHmPLfaE2MgKSufAh+KpEU6ZkjJ8mckckcTtkUCgYEA/hkXW7IT5mYpiPkM
|
|
||||||
pg5UtK678KRyPr6s73M9PF8iEshXS9KinWcO5RW3M9G2xaFS0iUYgMwBjY2YrhSl
|
|
||||||
+m9ST3p87iU0m1rN61CawgX1SoDMd9u2K9W11rJT+onZ4jAOC9U0Bg1VhZjv2n2T
|
|
||||||
dreCDziWbpkIWEyCHiflf/DK0lcCgYEA0UfSXZ1m/dT+BJfYYqau5n5pVcOkfteH
|
|
||||||
NfAB0C0CXpZ731mwNoBPaXPk096QT8LYvpBUAtHHKTz/5WHvb0XwAAvzNoyS8hKo
|
|
||||||
M2OTtgL6bKXaGIb7Be5tus3+UxVVZiptm65T90rhRnoQOte5w1Albz0IKIx6C6T5
|
|
||||||
oClwwtG3mP8CgYAQVaKXxXHcDNM8t+3lOuSdHOJ+DMQ/XliVqA3WtLLnDDP4btj/
|
|
||||||
T2G4vlWhoiiiucUuNy5FEVhENkcLYc5ts/xRmakwUfn4xrSYHP1l3aYwHOmIBvrG
|
|
||||||
BJ4E6D/XykbUcIxmnFUU0oSd6v/4RrxVFGTq/5NEFthffMOclqn9OIiBTwKBgQCS
|
|
||||||
f/l2CPqQ0+nh4z3ZiR9EQNeR7vuWw19mVZWfWfKfri4Wot0kudtdUYCtA8731skN
|
|
||||||
VVFKC/mkF4x20YDf3xBrp/HgjLVM+dx+5MUBE8KkDdHHe637b/WmYA8ZsARxGWBT
|
|
||||||
K8yhfuyF/mqgFmV2oQMjhJDSecvxnNIV2QyThGVGlwKBgQCX3cnkVryXs8bcAnhs
|
|
||||||
Ez3wZRfNszVHmuyft+q2Pw4yhoYNhh7fT7mBXYOrerFhhKKy2sCFvTA6HvE7d6iy
|
|
||||||
hPY7mxGTJ1i1hAFGuJAETtJTWyPlsDPVkh5OPYUMxFgWxNxb6hekwObVg1/lm/AR
|
|
||||||
vULSW3E1BDCdBDNjBnLpXdeFUw==
|
|
||||||
-----END PRIVATE KEY-----
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
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
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEogIBAAKCAQEA0aWQVHyYMEErmY87opHJo229eo8whjPXJQlYdpHPrx/GxYNC
|
|
||||||
3esnCi3mfB4iKBqIxaZKIEn8W7Mt0ROAfcy4Znaz+peb2bK9ogKrgDHWfCGPOBJX
|
|
||||||
u8FShIqGQuH1wqJmZVsiszAzS4x/sFDu+MGY/Ekz0/g8FV2i8doF/z28Ntt3HPMN
|
|
||||||
c/crKR9fnRnzb3VSISqF1ARaUFxIqM18U5PUBhg0ZCP0qvquA/lM9P+NMYMgJVxY
|
|
||||||
Lg6lHmkczpZBSh1ITY+2KJjCFL0q9HvN0QFBRjcxKe64GHPC7pYHDU7mHAhearz7
|
|
||||||
cOoOFNQrl6oiAkprN4+r/TvBdFITido3NWTvlQIDAQABAoIBABpJEOyW5pn+QdIy
|
|
||||||
FD8Q2mBETSKFu4bIDyyUnGPZalnBuTFggMzERBPRp3leadfvY8CsVdTwkdSJhbAW
|
|
||||||
KuEa/u/R6ET+J0tHTuF2Rjx/gy3zIzrbieZ/mbIGkEjofeDWbdI9d/9RhsztI8Fe
|
|
||||||
lGfaFi1jnDzyfc4L/HcoZ+IVwnh6F7+3z2wgQVLLPQ8TlB5lKj7yoe4NwfDoL7a8
|
|
||||||
8HMge5iWcQS86QVHusgGDu7IxFLB1nZqegLGCDI/MieHJXr4kjtYpTHoM+kpOwIT
|
|
||||||
a6urzGLOBIo7jVtCFNcBYXLgghI7t0WO2Prtj42sjPHqMHr2ZxTV38gY5QGOrN7Y
|
|
||||||
wRRYkAECgYEA6ZenyPXNda4KOSkKR8R6lteH6B8I1DRAodQRMsMZXL0ZNHycAQTX
|
|
||||||
6Spc0grOSwTsXLT3I86CbUxuvUseovfS2XftkL0bhlmTsl41v8IYMIoGwSKPdzpX
|
|
||||||
eFFGjN6VAL45yGz3W9IMYlE3f93H9XavvatwsfOf+k4HpszvjCUZtAECgYEA5cHf
|
|
||||||
d5bBE6Ei7N6HZJK7Z6IWfCmy1u+lXkYGjgpztsbUZFeg8g3bu9qc+t98Bua0Eshg
|
|
||||||
9EeekbmCWhHt6dZa2GPUChxn1efNdxz5Y/sM1FaMnUIIr8j5TSqfUC17NsBLWHui
|
|
||||||
VuF9SzUrH3u5qQkhi9SOvcjo6g9m2xqEi3AzK5UCgYA74xevG+WbAA267dym3aaY
|
|
||||||
OZWsWxiGXwca9iWaoA5GimyF2lScpkM8khHN/9s3vIFkmzipQ26I2wmhGjs2iNbT
|
|
||||||
zj1n2DPQU/Lbze91xCszdo+YwGWLqbd3L08pGn+U+zARRG5+afGm2y+hZpi3Q8B2
|
|
||||||
nhd8Z/thztODXhMkGPboAQKBgHKafA844WIbNEKW1U4zastMrI6OdiiELSaTI13i
|
|
||||||
lMmM8BCFLUDP7NUNPNReeY0vso7T6JiwyMXDlOO8ocHMLFBXq0LH3Ht0Pqa1iyh1
|
|
||||||
53ZbHZSrhY25X7FAG2tw5E7xKCQgt19C5q6G/NWdb4SDi3omMnU0LAnkWNfdqFOt
|
|
||||||
SbjpAoGAXb0uKfxEgOAy8obcNR1CYWDd9Rd2+gCX4uAI2Qe8WmYRh42ErYT67vaF
|
|
||||||
az+tMIHclWB/+BA8yPcS/+l2Rgb78spLLAA1hRNoIYmPVrhSUUqyX0LAhqroRSW8
|
|
||||||
++4/so7Kg4aRvVwxhI7nz7A3j3Gwy+sjuQgM4ojcTbEuBZHxIPg=
|
|
||||||
-----END RSA PRIVATE KEY-----
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"extends": "expo/tsconfig.base",
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"./src/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".expo/types/**/*.d.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user