开放登录/注册

master
fengyuecanzhu 4 years ago
parent 6cdc5effe0
commit 26196bbc66
  1. 6
      app/release.md
  2. 7
      app/src/main/assets/updatelog.fy
  3. 15
      app/src/main/java/xyz/fycz/myreader/common/URLCONST.java
  4. 15
      app/src/main/java/xyz/fycz/myreader/model/user/UserService2.kt
  5. 4
      app/src/main/java/xyz/fycz/myreader/ui/activity/AuthEmailActivity.kt
  6. 11
      app/src/main/java/xyz/fycz/myreader/util/utils/FileUtils.java
  7. 2
      app/version_code.properties

@ -1,3 +1,3 @@
* 1、优化搜索键盘自动弹出体验 * 1、开放用户登录\注册入口及同步书架(在v1.9.3版本关闭),感谢[@黑白人生]提供的服务器
* 2、新增书籍内容搜索结果自动保存 * 2、新增邮箱验证(用于找回密码),之前注册的帐号登录时需要绑定邮箱
* 3、新增书籍内容搜索结果备份与恢复 * 3、webdav同步书架改为从webdav恢复

@ -1,3 +1,10 @@
2021.12.11
风月读书v2.2.8
更新内容:
1、开放用户登录\注册入口及同步书架(在v1.9.3版本关闭),感谢[@黑白人生]提供的服务器
2、新增邮箱验证(用于找回密码),之前注册的帐号登录时需要绑定邮箱
3、webdav同步书架改为从webdav恢复
2021.12.07 2021.12.07
风月读书v2.2.6 风月读书v2.2.6
更新内容: 更新内容:

