@@ -52,7 +52,6 @@ import com.orgzly.org.parser.OrgParser
5252import com.orgzly.org.parser.OrgParserWriter
5353import com.orgzly.org.utils.StateChangeLogic
5454import java.io.*
55- import java.lang.IllegalStateException
5655import java.util.*
5756import java.util.concurrent.Callable
5857import javax.inject.Inject
@@ -82,7 +81,13 @@ class DataRepository @Inject constructor(
8281
8382 val fileName = BookName .getFileName(context, book)
8483
85- val loadedBook = loadBookFromRepo(book.linkRepo.id, book.linkRepo.type, book.linkRepo.url, fileName)
84+ val loadedBook = loadBookFromRepo(
85+ book.linkRepo.id,
86+ book.linkRepo.type,
87+ book.linkRepo.url,
88+ fileName)
89+
90+ val id = loadedBook!! .book.id;
8691
8792 setBookLastActionAndSyncStatus(loadedBook!! .book.id, BookAction .forNow(
8893 BookAction .Type .INFO ,
@@ -148,27 +153,48 @@ class DataRepository @Inject constructor(
148153 bookView : BookView ,
149154 @Suppress(" UNUSED_PARAMETER" ) format : BookFormat ) {
150155
151- val uploadedBook: VersionedRook
156+ var uploadedBook: VersionedRook ? = null
152157
153158 val repo = getRepoInstance(repoEntity.id, repoEntity.type, repoEntity.url)
154159
155160 val tmpFile = getTempBookFile()
161+ val tmpFileEncrypted = getTempBookFile()
156162 try {
157163 /* Write to temporary file. */
158164 NotesOrgExporter (this ).exportBook(bookView.book, tmpFile)
159165
166+ val (toStoreFile, toStoreFileName) =
167+ if (repo.isEncryptionEnabled) {
168+ val inFile: InputStream = BufferedInputStream (FileInputStream (tmpFile))
169+ val outFile: OutputStream = BufferedOutputStream (FileOutputStream (tmpFileEncrypted))
170+
171+ try {
172+ MiscUtils .pgpEncrypt(inFile, outFile, fileName, repo.encryptionPassphrase)
173+ } finally {
174+ inFile.close()
175+ outFile.close()
176+ }
177+
178+ Pair (tmpFileEncrypted, MiscUtils .ensureGpgExtensionFileName(fileName))
179+ } else {
180+ // remove possible .gpg extension left over from a previous encrypted sync
181+ // ?maybe move this logic to BookView.getFileName()
182+ Pair (tmpFile, MiscUtils .ensureNoGpgExtensionFileName(fileName))
183+ }
184+
160185 /* Upload to repo. */
161- uploadedBook = repo.storeBook(tmpFile, fileName )
186+ uploadedBook = repo.storeBook(toStoreFile, toStoreFileName )
162187
163188 } finally {
164189 /* Delete temporary file. */
165190 tmpFile.delete()
191+ tmpFileEncrypted.delete()
166192 }
167193
168- updateBookLinkAndSync(bookView.book.id, uploadedBook)
169-
170- updateBookIsModified(bookView.book.id, false )
171-
194+ if ( uploadedBook != null ) {
195+ updateBookLinkAndSync(bookView.book.id, uploadedBook)
196+ updateBookIsModified(bookView.book.id, false )
197+ }
172198 }
173199
174200 @Throws(IOException ::class )
@@ -1546,22 +1572,48 @@ class DataRepository @Inject constructor(
15461572
15471573 @Throws(IOException ::class )
15481574 fun loadBookFromRepo (repoId : Long , repoType : RepoType , repoUrl : String , fileName : String ): BookView ? {
1549- val book: BookView ?
1575+ var book: BookView ? = null
15501576
15511577 val repo = getRepoInstance(repoId, repoType, repoUrl)
15521578
15531579 val tmpFile = getTempBookFile()
1580+ val tmpFileDecrypted = getTempBookFile()
15541581 try {
15551582 /* Download from repo. */
1556- val vrook = repo.retrieveBook(fileName, tmpFile)
1583+ // ensure that we don't try to decrypt .org files or interpret .org.gpg as plaintext
1584+ // problem if both 'nb.org' and 'nb.org.gpg' exist. probably some other mechanism that
1585+ // runs at a higher level that here should be made aware and responsible of .pgp extensions
1586+ val toRecvFileName = if (repo.isEncryptionEnabled) {
1587+ MiscUtils .ensureGpgExtensionFileName(fileName)
1588+ } else {
1589+ MiscUtils .ensureNoGpgExtensionFileName(fileName)
1590+ }
1591+ val vrook = repo.retrieveBook(toRecvFileName, tmpFile)
1592+
1593+ val plaintextBookFile: File =
1594+ if (repo.isEncryptionEnabled) {
1595+ val inFile: InputStream = BufferedInputStream (FileInputStream (tmpFile))
1596+ val outFile: OutputStream = BufferedOutputStream (FileOutputStream (tmpFileDecrypted))
1597+
1598+ try {
1599+ MiscUtils .pgpDecrypt(inFile, outFile, repo.encryptionPassphrase)
1600+ } finally {
1601+ inFile.close()
1602+ outFile.close()
1603+ }
15571604
1558- val bookName = BookName .fromFileName(fileName)
1605+ tmpFileDecrypted
1606+ } else {
1607+ tmpFile
1608+ }
15591609
1560- /* Store from file to Shelf. */
1561- book = loadBookFromFile(bookName.name, bookName.format, tmpFile, vrook)
1610+ val bookName = BookName .fromFileName(toRecvFileName)
15621611
1612+ /* Store from file to Shelf. */
1613+ book = loadBookFromFile(bookName.name, bookName.format, plaintextBookFile, vrook)
15631614 } finally {
15641615 tmpFile.delete()
1616+ tmpFileDecrypted.delete()
15651617 }
15661618
15671619 return book
0 commit comments