Commit 444e7283c19f1f33980800fe77ce1e846107d55d
1 parent
a9629926
Exists in
remove_backup_emails
Changed import script.
I decided to rewrite the script for python, because mailman use python serialization (pickle). The last step it is fix the code for running on mailman.
Showing
1 changed file
with
142 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,142 @@ | @@ -0,0 +1,142 @@ | ||
1 | +#!/usr/bin/python | ||
2 | + | ||
3 | +import pickle, glob, os, subprocess, re, shutil, pickle | ||
4 | + | ||
5 | +allEmailDict = dict() | ||
6 | +globalCount = 1 | ||
7 | + | ||
8 | +last_gitlab = sorted(glob.glob('*_gitlab_backup.tar'), | ||
9 | + key=os.path.getmtime)[-1] | ||
10 | + | ||
11 | +def decompress(): | ||
12 | + print "=" * 30 | ||
13 | + print "This gonna take some time..." | ||
14 | + subprocess.call(["mkdir -p gitlab"], shell=True) | ||
15 | + subprocess.call(["mkdir -p noosfero"], shell=True) | ||
16 | + subprocess.call(["mkdir -p mailman"], shell=True) | ||
17 | + print "[1] Extracting gitlab..." | ||
18 | + subprocess.call(["tar -xaf " + last_gitlab + " -C gitlab"], shell=True) | ||
19 | + print "[2] Extracting noosfero..." | ||
20 | + subprocess.call(["tar -xaf noosfero_backup.tar.gz -C noosfero"], shell=True) | ||
21 | + print "[3] Extracting mailman..." | ||
22 | + subprocess.call(["tar -xaf mailman_backup.tar.gz -C mailman"], shell=True) | ||
23 | + | ||
24 | +def compress(): | ||
25 | + print "=" * 30 | ||
26 | + print "Compressing things again..." | ||
27 | + | ||
28 | + print "[1] Compressing gitlab..." | ||
29 | + command = "cd gitlab && tar -cpf " + last_gitlab + " * && mv " + last_gitlab + " ../ && cd .. && rm -rf gitlab" | ||
30 | + subprocess.call([command], shell=True) | ||
31 | + | ||
32 | + print "[2] Compressing noosfero..." | ||
33 | + command = 'cd noosfero && tar -czpf noosfero_backup.tar.gz * && mv noosfero_backup.tar.gz ../ && cd .. && rm -rf noosfero' | ||
34 | + subprocess.call([command], shell=True) | ||
35 | + | ||
36 | + print "[3] Compressing mailman..." | ||
37 | + command = 'cd mailman && tar -czpf mailman_backup.tar.gz * && mv mailman_backup.tar.gz ../ && cd .. && rm -rf mailman' | ||
38 | + subprocess.call([command], shell=True) | ||
39 | + | ||
40 | +def create_hashes_from_file (pFile): | ||
41 | + global globalCount | ||
42 | + global allEmailDict | ||
43 | + # Match email | ||
44 | + pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}') | ||
45 | + # Build a hash with all emails | ||
46 | + with open(pFile) as current: | ||
47 | + for line in current: | ||
48 | + listOfEmail = pattern.findall(line) | ||
49 | + for email in listOfEmail: | ||
50 | + if not email in allEmailDict: | ||
51 | + allEmailDict[email] = "email" + `globalCount` + "@example.com" | ||
52 | + globalCount += 1 | ||
53 | + | ||
54 | +def create_hashes_for_mailman (pDictionary): | ||
55 | + global globalCount | ||
56 | + global allEmailDict | ||
57 | + pattern = re.compile(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}') | ||
58 | + | ||
59 | + for key, value in pDictionary.iteritems(): | ||
60 | + if isinstance(value, basestring): | ||
61 | + matchValue = pattern.search(value) | ||
62 | + if matchValue: | ||
63 | + allEmailDict[matchValue.group(0)] = "email{}@example.com".format(globalCount) | ||
64 | + globalCount += 1 | ||
65 | + | ||
66 | + if isinstance(key, basestring): | ||
67 | + matchKey = pattern.search(key) | ||
68 | + if matchKey: | ||
69 | + allEmailDict[matchValue.group(0)] = "email{}@example.com".format(globalCount) | ||
70 | + globalCount += 1 | ||
71 | + | ||
72 | +def replace_mailman(pDictionary): | ||
73 | + for key, value in pDictionary: | ||
74 | + if key in allEmailDict: | ||
75 | + pDictionary[allEmailDict[key]] = pDictionary[key] | ||
76 | + del pDictionary[key] | ||
77 | + if value in allEmailDict: | ||
78 | + pDictionary[key] = allEmailDict[value] | ||
79 | + return pDictionary | ||
80 | + | ||
81 | +def replace_hashes_in_file (pFile): | ||
82 | + tmp_file = 'tmp_file' | ||
83 | + with open(pFile) as current: | ||
84 | + contents = current.read() | ||
85 | + for key, value in allEmailDict.iteritems(): | ||
86 | + contents = contents.replace(key, value) | ||
87 | + target = open(tmp_file, 'w+') | ||
88 | + target.write(contents) | ||
89 | + target.close() | ||
90 | + shutil.move(tmp_file, pFile) | ||
91 | + | ||
92 | +def build_backup_list(): | ||
93 | + listOfbkpFiles = [] | ||
94 | + # Noosfero | ||
95 | + for file in os.listdir("noosfero/tmp/backup/"): | ||
96 | + if file.endswith(".sql"): | ||
97 | + listOfbkpFiles.append(os.path.join("noosfero/tmp/backup/", file)) | ||
98 | + # Colab and gitlab | ||
99 | + listOfbkpFiles += ["colab.dump", "gitlab/db/database.sql"] | ||
100 | + # Mailman | ||
101 | + mailman = [] | ||
102 | + for root, dirs, files in os.walk("mailman/lists/"): | ||
103 | + for file in files: | ||
104 | + if file.endswith("config.pck"): | ||
105 | + mailman.append(os.path.join(root, file)) | ||
106 | + return listOfbkpFiles, mailman | ||
107 | + | ||
108 | +def unserializable_and_replace(pMailconfig): | ||
109 | + emailsDict = pickle.load(open(pMailconfig, "rb" )) | ||
110 | + return emailsDict | ||
111 | + | ||
112 | +def serializable_new_config(swap, mailconfig): | ||
113 | + pass | ||
114 | + | ||
115 | +if __name__ == "__main__": | ||
116 | + #decompress() | ||
117 | + #compress() | ||
118 | + others, mailMan = build_backup_list() | ||
119 | + | ||
120 | + #Others: colab, gitlab, and Noosfero | ||
121 | + print ("=" * 30) | ||
122 | + print ("Creating mapping for all emails: pass through all applications") | ||
123 | + for applications in others: | ||
124 | + create_hashes_from_file(applications) | ||
125 | + print ("now, mailman...") | ||
126 | + for configMailman in mailMan: | ||
127 | + print configMailman | ||
128 | + swap = unserializable_and_replace(configMailman) | ||
129 | + create_hashes_for_mailman(swap) | ||
130 | + print allEmailDict | ||
131 | + | ||
132 | + | ||
133 | + #for application in others: | ||
134 | + # print ("Working on: " + application) | ||
135 | + # create_hashes_from_file(application) | ||
136 | + # replace_hashes_in_file(application) | ||
137 | + | ||
138 | + #print ("Working on: Mailman") | ||
139 | + #for mailconfig in mailMan: | ||
140 | + # print ("File: " + mailconfig) | ||
141 | + # serializable_new_config(swap, mailconfig) | ||
142 | + |