@ -4,16 +4,16 @@ import xyz.fycz.myreader.util.SharedPreUtils;
public class URLCONST { public class URLCONST {
public static final String OFFICIAL_WEB = "https://reader.fycz.tk/"; public static final String OFFICIAL_WEB = "https://reader." + getDefaultDomain() + "/";
public static String APP_DIR_UR = "https://www.lanzous.com/b00ngso7e"; public static String APP_DIR_UR = "https://www.lanzous.com/b00ngso7e";
public static String LAN_ZOUS_URL = "https://fycz.lanzoui.com"; public static String LAN_ZOUS_URL = "https://fycz.lanzoui.com";
//字体下载 //字体下载
public static final String FONT_DOWNLOAD_URL = "https://novel.fycz.xyz/app/fonts/"; public static final String FONT_DOWNLOAD_URL = "https://novel." + getDefaultDomain() + "/app/fonts/";
public static final String APP_WEB_URL = "https://fyreader.fycz.xyz/"; public static final String APP_WEB_URL = "https://fyreader." + getDefaultDomain() + "/";
public static final String BAI_DU_SEARCH = "https://m.baidu.com/s?word={key}"; public static final String BAI_DU_SEARCH = "https://m.baidu.com/s?word={key}";
@ -21,10 +21,8 @@ public class URLCONST {
public static final String YOU_DAO_SEARCH = "http://m.youdao.com/dict?le=eng&q={key}"; public static final String YOU_DAO_SEARCH = "http://m.youdao.com/dict?le=eng&q={key}";
public static final String DEFAULT_DOMAIN =
SharedPreUtils.getInstance().getString("domain", "fycz.tk");
public static final String FY_READER_URL = "https://fyreader." + DEFAULT_DOMAIN; public static final String FY_READER_URL = "https://fyreader." + getDefaultDomain();
public static final String AD_URL = FY_READER_URL + "/ad"; public static final String AD_URL = FY_READER_URL + "/ad";
public static final String LOG_UPLOAD_URL = FY_READER_URL + "/logUpload"; public static final String LOG_UPLOAD_URL = FY_READER_URL + "/logUpload";
@ -38,5 +36,10 @@ public class URLCONST {
public static final String QQ_SKM = DONATE + "/qq_skm.png"; public static final String QQ_SKM = DONATE + "/qq_skm.png";
public static final String QUOTATION = "https://v1.hitokoto.cn/?encode=json&charset=utf-8"; public static final String QUOTATION = "https://v1.hitokoto.cn/?encode=json&charset=utf-8";
public static String getDefaultDomain() {
return SharedPreUtils.getInstance().getString("domain", "fycz.tk");
}
} }

@ -1,18 +1,15 @@
package xyz.fycz.myreader.model.user package xyz.fycz.myreader.model.user
import io.reactivex.ObservableSource
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.SingleOnSubscribe import io.reactivex.SingleOnSubscribe
import io.reactivex.SingleSource import io.reactivex.SingleSource
import io.reactivex.functions.Function import io.reactivex.functions.Function
import net.lingala.zip4j.ZipFile import net.lingala.zip4j.ZipFile
import net.lingala.zip4j.model.UnzipParameters
import okhttp3.MediaType import okhttp3.MediaType
import okhttp3.RequestBody import okhttp3.RequestBody
import xyz.fycz.myreader.application.App import xyz.fycz.myreader.application.App
import xyz.fycz.myreader.common.APPCONST import xyz.fycz.myreader.common.APPCONST
import xyz.fycz.myreader.common.URLCONST import xyz.fycz.myreader.common.URLCONST
import xyz.fycz.myreader.entity.StrResponse
import xyz.fycz.myreader.model.storage.Backup import xyz.fycz.myreader.model.storage.Backup
import xyz.fycz.myreader.model.storage.Restore import xyz.fycz.myreader.model.storage.Restore
import xyz.fycz.myreader.model.storage.Restore.restore import xyz.fycz.myreader.model.storage.Restore.restore
@ -25,13 +22,14 @@ import java.io.File
import net.lingala.zip4j.model.enums.EncryptionMethod import net.lingala.zip4j.model.enums.EncryptionMethod
import net.lingala.zip4j.model.ZipParameters import net.lingala.zip4j.model.ZipParameters
import xyz.fycz.myreader.base.observer.MySingleObserver
/** /**
* @author fengyue * @author fengyue
* @date 2021/12/9 10:17 * @date 2021/12/9 10:17
*/ */
object UserService2 { object UserService2 {
fun login(user: User): Single<Result> { fun login(user: User): Single<Result> {
return Single.create(SingleOnSubscribe<Result> { return Single.create(SingleOnSubscribe<Result> {
val mediaType = MediaType.parse("application/x-www-form-urlencoded") val mediaType = MediaType.parse("application/x-www-form-urlencoded")
@ -112,12 +110,13 @@ object UserService2 {
isEncryptFiles = true isEncryptFiles = true
encryptionMethod = EncryptionMethod.AES encryptionMethod = EncryptionMethod.AES
} }
var zipFile = File(APPCONST.FILE_DIR + "webBackup.zip")
if (zipFile.exists()) zipFile.delete()
ZipFile( ZipFile(
APPCONST.FILE_DIR + "webBackup.zip", APPCONST.FILE_DIR + "webBackup.zip",
CyptoUtils.decode(APPCONST.KEY, user.password).toCharArray() CyptoUtils.decode(APPCONST.KEY, user.password).toCharArray()
) ).addFolder(inputFile, zipParameters)
.addFolder(inputFile, zipParameters) zipFile = FileUtils.getFile(APPCONST.FILE_DIR + "webBackup.zip")
val zipFile = FileUtils.getFile(APPCONST.FILE_DIR + "webBackup.zip")
FileUtils.deleteFile(inputFile.absolutePath) FileUtils.deleteFile(inputFile.absolutePath)
val ret = OkHttpUtils.upload( val ret = OkHttpUtils.upload(
URLCONST.USER_URL + "/do/bak?" + URLCONST.USER_URL + "/do/bak?" +
@ -126,7 +125,7 @@ object UserService2 {
zipFile.absolutePath, zipFile.absolutePath,
zipFile.name zipFile.name
) )
zipFile.delete() if (!App.isDebug()) zipFile.delete()
it.onSuccess(GSON.fromJson(ret, Result::class.java)) it.onSuccess(GSON.fromJson(ret, Result::class.java))
} }
}).compose { RxUtils.toSimpleSingle(it) } }).compose { RxUtils.toSimpleSingle(it) }

@ -1,7 +1,6 @@
package xyz.fycz.myreader.ui.activity package xyz.fycz.myreader.ui.activity
import android.app.Activity import android.app.Activity
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
import android.view.View import android.view.View
@ -18,12 +17,9 @@ import xyz.fycz.myreader.common.APPCONST
import xyz.fycz.myreader.databinding.ActivityAuthEmailBinding import xyz.fycz.myreader.databinding.ActivityAuthEmailBinding
import xyz.fycz.myreader.model.user.Result import xyz.fycz.myreader.model.user.Result
import xyz.fycz.myreader.model.user.User import xyz.fycz.myreader.model.user.User
import xyz.fycz.myreader.model.user.UserService2
import xyz.fycz.myreader.model.user.UserService2.bindEmail import xyz.fycz.myreader.model.user.UserService2.bindEmail
import xyz.fycz.myreader.model.user.UserService2.register
import xyz.fycz.myreader.model.user.UserService2.resetPwd import xyz.fycz.myreader.model.user.UserService2.resetPwd
import xyz.fycz.myreader.model.user.UserService2.sendEmail import xyz.fycz.myreader.model.user.UserService2.sendEmail
import xyz.fycz.myreader.model.user.UserService2.writeUsername
import xyz.fycz.myreader.ui.dialog.DialogCreator import xyz.fycz.myreader.ui.dialog.DialogCreator
import xyz.fycz.myreader.ui.dialog.LoadingDialog import xyz.fycz.myreader.ui.dialog.LoadingDialog
import xyz.fycz.myreader.util.CyptoUtils import xyz.fycz.myreader.util.CyptoUtils

@ -209,9 +209,7 @@ public class FileUtils {
//获取文件夹 //获取文件夹
File[] dirs = file.listFiles( File[] dirs = file.listFiles(
new FileFilter() { pathname -> {
@Override
public boolean accept(File pathname) {
if (pathname.isDirectory() && !pathname.getName().startsWith(".")) { if (pathname.isDirectory() && !pathname.getName().startsWith(".")) {
return true; return true;
} }
@ -223,7 +221,6 @@ public class FileUtils {
return false; return false;
} }
} }
}
); );
//遍历文件夹 //遍历文件夹
for (File dir : dirs){ for (File dir : dirs){
@ -316,10 +313,14 @@ public class FileUtils {
public static void write(Context context, String fileName, String content) { public static void write(Context context, String fileName, String content) {
if (content == null) if (content == null)
content = ""; content = "";
write(context, fileName, content.getBytes());
}
public static void write(Context context, String fileName, byte[] content) {
try { try {
FileOutputStream fos = context.openFileOutput(fileName, FileOutputStream fos = context.openFileOutput(fileName,
Context.MODE_PRIVATE); Context.MODE_PRIVATE);
fos.write(content.getBytes()); fos.write(content);
fos.close(); fos.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();

@ -1,3 +1,3 @@
#Fri Jun 18 21:45:31 CST 2021 #Fri Jun 18 21:45:31 CST 2021
VERSION_CODE=227 VERSION_CODE=228
NEED_CREATE_RELEASE=false NEED_CREATE_RELEASE=false

Loading…
Cancel
Save