From 90df2c684662a015774a4081ec4b0a9ca4300ec9 Mon Sep 17 00:00:00 2001 From: stkevintan Date: Mon, 27 Jul 2015 21:33:46 +0800 Subject: [PATCH] clarify RSA Encryption, imporve gulpfile --- README.md | 41 +- dist/assets/img/album.png | Bin 2440 -> 1910 bytes dist/assets/js/my.js | 2 +- dist/libs/BigInt.js | 1 - dist/libs/Crypto.js | 2 +- dist/libs/FileManager.js | 2 +- dist/libs/NetEaseMusic.js | 2 +- gulpfile.js | 25 +- package.json | 28 +- src/controller/tray.js | 3 +- src/model/BigInt.js | 516 ------------------ src/model/Crypto.js | 107 +--- src/model/FileManager.js | 4 +- src/model/NetEaseMusic.js | 25 +- src/shell/icon.svg | 19 + src/shell/install.sh | 9 + src/shell/nwMusicBox.desktop | 11 + ...6\211\350\243\205\350\257\264\346\230\216" | 2 + 18 files changed, 146 insertions(+), 653 deletions(-) delete mode 100644 dist/libs/BigInt.js delete mode 100644 src/model/BigInt.js create mode 100644 src/shell/icon.svg create mode 100755 src/shell/install.sh create mode 100755 src/shell/nwMusicBox.desktop create mode 100644 "src/shell/\345\256\211\350\243\205\350\257\264\346\230\216" diff --git a/README.md b/README.md index 3e97507..968bced 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,34 @@ -# 网易音乐盒 - +

网易音乐盒

使用html5和node.js构建的网易云音乐的跨平台第三方客户端。 - + -###Release -__version 1.3.2__ -Linux:[x64](http://7xiyak.com1.z0.glb.clouddn.com/1.3.2linux64.zip) -Changelog: 修复登录功能 -其他平台参考`Manual Install` +###Release +百度网盘: [linux64](http://pan.baidu.com/s/1mgrIGVQ) ###Feature -1. 设定本地音乐文件夹,播放本地音乐 -2. 搜索播放网络音乐 -3. 设置自定义播放列表,可以同时加入网络音乐和本地音乐 -4. 手机帐号或邮箱帐号登录 -5. UI响应式布局与mini模式 -6. 侧栏列表鼠标拖动排序 -7. 滚动歌词 -8. 私人fm -9. 系统播放提示 -10. 托盘图标 +1. 设定本地音乐文件夹,递归搜索本地音乐。 +2. 搜索播放网络音乐 +3. 自定义播放列表,可以同时加入网络音乐和本地音乐 +4. 手机帐号或邮箱帐号登录 +5. UI响应式布局与mini模式 +6. 滚动歌词秀 +7. 私人fm +8. 系统播放提示 +9. 系统托盘 ###Manual Install 1. 下载安装[nw.js](https://github.com/nwjs/nw.js) -2. 拷贝chrome安装目录下的`libffmpegsumo.so`(windows下是`libffmpegsumo.dll`)至nw.js的安装目录下 +2. 拷贝chrome安装目录下的`libffmpegsumo.so`(windows下是`libffmpegsumo.dll`)至nw.js目录下 3. 下载并切换至项目:`git clone https://github.com/stkevintan/nw_musicbox.git && cd nw_musicbox/` 4. 安装模块: `npm i` -4. 运行: `/path/to/nw .` +5. 运行: `/path/to/nw .` -`libffmpegsumo`的版本一定要与nw.js版本对应,否则放不出声音。nw.js v0.12.0对应chrome 41.x + +`libffmpegsumo`的版本一定要与nw.js版本对应,否则不支持MP3等常见格式。nw.js v0.12.0对应chrome 41.x + ###Update -`cd /path/to/NetEaseMusic/ && git pull` +`cd /path/to/NetEaseMusic/ && git pull` ###Screenshots @@ -61,13 +56,11 @@ model中包括: - `FileManager` 处理本地文件系统 - `NetEaseMusic` 处理网络(既api) - `Crypto` 加密模块 -- `BigInt` 支持加密模块的大数模块 - `Utils` 对node.js中util的扩展,包括二分查找、队列等实用工具 目前已经定义了本地、用户、云音乐三个播放列表源。可以通过扩展entry对象添加新的播放列表源。 ###Troubleshooting -遇到什么问题可以尝试一下删除项目主目录中data目录再重启。 ####Mini模式还能调窗口大小 这是nw.js的bug diff --git a/dist/assets/img/album.png b/dist/assets/img/album.png index 4695b160aeedd5a60726a4fd86ff7d1886b9a808..d874aa9239791e4acecc1cdd417b973d694d4ec7 100644 GIT binary patch delta 1477 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 diff --git a/dist/assets/js/my.js b/dist/assets/js/my.js index e54b515..087da5d 100644 --- a/dist/assets/js/my.js +++ b/dist/assets/js/my.js @@ -1 +1 @@ -function Category(){this.$={sidebar:$("#sidebar"),entry:$("#entry"),uls:function(t){return t?this.entry.find("#__"+t).find("ul"):this.entry.find("ul")},lis:function(t){return t?this.entry.find("#__"+t).find("li"):this.entry.find("li")},totSong:$("#totsong"),totlist:$("#totlist"),refresh:$("#refresh"),addlist:$("#addlist"),table:$("table")},this.isOpen=!0,this.domCache=[],this.loadQue=new utils.queue,this.listen(this),this.addEvents()}var Account=function(){this.$={userProfile:$("#user-profile"),login:$("#login"),submit:$("#login").find("button.submit"),label:$("#login").find("label"),phone:$("#login").find('input[name="phone"]'),password:$("#login").find('input[name="password"]')},this.listen(this)};Account.prototype={loadUser:function(t){t=t||fm.getUserID();var i=this;t?api.userProfile(t,function(t,e){t?(errorHandle(t),i.setUserProfile()):i.setUserProfile(e)}):i.setUserProfile()},unsign:function(){fm.setCookie(null),this.setUserProfile(),category.loadPlaylists({net:!0})},showlogin:function(){this.$.label.hide(),this.$.login.modal("show"),this.$.phone.focus()},loginErr:function(t){this.$.label.text(t),this.$.label.show()},loginSuccess:function(t){this.$.label.text(""),this.$.login.modal("hide"),this.setUserProfile(t),category.loadPlaylists({net:!0})},setUserProfile:function(t){t=t||{nickname:"未登录",avatarUrl:""},nav.setMenu(t.nickname,t.avatarUrl)},listen:function(t){this.$.submit.click(function(){var i=$(this).button("loading"),e=t.$.phone.val(),s=t.$.password.val();api.login(e,s,function(e,s){e?(errorHandle(e),t.loginErr(e.msg)):t.loginSuccess(s),i.button("reset")})}),this.$.phone.keydown(function(i){13==i.which&&t.$.password.focus()}),this.$.password.keydown(function(i){13==i.which&&t.$.submit.trigger("click")})}};var loading=!1,loadSize=0;Category.prototype={loadPlaylists:function(t,i){function e(t,i){if(t)errorHandle(t);else if(utils.isArray(i)){var e=a.plts.length;a.plts=a.plts.concat(i);for(var s=0;s=0&&t1&&(this.plts=this.plts.sort(function(t,i){return t.timestamp-i.timestamp})),!this.loadQue.empty())){console.log("load task in queue");var i=this.loadQue.front();this.loadQue.pop(),utils.isArray(i)&&this.loadPlaylists.apply(this,i)}},this),Event.on("rfshBadge",function(){for(var t=this.$.lis().find(".badge"),i=0;i0&&0>s&&(i=Math.min(this.$.lyric[0].offsetHeight>>1,-s));var n=-this.$.ulDOM.offsetHeight+20;if(0>t&&s>n&&(i=Math.max(-this.$.lyric[0].offsetHeight>>1,n-s)),i){this.$.ulDOM.style.marginTop=s+i+"px";var a=this;player.playing&&(null!==this.delay.id&&clearTimeout(this.delay.id),this.delay.id=setTimeout(function(){a.delay.id=null,a.autoScroll()},this.delay.time))}},setDesc:function(t){this.$.pic.attr("src",t.pic||""),this.$.title.text(t.title),this.$.album.text(t.album),this.$.artist.text(t.artist)},setLrc:function(t){if(this.$.ulDOM.innerHTML="",this.$.ulDOM.style.marginTop=0,this.$.liDOM=[],this.lrcObj)if(this.lrcObj.noTime){this.appendline("****歌词无法滚动****");for(var i=0;i>2;this.$.ulDOM.style.marginTop=i>e?e-i+"px":0}else this.$.ulDOM.style.marginTop=0},seek:function(t){if(this.state&&this.lrcObj&&!this.lrcObj.noTime){var i=utils.binarySearch(this.lrcObj.lines,t,function(t){return t.time});-1!=i?this._index!==i&&(this._index>=0&&(this.$.liDOM[this._index].className=""),this.$.liDOM[i].className="current",this._index=i,this.autoScroll()):this.autoScroll()}},parse:function(){var t=/\[(\d{2,})\:(\d{2})(?:\.(\d{2,3}))?\]/g,i={title:"ti",artist:"ar",album:"al",offset:"offset",by:"by"},e=function(t){return t&&t.replace(/(^\s*|\s*$)/m,"")},s=function(i){return t.test(i)};return function(n){if(!utils.isString(n))return void console.log("invalid param");this.lrc=e(n);var a=n.split(/\n/);if(!s(this.lrc))return this.noTime=1,void(this.txt=a);this.tags={},this.lines=[];var r,l,o,h;for(var c in i)r=n.match(new RegExp("\\["+i[c]+":([^\\]]*)\\]","i")),this.tags[c]=r&&r[1]||"";t.lastIndex=0;for(var d=0,u=a.length;u>d;d++)for(;o=t.exec(a[d]);)h=t.lastIndex,l=e(a[d].replace(t,"")),t.lastIndex=h,this.lines.push({time:60*o[1]+1*o[2]+(o[3]||0)/1e3,originLineNum:d,txt:l});this.lines.sort(function(t,i){return t.time-i.time})}}(),listen:function(){}};var tabName=["#main","#radio","#settings"],Nav=function(){this.ID=0,this.$={tabBody:tabName.map(function(t){return $(t)}),tabHead:tabName.map(function(t){return $(t+"-nav")}),search:$("#search"),UserImg:$("#user-profile img"),UserTxt:$("#user-profile p"),MenuItem0:$("#menugo-0"),MenuItem1:$("#menugo-1")},this.WinMode={isSimp:0,width:null,height:null},this.listen(this)};Nav.prototype={setState:function(t){if(t=t||0,t!=this.ID){var i=this;this.$.tabBody[this.ID].fadeOut(100,function(){i.$.tabBody[t].fadeIn(100)}),$([this.$.tabHead[this.ID],this.$.tabHead[t]]).toggleClass("active"),this.ID=t,1==t?radio.show():lrc.toggle(!1)}},search:function(){var t=this.$.search.val();api.search(t,function(i,e){if(i)throw"search api returns an error:"+i;var s='"'+t+'"的搜索结果',n=e;category.addItem(new PltM({name:s,type:"user",songList:n}),!0)})},close:function(){win.hide(),console.log("save the config changes..."),fm.SaveChanges(category.recKey,category.plts,function(t){t?console.log("save failed",t):console.log("saved"),win.close(!0)})},minimize:function(){win.minimize()},maximize:function(){this.WinMode.isMaxi?win.unmaximize():win.maximize(),this.WinMode.isMaxi^=1},toggleWindow:function(t){t||this.WinMode.isSimp?win.resizeTo(this.WinMode.width,this.WinMode.height):(win.unmaximize(),this.WinMode.width=win.width,this.WinMode.height=win.height,win.resizeTo(560,60)),this.WinMode.isSimp^=1},setMenu:function(t,i){i?(this.$.MenuItem0.hide(),this.$.MenuItem1.show()):(this.$.MenuItem1.hide(),this.$.MenuItem0.show()),this.$.UserImg.attr("src",i),this.$.UserTxt.text(t)},clickMenu:function(t){0==t?account.showlogin():account.unsign()},listen:function(t){$(this.$.search).keydown(function(i){13==i.which&&(i.preventDefault(),t.search())})}};var Player=function(){this.$={play:$("#play"),pause:$("#pause"),order:$("#order span"),backward:$("#backward"),volume:$("#volume"),volIcon:$("#vol-icon"),songPic:$("#song-pic"),totTime:$("#tot-time"),curTime:$("#cur-time"),title:$("h4.media-heading"),progress:$(".media-body input")},this.audio=new Audio,this.progress=this.$.progress.slider({id:"progress",value:0,min:0,max:0,step:1,formatter:this.timeFormartter}),this.playling=!1,this.volume=this.$.volume.slider({value:.5,min:0,max:1,step:.01}),this.ID=1,this.stop(),this.duration=-1,this.setOrder(this.ID),this.setVolume(.5),this.listen()};Player.prototype={orderList:[{name:"单曲循环",value:"repeat"},{name:"列表循环",value:"refresh"},{name:"顺序播放",value:"align-justify"},{name:"随机播放",value:"random"}],play:function(t){(this.playlist&&-1!=this.playlist.ID||radio.state)&&(this.$.play.hide(),this.$.pause.show(),t&&this.setMetaData(t),this.audio.play())},playNext:function(t){if(t=t||this.ID,this.playlist&&-1!=this.playlist.ID){var i=this.playlist.next(t);i?this.play(i):this.stop()}radio.state&&1==t&&radio.playNext()},pause:function(){this.$.play.show(),this.$.pause.hide(),this.audio.pause()},stop:function(t,i){this.audio.pause(),i?(this.audio.currentTime=0,this.setCurrentTime(0)):(t=t||"未选择歌曲",lrc.load({title:t,album:"未知",artist:"未知"}),this.playlist&&this.playlist.setState(-1),this.playlist=null,this.$.play.show(),this.$.pause.hide(),this.setDuration(0),this.setHead(t,""))},timeFormartter:function(t){var i=Math.ceil(t),e=i%60,s=Math.floor(i/60),n=(10>e?"0":"")+e,a=(10>s?"0":"")+s;return a+":"+n},setHead:function(t,i){this.$.songPic.attr("src",i),this.$.title.text(t)},setMetaData:function(t){lrc.load(t),this.setHead(t.title,t.pic),this.audio.src=t.src,showNotify("现在播放:"+t.title)},setCurrentTime:function(t){t>this.duration&&(t=this.duration),this.$.curTime.text(this.timeFormartter(t)),this.progress.slider("setValue",t)},setDuration:function(t){this.duration=t,this.progress.slider("setAttribute","max",t),this.$.totTime.text(this.timeFormartter(t))},setVolume:function(t){utils.isNumber(t)&&t>=0&&1>=t&&(this.volume.slider("setValue",t),this.audio.volume=t)},toggleVolMute:function(){var t=this.volume.slider("isEnabled");t?(this.audio.muted=!0,this.volume.slider("disable"),this.$.volIcon.attr("class","glyphicon glyphicon-volume-off")):(this.audio.muted=!1,this.volume.slider("enable"),this.$.volIcon.attr("class","glyphicon glyphicon-volume-up"))},setOrder:function(t){var i=this.orderList.length;utils.isNumber(t)&&(this.ID=(t-1+i)%i),this.ID=(this.ID+1)%i;var e=this.orderList[this.ID];this.$.order.attr("class","glyphicon glyphicon-"+e.value),this.$.order.attr("title",e.name)},listen:function(){var t=this;this.audio.onloadedmetadata=function(){t.setDuration(this.duration)},this.audio.onerror=function(){t.playing=!1;var i;switch(this.error.code){case 1:i="未选择歌曲";break;case 2:i="糟糕,网络貌似除了点问题";break;case 3:i="糟糕,缺少相应解码器";break;case 4:i="糟糕,文件或网络资源无法访问";break;default:i="未知错误,error code:"+this.error.code}t.stop(i)};var i=!1;this.audio.ontimeupdate=function(){i||t.setCurrentTime(this.currentTime),lrc.seek(this.currentTime)},this.audio.onended=function(){t.playing=!1,t.playNext()},this.audio.onpause=function(){t.playing=!1},this.audio.onplaying=function(){t.playing=!0},this.progress.slider("on","slideStart",function(){i=!0}),this.progress.slider("on","slideStop",function(){var e=t.progress.slider("getValue");t.audio.currentTime=e,t.setCurrentTime(e),i=!1}),this.volume.slider("on","slide",function(i){t.audio.volume=i}),this.volume.slider("on","change",function(i){i.oldValue!=i.newValue&&(t.audio.volume=i.newValue)})}};var Playlist=function(t,i){this.$={frame:$(t),tr:function(){return this.frame.find("tr")}},this.index=i,this.timestamp=category.plts[i].timestamp,this.songList=category.plts[i].songList,this.canDel=entry.getMode(category.plts[i].type,1),this.domCache=[],this.ID=-1,this.length=0,this.load(),this.listen()};Playlist.prototype={show:function(){var t=category.$.table;"none"==t.css("display")?(this.$.frame.show(),t.fadeIn()):this.$.frame.fadeIn()},hide:function(){this.$.frame.hide()},load:function(){this.$.frame.empty();for(var t=0;t=this.songList.length&&(this.songList.push(t),Event.emit("rfshBadge"))},removeItem:function(t){if(0>t||t>this.length)throw"index out of range";if(!this.canDel)throw"insufficient permission to remove";t==this.ID&&(this.ID=-1,player.stop()),this.ID>t&&this.ID--;var i=this.$.tr();i.eq(t).remove();var e=i.slice(t+1);e.each(function(){var t=$(this).children("td").first(),i=t.text();i&&t.text(Number(i)-1)}),this.songList.splice(t,1),this.length--,Event.emit("rfshBadge")},setState:function(t){if(t=t||0,t!=this.ID){if(t>=this.length)throw"index out of range";var i=this.$.tr(),e=[],s=[];t>=0&&(e=[i[t]],s=['']),this.ID>=0&&(e.push(i[this.ID]),s.push(this.ID+1)),$(e).toggleClass("active");for(var n=$(e).children("td:first-child"),a=0;a=0&&t1&&(this.plts=this.plts.sort(function(t,i){return t.timestamp-i.timestamp})),!this.loadQue.empty())){console.log("load task in queue");var i=this.loadQue.front();this.loadQue.pop(),utils.isArray(i)&&this.loadPlaylists.apply(this,i)}},this),Event.on("rfshBadge",function(){for(var t=this.$.lis().find(".badge"),i=0;i0&&0>s&&(i=Math.min(this.$.lyric[0].offsetHeight>>1,-s));var n=-this.$.ulDOM.offsetHeight+20;if(0>t&&s>n&&(i=Math.max(-this.$.lyric[0].offsetHeight>>1,n-s)),i){this.$.ulDOM.style.marginTop=s+i+"px";var a=this;player.playing&&(null!==this.delay.id&&clearTimeout(this.delay.id),this.delay.id=setTimeout(function(){a.delay.id=null,a.autoScroll()},this.delay.time))}},setDesc:function(t){this.$.pic.attr("src",t.pic||""),this.$.title.text(t.title),this.$.album.text(t.album),this.$.artist.text(t.artist)},setLrc:function(t){if(this.$.ulDOM.innerHTML="",this.$.ulDOM.style.marginTop=0,this.$.liDOM=[],this.lrcObj)if(this.lrcObj.noTime){this.appendline("****歌词无法滚动****");for(var i=0;i>2;this.$.ulDOM.style.marginTop=i>e?e-i+"px":0}else this.$.ulDOM.style.marginTop=0},seek:function(t){if(this.state&&this.lrcObj&&!this.lrcObj.noTime){var i=utils.binarySearch(this.lrcObj.lines,t,function(t){return t.time});-1!=i?this._index!==i&&(this._index>=0&&(this.$.liDOM[this._index].className=""),this.$.liDOM[i].className="current",this._index=i,this.autoScroll()):this.autoScroll()}},parse:function(){var t=/\[(\d{2,})\:(\d{2})(?:\.(\d{2,3}))?\]/g,i={title:"ti",artist:"ar",album:"al",offset:"offset",by:"by"},e=function(t){return t&&t.replace(/(^\s*|\s*$)/m,"")},s=function(i){return t.test(i)};return function(n){if(!utils.isString(n))return void console.log("invalid param");this.lrc=e(n);var a=n.split(/\n/);if(!s(this.lrc))return this.noTime=1,void(this.txt=a);this.tags={},this.lines=[];var r,l,o,h;for(var c in i)r=n.match(new RegExp("\\["+i[c]+":([^\\]]*)\\]","i")),this.tags[c]=r&&r[1]||"";t.lastIndex=0;for(var d=0,u=a.length;u>d;d++)for(;o=t.exec(a[d]);)h=t.lastIndex,l=e(a[d].replace(t,"")),t.lastIndex=h,this.lines.push({time:60*o[1]+1*o[2]+(o[3]||0)/1e3,originLineNum:d,txt:l});this.lines.sort(function(t,i){return t.time-i.time})}}(),listen:function(){}};var tabName=["#main","#radio","#settings"],Nav=function(){this.ID=0,this.$={tabBody:tabName.map(function(t){return $(t)}),tabHead:tabName.map(function(t){return $(t+"-nav")}),search:$("#search"),UserImg:$("#user-profile img"),UserTxt:$("#user-profile p"),MenuItem0:$("#menugo-0"),MenuItem1:$("#menugo-1")},this.WinMode={isSimp:0,width:null,height:null},this.listen(this)};Nav.prototype={setState:function(t){if(t=t||0,t!=this.ID){var i=this;this.$.tabBody[this.ID].fadeOut(100,function(){i.$.tabBody[t].fadeIn(100)}),$([this.$.tabHead[this.ID],this.$.tabHead[t]]).toggleClass("active"),this.ID=t,1==t?radio.show():lrc.toggle(!1)}},search:function(){var t=this.$.search.val();api.search(t,function(i,e){if(i)throw"search api returns an error:"+i;var s='"'+t+'"的搜索结果',n=e;category.addItem(new PltM({name:s,type:"user",songList:n}),!0)})},close:function(){win.hide(),console.log("save the config changes..."),fm.SaveChanges(category.recKey,category.plts,function(t){t?console.log("save failed",t):console.log("saved"),win.close(!0)})},minimize:function(){win.minimize()},maximize:function(){this.WinMode.isMaxi?win.unmaximize():win.maximize(),this.WinMode.isMaxi^=1},toggleWindow:function(t){t||this.WinMode.isSimp?win.resizeTo(this.WinMode.width,this.WinMode.height):(win.unmaximize(),this.WinMode.width=win.width,this.WinMode.height=win.height,win.resizeTo(560,60)),this.WinMode.isSimp^=1},setMenu:function(t,i){i?(this.$.MenuItem0.hide(),this.$.MenuItem1.show()):(this.$.MenuItem1.hide(),this.$.MenuItem0.show()),this.$.UserImg.attr("src",i),this.$.UserTxt.text(t)},clickMenu:function(t){0==t?account.showlogin():account.unsign()},listen:function(t){$(this.$.search).keydown(function(i){13==i.which&&(i.preventDefault(),t.search())})}};var Player=function(){this.$={play:$("#play"),pause:$("#pause"),order:$("#order span"),backward:$("#backward"),volume:$("#volume"),volIcon:$("#vol-icon"),songPic:$("#song-pic"),totTime:$("#tot-time"),curTime:$("#cur-time"),title:$("h4.media-heading"),progress:$(".media-body input")},this.audio=new Audio,this.progress=this.$.progress.slider({id:"progress",value:0,min:0,max:0,step:1,formatter:this.timeFormartter}),this.playling=!1,this.volume=this.$.volume.slider({value:.5,min:0,max:1,step:.01}),this.ID=1,this.stop(),this.duration=-1,this.setOrder(this.ID),this.setVolume(.5),this.listen()};Player.prototype={orderList:[{name:"单曲循环",value:"repeat"},{name:"列表循环",value:"refresh"},{name:"顺序播放",value:"align-justify"},{name:"随机播放",value:"random"}],play:function(t){(this.playlist&&-1!=this.playlist.ID||radio.state)&&(this.$.play.hide(),this.$.pause.show(),t&&this.setMetaData(t),this.audio.play())},playNext:function(t){if(t=t||this.ID,this.playlist&&-1!=this.playlist.ID){var i=this.playlist.next(t);i?this.play(i):this.stop()}radio.state&&1==t&&radio.playNext()},pause:function(){this.$.play.show(),this.$.pause.hide(),this.audio.pause()},stop:function(t,i){this.audio.pause(),i?(this.audio.currentTime=0,this.setCurrentTime(0)):(t=t||"未选择歌曲",lrc.load({title:t,album:"未知",artist:"未知"}),this.playlist&&this.playlist.setState(-1),this.playlist=null,this.$.play.show(),this.$.pause.hide(),this.setDuration(0),this.setHead(t,""))},timeFormartter:function(t){var i=Math.ceil(t),e=i%60,s=Math.floor(i/60),n=(10>e?"0":"")+e,a=(10>s?"0":"")+s;return a+":"+n},setHead:function(t,i){this.$.songPic.attr("src",i),this.$.title.text(t)},setMetaData:function(t){lrc.load(t),this.setHead(t.title,t.pic),this.audio.src=t.src,showNotify("现在播放:"+t.title)},setCurrentTime:function(t){t>this.duration&&(t=this.duration),this.$.curTime.text(this.timeFormartter(t)),this.progress.slider("setValue",t)},setDuration:function(t){this.duration=t,this.progress.slider("setAttribute","max",t),this.$.totTime.text(this.timeFormartter(t))},setVolume:function(t){utils.isNumber(t)&&t>=0&&1>=t&&(this.volume.slider("setValue",t),this.audio.volume=t)},toggleVolMute:function(){var t=this.volume.slider("isEnabled");t?(this.audio.muted=!0,this.volume.slider("disable"),this.$.volIcon.attr("class","glyphicon glyphicon-volume-off")):(this.audio.muted=!1,this.volume.slider("enable"),this.$.volIcon.attr("class","glyphicon glyphicon-volume-up"))},setOrder:function(t){var i=this.orderList.length;utils.isNumber(t)&&(this.ID=(t-1+i)%i),this.ID=(this.ID+1)%i;var e=this.orderList[this.ID];this.$.order.attr("class","glyphicon glyphicon-"+e.value),this.$.order.attr("title",e.name)},listen:function(){var t=this;this.audio.onloadedmetadata=function(){t.setDuration(this.duration)},this.audio.onerror=function(){t.playing=!1;var i;switch(this.error.code){case 1:i="未选择歌曲";break;case 2:i="糟糕,网络貌似除了点问题";break;case 3:i="糟糕,缺少相应解码器";break;case 4:i="糟糕,文件或网络资源无法访问";break;default:i="未知错误,error code:"+this.error.code}t.stop(i)};var i=!1;this.audio.ontimeupdate=function(){i||t.setCurrentTime(this.currentTime),lrc.seek(this.currentTime)},this.audio.onended=function(){t.playing=!1,t.playNext()},this.audio.onpause=function(){t.playing=!1},this.audio.onplaying=function(){t.playing=!0},this.progress.slider("on","slideStart",function(){i=!0}),this.progress.slider("on","slideStop",function(){var e=t.progress.slider("getValue");t.audio.currentTime=e,t.setCurrentTime(e),i=!1}),this.volume.slider("on","slide",function(i){t.audio.volume=i}),this.volume.slider("on","change",function(i){i.oldValue!=i.newValue&&(t.audio.volume=i.newValue)})}};var Playlist=function(t,i){this.$={frame:$(t),tr:function(){return this.frame.find("tr")}},this.index=i,this.timestamp=category.plts[i].timestamp,this.songList=category.plts[i].songList,this.canDel=entry.getMode(category.plts[i].type,1),this.domCache=[],this.ID=-1,this.length=0,this.load(),this.listen()};Playlist.prototype={show:function(){var t=category.$.table;"none"==t.css("display")?(this.$.frame.show(),t.fadeIn()):this.$.frame.fadeIn()},hide:function(){this.$.frame.hide()},load:function(){this.$.frame.empty();for(var t=0;t=this.songList.length&&(this.songList.push(t),Event.emit("rfshBadge"))},removeItem:function(t){if(0>t||t>this.length)throw"index out of range";if(!this.canDel)throw"insufficient permission to remove";t==this.ID&&(this.ID=-1,player.stop()),this.ID>t&&this.ID--;var i=this.$.tr();i.eq(t).remove();var e=i.slice(t+1);e.each(function(){var t=$(this).children("td").first(),i=t.text();i&&t.text(Number(i)-1)}),this.songList.splice(t,1),this.length--,Event.emit("rfshBadge")},setState:function(t){if(t=t||0,t!=this.ID){if(t>=this.length)throw"index out of range";var i=this.$.tr(),e=[],s=[];t>=0&&(e=[i[t]],s=['']),this.ID>=0&&(e.push(i[this.ID]),s.push(this.ID+1)),$(e).toggleClass("active");for(var n=$(e).children("td:first-child"),a=0;ai,i=Math.abs(i);for(var r=0;i>0;)t.digits[r++]=i&maxDigitVal,i>>=biRadixBits;return t}function reverseStr(i){for(var t="",r=i.length-1;r>-1;--r)t+=i.charAt(r);return t}function digitToHex(t){var r=15,e="";for(i=0;i<4;++i)e+=hexToChar[t&r],t>>>=4;return reverseStr(e)}function biToHex(i){for(var t="",r=(biHighIndex(i),biHighIndex(i));r>-1;--r)t+=digitToHex(i.digits[r]);return t}function charToHex(i){var t,r=48,e=r+9,g=97,s=g+25,n=65,d=90;return t=i>=r&&e>=i?i-r:i>=n&&d>=i?10+i-n:i>=g&&s>=i?10+i-g:0}function hexToDigit(i){for(var t=0,r=Math.min(i.length,4),e=0;r>e;++e)t<<=4,t|=charToHex(i.charCodeAt(e));return t}function biFromHex(i){for(var t=new BigInt,r=i.length,e=r,g=0;e>0;e-=4,++g)t.digits[g]=hexToDigit(i.substr(Math.max(e-4,0),Math.min(e,4)));return t}function biFromString(i,t){var r="-"==i.charAt(0),e=r?1:0,g=new BigInt,s=new BigInt;s.digits[0]=1;for(var n=i.length-1;n>=e;n--){var d=i.charCodeAt(n),a=charToHex(d),o=biMultiplyDigit(s,a);g=biAdd(g,o),s=biMultiplyDigit(s,t)}return g.isNeg=r,g}function biDump(i){return(i.isNeg?"-":"")+i.digits.join(" ")}function biAdd(i,t){var r;if(i.isNeg!=t.isNeg)t.isNeg=!t.isNeg,r=biSubtract(i,t),t.isNeg=!t.isNeg;else{r=new BigInt;for(var e,g=0,s=0;s=biRadix);r.isNeg=i.isNeg}return r}function biSubtract(i,t){var r;if(i.isNeg!=t.isNeg)t.isNeg=!t.isNeg,r=biAdd(i,t),t.isNeg=!t.isNeg;else{r=new BigInt;var e,g;g=0;for(var s=0;se);if(-1==g){g=0;for(var s=0;se);r.isNeg=!i.isNeg}else r.isNeg=i.isNeg}return r}function biHighIndex(i){for(var t=i.digits.length-1;t>0&&0==i.digits[t];)--t;return t}function biNumBits(i){var t,r=biHighIndex(i),e=i.digits[r],g=(r+1)*bitsPerDigit;for(t=g;t>g-bitsPerDigit&&0==(32768&e);--t)e<<=1;return t}function biMultiply(i,t){for(var r,e,g,s=new BigInt,n=biHighIndex(i),d=biHighIndex(t),a=0;d>=a;++a){for(r=0,g=a,j=0;j<=n;++j,++g)e=s.digits[g]+i.digits[j]*t.digits[a]+r,s.digits[g]=e&maxDigitVal,r=e>>>biRadixBits;s.digits[a+n+1]=r}return s.isNeg=i.isNeg!=t.isNeg,s}function biMultiplyDigit(i,t){var r,e,g;result=new BigInt,r=biHighIndex(i),e=0;for(var s=0;r>=s;++s)g=result.digits[s]+i.digits[s]*t+e,result.digits[s]=g&maxDigitVal,e=g>>>biRadixBits;return result.digits[1+r]=e,result}function arrayCopy(i,t,r,e,g){for(var s=Math.min(t+g,i.length),n=t,d=e;s>n;++n,++d)r[d]=i[n]}function biShiftLeft(i,t){var r=Math.floor(t/bitsPerDigit),e=new BigInt;arrayCopy(i.digits,0,e.digits,r,e.digits.length-r);for(var g=t%bitsPerDigit,s=bitsPerDigit-g,n=e.digits.length-1,d=n-1;n>0;--n,--d)e.digits[n]=e.digits[n]<>>s;return e.digits[0]=e.digits[n]<>>g|(e.digits[d]&lowBitMasks[g])<>>=g,e.isNeg=i.isNeg,e}function biMultiplyByRadixPower(i,t){var r=new BigInt;return arrayCopy(i.digits,0,r.digits,t,r.digits.length-t),r}function biDivideByRadixPower(i,t){var r=new BigInt;return arrayCopy(i.digits,t,r.digits,0,r.digits.length-t),r}function biModuloByRadixPower(i,t){var r=new BigInt;return arrayCopy(i.digits,0,r.digits,0,t),r}function biCompare(i,t){if(i.isNeg!=t.isNeg)return 1-2*Number(i.isNeg);for(var r=i.digits.length-1;r>=0;--r)if(i.digits[r]!=t.digits[r])return i.isNeg?1-2*Number(i.digits[r]>t.digits[r]):1-2*Number(i.digits[r]g)return i.isNeg?(r=biCopy(bigOne),r.isNeg=!t.isNeg,i.isNeg=!1,t.isNeg=!1,e=biSubtract(t,i),i.isNeg=!0,t.isNeg=n):(r=new BigInt,e=biCopy(i)),new Array(r,e);r=new BigInt,e=i;for(var d=Math.ceil(s/bitsPerDigit)-1,a=0;t.digits[d]d;--b){var l=b>=e.digits.length?0:e.digits[b],h=b-1>=e.digits.length?0:e.digits[b-1],f=b-2>=e.digits.length?0:e.digits[b-2],x=d>=t.digits.length?0:t.digits[d],c=d-1>=t.digits.length?0:t.digits[d-1];r.digits[b-d-1]=l==x?maxDigitVal:Math.floor((l*biRadix+h)/x);for(var M=r.digits[b-d-1]*(x*biRadix+c),N=l*biRadixSquared+(h*biRadix+f);M>N;)--r.digits[b-d-1],M=r.digits[b-d-1]*(x*biRadix|c),N=l*biRadix*biRadix+(h*biRadix+f);u=biMultiplyByRadixPower(t,b-d-1),e=biSubtract(e,biMultiplyDigit(u,r.digits[b-d-1])),e.isNeg&&(e=biAdd(e,u),--r.digits[b-d-1])}return e=biShiftRight(e,a),r.isNeg=i.isNeg!=n,i.isNeg&&(r=n?biAdd(r,bigOne):biSubtract(r,bigOne),t=biShiftRight(t,a),e=biSubtract(t,e)),0==e.digits[0]&&0==biHighIndex(e)&&(e.isNeg=!1),new Array(r,e)}function biDivide(i,t){return biDivideModulo(i,t)[0]}function biModulo(i,t){return biDivideModulo(i,t)[1]}function biMultiplyMod(i,t,r){return biModulo(biMultiply(i,t),r)}function biPow(i,t){for(var r=bigOne,e=i;;){if(0!=(1&t)&&(r=biMultiply(r,e)),t>>=1,0==t)break;e=biMultiply(e,e)}return r}function biPowMod(i,t,r){for(var e=bigOne,g=i,s=t;;){if(0!=(1&s.digits[0])&&(e=biMultiplyMod(e,g,r)),s=biShiftRight(s,1),0==s.digits[0]&&0==biHighIndex(s))break;g=biMultiplyMod(g,g,r)}return e}function BarrettMu(i){this.modulus=biCopy(i),this.k=biHighIndex(this.modulus)+1;var t=new BigInt;t.digits[2*this.k]=1,this.mu=biDivide(t,this.modulus),this.bkplus1=new BigInt,this.bkplus1.digits[this.k+1]=1,this.modulo=BarrettMu_modulo,this.multiplyMod=BarrettMu_multiplyMod,this.powMod=BarrettMu_powMod}function BarrettMu_modulo(i){var t=biDivideByRadixPower(i,this.k-1),r=biMultiply(t,this.mu),e=biDivideByRadixPower(r,this.k+1),g=biModuloByRadixPower(i,this.k+1),s=biMultiply(e,this.modulus),n=biModuloByRadixPower(s,this.k+1),d=biSubtract(g,n);d.isNeg&&(d=biAdd(d,this.bkplus1));for(var a=biCompare(d,this.modulus)>=0;a;)d=biSubtract(d,this.modulus),a=biCompare(d,this.modulus)>=0;return d}function BarrettMu_multiplyMod(i,t){var r=biMultiply(i,t);return this.modulo(r)}function BarrettMu_powMod(i,t){var r=new BigInt;r.digits[0]=1;for(var e=i,g=t;;){if(0!=(1&g.digits[0])&&(r=this.multiplyMod(r,e)),g=biShiftRight(g,1),0==g.digits[0]&&0==biHighIndex(g))break;e=this.multiplyMod(e,e)}return r}module.exports={newInstance:function(i,t){if(!i)return new BigInt;if(isInstance(i))return 16==t?new BarrettMu(i):biCopy(i);if("number"==typeof i)return biFromNumber(i);if(t=Number(t),isNaN(t))throw"radix must be integer";return t=t||10,16==t?biFromHex(i):biFromString(i,t)},isInstance:isInstance,setLimit:setMaxDigits,highIndex:biHighIndex},BigInt.prototype.toString=function(i){return"hex"==i?biToHex(this,10):biToString(this)};var biRadixBase=2,biRadixBits=16,bitsPerDigit=biRadixBits,biRadix=65536,biHalfRadix=biRadix>>>1,biRadixSquared=biRadix*biRadix,maxDigitVal=biRadix-1,maxInteger=9999999999999998,maxDigits,ZERO_ARRAY,bigZero,bigOne;setMaxDigits(131);var hexToChar=new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),highBitMasks=new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),lowBitMasks=new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535); \ No newline at end of file diff --git a/dist/libs/Crypto.js b/dist/libs/Crypto.js index 16650dc..df0e1bb 100644 --- a/dist/libs/Crypto.js +++ b/dist/libs/Crypto.js @@ -1 +1 @@ -function RSAKeyPair(e,t,n){this.radix=16,this.e=bi.newInstance(e,this.radix),this.d=bi.newInstance(t,this.radix),this.m=bi.newInstance(n,16),this.hex=bi.newInstance(this.m,this.radix),this.chunkSize=2*bi.highIndex(this.m)}function encryptedString(e,t){for(var n=new Array,r=t.length,c=0;r>c;c++)n[c]=t.charCodeAt(c);for(;n.length%e.chunkSize!=0;)n[c++]=0;var a,i,o,s=n.length,d="";for(c=0;s>c;c+=e.chunkSize){for(o=bi.newInstance(),a=0,i=c;ir;r++){var c=Math.random()*t.length;c=Math.floor(c),n+=t.charAt(c)}return n}var crypto=require("crypto"),bi=require("./BigInt"),Crypto=function(){var e="00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7",t="0CoJUm6Qyw8W8jud",n="010001",r={};return r.MD5=function(e){return crypto.createHash("md5").update(e).digest("hex")},r.aesRsaEncrypt=function(r,c,a,i){a=a||e,i=i||t,c=c||n;var o={},s=createSecretKey(16);return o.encText=aesEncrypt(r,i),console.log("encText1",o.encText),o.encText=aesEncrypt(o.encText,s),console.log("encText2",o.encText),o.encSecKey=rsaEncrypt(s,c,a),console.log("encSecKey",o.encSecKey),o},r}();module.exports=Crypto; \ No newline at end of file +function addPadding(e,r){var t=r.length;for(c=0;t>0&&"0"==r[c];c++)t--;for(var a=t-e.length,n="",c=0;a>c;c++)n+="0";return n+e}function aesEncrypt(e,r){var t=crypto.createCipheriv("AES-128-CBC",r,"0102030405060708");return t.update(e,"utf-8","base64")+t["final"]("base64")}function rsaEncrypt(e,r,t){for(var a="",n=16,c=e.length-1;c>=0;c--)a+=e[c];var d=bigInt(new Buffer(a).toString("hex"),n),o=bigInt(r,n),f=bigInt(t,n),b=d.modPow(o,f);return addPadding(b.toString(n),t)}function createSecretKey(e){for(var r="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",t="",a=0;e>a;a++){var n=Math.random()*r.length;n=Math.floor(n),t+=r.charAt(n)}return t}var crypto=require("crypto"),bigInt=require("big-integer"),modulus="00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7",nonce="0CoJUm6Qyw8W8jud",pubKey="010001",Crypto={MD5:function(e){return crypto.createHash("md5").update(e).digest("hex")},aesRsaEncrypt:function(e){var r=createSecretKey(16);return{params:aesEncrypt(aesEncrypt(e,nonce),r),encSecKey:rsaEncrypt(r,pubKey,modulus)}}};module.exports=Crypto; \ No newline at end of file diff --git a/dist/libs/FileManager.js b/dist/libs/FileManager.js index a44edc2..61f37bc 100644 --- a/dist/libs/FileManager.js +++ b/dist/libs/FileManager.js @@ -1 +1 @@ -function pack(e){return utils.isArray(e)?e=e.map(function(e){var n=new PltM(e);return n.songList=n.songList.map(function(e){return new SongM(e)}),n}):[]}var fs=require("fs"),utils=require("./Utils"),PltM=require("./PlaylistModel"),SongM=require("./SongModel"),process=require("process"),path=require("path"),home=require("home");const EXTS=[".mp3",".ogg",".wav"],DEFAULTMUSICDIR=function(){for(var e=["音乐","Music","music"].map(function(e){return home.resolve("~/"+e)}),n=0;n=0&&(config.content.searchLimit=e,config.isChanged=1)},fm.getLocal=function(e){var n=this;process.nextTick(function(){var t=n.loadMusicDirSync();utils.isString(t)?e(t):e(null,pack([{timestamp:0,name:n.getMusicDir(),songList:t,type:"local"}]))})},fm.loadMusicDirSync=function(e){var e=e||this.getMusicDir(),n=[],t=[];try{t=fs.readdirSync(e)}catch(i){try{fs.mkdirSync(e)}catch(i){return{msg:"[loadMusicDir]failed to read or create dir, please try another one.",type:1}}}var c=this;t=t.map(function(n){return path.join(e,n)}).filter(function(e){var t=fs.statSync(e);if(t&&t.isDirectory())return n=n.concat(c.loadMusicDirSync(e)),!1;for(var i=path.extname(e),o=0;o=0&&(config.content.searchLimit=e,config.isChanged=1)},fm.getLocal=function(e){var n=this;process.nextTick(function(){var t=n.loadMusicDirSync();utils.isString(t)?e(t):e(null,pack([{timestamp:0,name:n.getMusicDir(),songList:t,type:"local"}]))})},fm.loadMusicDirSync=function(e){var e=e||this.getMusicDir(),n=[],t=[];try{t=fs.readdirSync(e)}catch(i){try{fs.mkdirSync(e)}catch(i){return{msg:"[loadMusicDir]failed to read or create dir, please try another one.",type:1}}}var c=this;t=t.map(function(n){return path.join(e,n)}).filter(function(e){var t=fs.statSync(e);if(t&&t.isDirectory())return n=n.concat(c.loadMusicDirSync(e)),!1;for(var i=path.extname(e),o=0;oo;o++){var n=r.slice(100*o,Math.min(100*(o+1),r.length));a.songsDetail(n,function(t,r){if(t)throw t.msg;for(var o=0;oo;o++){var s=i.slice(100*o,Math.min(100*(o+1),i.length));a.songsDetail(s,function(t,i){if(t)throw t.msg;for(var o=0;o>> 1; -var biRadixSquared = biRadix * biRadix; -var maxDigitVal = biRadix - 1; -var maxInteger = 9999999999999998; -var maxDigits; -var ZERO_ARRAY; -var bigZero, bigOne; -setMaxDigits(131); -function isInstance(o) { - return o instanceof BigInt; -} -function setMaxDigits(value) { - maxDigits = value; - ZERO_ARRAY = new Array(maxDigits); - for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0; - bigZero = new BigInt(); - bigOne = new BigInt(); - bigOne.digits[0] = 1 -} - -function BigInt(flag) { - if (typeof flag == "boolean" && flag == true) { - this.digits = null - } else { - this.digits = ZERO_ARRAY.slice(0) - } - this.isNeg = false -} -function biCopy(bi) { - var result = new BigInt(true); - result.digits = bi.digits.slice(0); - result.isNeg = bi.isNeg; - return result -} - -function biFromNumber(i) { - var result = new BigInt; - result.isNeg = i < 0; - i = Math.abs(i); - var j = 0; - while (i > 0) { - result.digits[j++] = i & maxDigitVal; - i >>= biRadixBits - } - return result -} - -function reverseStr(s) { - var result = ""; - for (var i = s.length - 1; i > -1; --i) { - result += s.charAt(i) - } - return result -} - -var hexToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"); - -function digitToHex(n) { - var mask = 15; - var result = ""; - for (i = 0; i < 4; ++i) { - result += hexToChar[n & mask]; - n >>>= 4 - } - return reverseStr(result) -} - -function biToHex(x) { - var result = ""; - var n = biHighIndex(x); - for (var i = biHighIndex(x); i > -1; --i) { - result += digitToHex(x.digits[i]) - } - return result -} - -function charToHex(c) { - var ZERO = 48; - var NINE = ZERO + 9; - var littleA = 97; - var littleZ = littleA + 25; - var bigA = 65; - var bigZ = 65 + 25; - var result; - if (c >= ZERO && c <= NINE) { - result = c - ZERO - } else if (c >= bigA && c <= bigZ) { - result = 10 + c - bigA - } else if (c >= littleA && c <= littleZ) { - result = 10 + c - littleA - } else { - result = 0 - } - return result -} - -function hexToDigit(s) { - var result = 0; - var sl = Math.min(s.length, 4); - for (var i = 0; i < sl; ++i) { - result <<= 4; - result |= charToHex(s.charCodeAt(i)) - } - return result -} - -function biFromHex(s) { - var result = new BigInt(); - var sl = s.length; - for (var i = sl, j = 0; i > 0; i -= 4, ++j) { - result.digits[j] = hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4))) - } - return result -} - -function biFromString(s, radix) { - var isNeg = s.charAt(0) == "-"; - var istop = isNeg ? 1 : 0; - var result = new BigInt; - var place = new BigInt; - place.digits[0] = 1; - for (var i = s.length - 1; i >= istop; i--) { - var c = s.charCodeAt(i); - var digit = charToHex(c); - var biDigit = biMultiplyDigit(place, digit); - result = biAdd(result, biDigit); - place = biMultiplyDigit(place, radix) - } - result.isNeg = isNeg; - return result -} - -function biDump(b) { - return (b.isNeg ? "-" : "") + b.digits.join(" ") -} - -function biAdd(x, y) { - var result; - if (x.isNeg != y.isNeg) { - y.isNeg = !y.isNeg; - result = biSubtract(x, y); - y.isNeg = !y.isNeg - } else { - result = new BigInt; - var c = 0; - var n; - for (var i = 0; i < x.digits.length; ++i) { - n = x.digits[i] + y.digits[i] + c; - result.digits[i] = n & 65535; - c = Number(n >= biRadix) - } - result.isNeg = x.isNeg - } - return result -} - -function biSubtract(x, y) { - var result; - if (x.isNeg != y.isNeg) { - y.isNeg = !y.isNeg; - result = biAdd(x, y); - y.isNeg = !y.isNeg - } else { - result = new BigInt; - var n, c; - c = 0; - for (var i = 0; i < x.digits.length; ++i) { - n = x.digits[i] - y.digits[i] + c; - result.digits[i] = n & 65535; - if (result.digits[i] < 0) result.digits[i] += biRadix; - c = 0 - Number(n < 0) - } - if (c == -1) { - c = 0; - for (var i = 0; i < x.digits.length; ++i) { - n = 0 - result.digits[i] + c; - result.digits[i] = n & 65535; - if (result.digits[i] < 0) result.digits[i] += biRadix; - c = 0 - Number(n < 0) - } - result.isNeg = !x.isNeg - } else { - result.isNeg = x.isNeg - } - } - return result -} - -function biHighIndex(x) { - var result = x.digits.length - 1; - while (result > 0 && x.digits[result] == 0)--result; - return result -} - -function biNumBits(x) { - var n = biHighIndex(x); - var d = x.digits[n]; - var m = (n + 1) * bitsPerDigit; - var result; - for (result = m; result > m - bitsPerDigit; --result) { - if ((d & 32768) != 0) break; - d <<= 1 - } - return result -} - -function biMultiply(x, y) { - var result = new BigInt; - var c; - var n = biHighIndex(x); - var t = biHighIndex(y); - var u, uv, k; - for (var i = 0; i <= t; ++i) { - c = 0; - k = i; - for (j = 0; j <= n; ++j, ++k) { - uv = result.digits[k] + x.digits[j] * y.digits[i] + c; - result.digits[k] = uv & maxDigitVal; - c = uv >>> biRadixBits - } - result.digits[i + n + 1] = c - } - result.isNeg = x.isNeg != y.isNeg; - return result -} - -function biMultiplyDigit(x, y) { - var n, c, uv; - result = new BigInt; - n = biHighIndex(x); - c = 0; - for (var j = 0; j <= n; ++j) { - uv = result.digits[j] + x.digits[j] * y + c; - result.digits[j] = uv & maxDigitVal; - c = uv >>> biRadixBits - } - result.digits[1 + n] = c; - return result -} - -function arrayCopy(src, srcStart, dest, destStart, n) { - var m = Math.min(srcStart + n, src.length); - for (var i = srcStart, j = destStart; i < m; ++i, ++j) { - dest[j] = src[i] - } -} -var highBitMasks = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535); - -function biShiftLeft(x, n) { - var digitCount = Math.floor(n / bitsPerDigit); - var result = new BigInt; - arrayCopy(x.digits, 0, result.digits, digitCount, result.digits.length - digitCount); - var bits = n % bitsPerDigit; - var rightBits = bitsPerDigit - bits; - for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) { - result.digits[i] = result.digits[i] << bits & maxDigitVal | (result.digits[i1] & highBitMasks[bits]) >>> rightBits - } - result.digits[0] = result.digits[i] << bits & maxDigitVal; - result.isNeg = x.isNeg; - return result -} -var lowBitMasks = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535); - -function biShiftRight(x, n) { - var digitCount = Math.floor(n / bitsPerDigit); - var result = new BigInt; - arrayCopy(x.digits, digitCount, result.digits, 0, x.digits.length - digitCount); - var bits = n % bitsPerDigit; - var leftBits = bitsPerDigit - bits; - for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) { - result.digits[i] = result.digits[i] >>> bits | (result.digits[i1] & lowBitMasks[bits]) << leftBits - } - result.digits[result.digits.length - 1] >>>= bits; - result.isNeg = x.isNeg; - return result -} - -function biMultiplyByRadixPower(x, n) { - var result = new BigInt; - arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n); - return result -} - -function biDivideByRadixPower(x, n) { - var result = new BigInt; - arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n); - return result -} - -function biModuloByRadixPower(x, n) { - var result = new BigInt; - arrayCopy(x.digits, 0, result.digits, 0, n); - return result -} - -function biCompare(x, y) { - if (x.isNeg != y.isNeg) { - return 1 - 2 * Number(x.isNeg) - } - for (var i = x.digits.length - 1; i >= 0; --i) { - if (x.digits[i] != y.digits[i]) { - if (x.isNeg) { - return 1 - 2 * Number(x.digits[i] > y.digits[i]) - } else { - return 1 - 2 * Number(x.digits[i] < y.digits[i]) - } - } - } - return 0 -} - -function biDivideModulo(x, y) { - var nb = biNumBits(x); - var tb = biNumBits(y); - var origYIsNeg = y.isNeg; - var q, r; - if (nb < tb) { - if (x.isNeg) { - q = biCopy(bigOne); - q.isNeg = !y.isNeg; - x.isNeg = false; - y.isNeg = false; - r = biSubtract(y, x); - x.isNeg = true; - y.isNeg = origYIsNeg - } else { - q = new BigInt; - r = biCopy(x) - } - return new Array(q, r) - } - q = new BigInt; - r = x; - var t = Math.ceil(tb / bitsPerDigit) - 1; - var lambda = 0; - while (y.digits[t] < biHalfRadix) { - y = biShiftLeft(y, 1); - ++lambda; - ++tb; - t = Math.ceil(tb / bitsPerDigit) - 1 - } - r = biShiftLeft(r, lambda); - nb += lambda; - var n = Math.ceil(nb / bitsPerDigit) - 1; - var b = biMultiplyByRadixPower(y, n - t); - while (biCompare(r, b) != -1) { - ++q.digits[n - t]; - r = biSubtract(r, b) - } - for (var i = n; i > t; --i) { - var ri = i >= r.digits.length ? 0 : r.digits[i]; - var ri1 = i - 1 >= r.digits.length ? 0 : r.digits[i - 1]; - var ri2 = i - 2 >= r.digits.length ? 0 : r.digits[i - 2]; - var yt = t >= y.digits.length ? 0 : y.digits[t]; - var yt1 = t - 1 >= y.digits.length ? 0 : y.digits[t - 1]; - if (ri == yt) { - q.digits[i - t - 1] = maxDigitVal - } else { - q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt) - } - var c1 = q.digits[i - t - 1] * (yt * biRadix + yt1); - var c2 = ri * biRadixSquared + (ri1 * biRadix + ri2); - while (c1 > c2) { - --q.digits[i - t - 1]; - c1 = q.digits[i - t - 1] * (yt * biRadix | yt1); - c2 = ri * biRadix * biRadix + (ri1 * biRadix + ri2) - } - b = biMultiplyByRadixPower(y, i - t - 1); - r = biSubtract(r, biMultiplyDigit(b, q.digits[i - t - 1])); - if (r.isNeg) { - r = biAdd(r, b); - --q.digits[i - t - 1] - } - } - r = biShiftRight(r, lambda); - q.isNeg = x.isNeg != origYIsNeg; - if (x.isNeg) { - if (origYIsNeg) { - q = biAdd(q, bigOne) - } else { - q = biSubtract(q, bigOne) - } - y = biShiftRight(y, lambda); - r = biSubtract(y, r) - } - if (r.digits[0] == 0 && biHighIndex(r) == 0) r.isNeg = false; - return new Array(q, r) -} - -function biDivide(x, y) { - return biDivideModulo(x, y)[0] -} - -function biModulo(x, y) { - return biDivideModulo(x, y)[1] -} - -function biMultiplyMod(x, y, m) { - return biModulo(biMultiply(x, y), m) -} - -function biPow(x, y) { - var result = bigOne; - var a = x; - while (true) { - if ((y & 1) != 0) result = biMultiply(result, a); - y >>= 1; - if (y == 0) break; - a = biMultiply(a, a) - } - return result -} - -function biPowMod(x, y, m) { - var result = bigOne; - var a = x; - var k = y; - while (true) { - if ((k.digits[0] & 1) != 0) result = biMultiplyMod(result, a, m); - k = biShiftRight(k, 1); - if (k.digits[0] == 0 && biHighIndex(k) == 0) break; - a = biMultiplyMod(a, a, m) - } - return result -} - -function BarrettMu(m) { - this.modulus = biCopy(m); - this.k = biHighIndex(this.modulus) + 1; - var b2k = new BigInt(); - b2k.digits[2 * this.k] = 1; - this.mu = biDivide(b2k, this.modulus); - this.bkplus1 = new BigInt(); - this.bkplus1.digits[this.k + 1] = 1; - this.modulo = BarrettMu_modulo; - this.multiplyMod = BarrettMu_multiplyMod; - this.powMod = BarrettMu_powMod -} - -function BarrettMu_modulo(x) { - var q1 = biDivideByRadixPower(x, this.k - 1); - var q2 = biMultiply(q1, this.mu); - var q3 = biDivideByRadixPower(q2, this.k + 1); - var r1 = biModuloByRadixPower(x, this.k + 1); - var r2term = biMultiply(q3, this.modulus); - var r2 = biModuloByRadixPower(r2term, this.k + 1); - var r = biSubtract(r1, r2); - if (r.isNeg) { - r = biAdd(r, this.bkplus1) - } - var rgtem = biCompare(r, this.modulus) >= 0; - while (rgtem) { - r = biSubtract(r, this.modulus); - rgtem = biCompare(r, this.modulus) >= 0 - } - return r -} - -function BarrettMu_multiplyMod(x, y) { - var xy = biMultiply(x, y); - return this.modulo(xy) -} - -function BarrettMu_powMod(x, y) { - var result = new BigInt; - result.digits[0] = 1; - var a = x; - var k = y; - while (true) { - if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a); - k = biShiftRight(k, 1); - if (k.digits[0] == 0 && biHighIndex(k) == 0) break; - a = this.multiplyMod(a, a) - } - return result -}; - diff --git a/src/model/Crypto.js b/src/model/Crypto.js index 856d473..cf3e9fb 100644 --- a/src/model/Crypto.js +++ b/src/model/Crypto.js @@ -3,55 +3,18 @@ */ var crypto = require('crypto'); -var bi = require('./BigInt'); +var bigInt = require('big-integer'); -function RSAKeyPair(encryptionExponent, decryptionExponent, modulus) { - this.radix = 16; - this.e = bi.newInstance(encryptionExponent, this.radix); - this.d = bi.newInstance(decryptionExponent, this.radix); - this.m = bi.newInstance(modulus, 16); - this.hex = bi.newInstance(this.m, this.radix); - this.chunkSize = 2 * bi.highIndex(this.m); -} - - -function encryptedString(key, s) { - var a = new Array(); - var sl = s.length; - for (var i = 0; i < sl; i++) { - a[i] = s.charCodeAt(i); - } - while (a.length % key.chunkSize != 0) a[i++] = 0; - var al = a.length, result = '', j, k, block; - for (i = 0; i < al; i += key.chunkSize) { - block = bi.newInstance(); - for (j = 0, k = i; k < i + key.chunkSize; ++j) { - block.digits[j] = a[k++]; - block.digits[j] += a[k++] << 8; - } - var crypt = key.hex.powMod(block, key.e); - var text = crypt.toString(key.radix == 16 ? 'hex' : ''); - result += text + ' '; +function addPadding(encText, modulus) { + var ml = modulus.length; + for (i = 0; ml > 0 && modulus[i] == '0'; i++)ml--; + var num = ml - encText.length, prefix = ''; + for (var i = 0; i < num; i++) { + prefix += '0'; } - return result.substring(0, result.length - 1); + return prefix + encText; } -//function decryptedString(key, s) { -// var blocks = s.split(" "); -// var result = ""; -// var i, j, block; -// for (i = 0; i < blocks.length; ++i) { -// var b = bi.newInstance(blocks[i], key.radix); -// block = key.hex.powMod(bi, key.d); -// for (j = 0; j <= b.highIndex(block); ++j) { -// result += String.fromCharCode(block.digits[j] & 255, block.digits[j] >> 8) -// } -// } -// if (result.charCodeAt(result.length - 1) == 0) { -// result = result.substring(0, result.length - 1) -// } -// return result -//} function aesEncrypt(text, secKey) { var cipher = crypto.createCipheriv('AES-128-CBC', secKey, '0102030405060708'); @@ -63,12 +26,16 @@ function aesEncrypt(text, secKey) { * @param text {string} - raw data to encrypt * @param exponent {string} - public exponent * @param modulus {string} - modulus - * @returns {string} - encrypted data: text^pubKey%modulus + * @returns {string} - encrypted data: reverseText^pubKey%modulus */ function rsaEncrypt(text, exponent, modulus) { - var keys = new RSAKeyPair(exponent, "", modulus); - var encText = encryptedString(keys, text); - return encText; + var rText = '', radix = 16; + for (var i = text.length - 1; i >= 0; i--) rText += text[i];//reverse text + var biText = bigInt(new Buffer(rText).toString('hex'), radix), + biEx = bigInt(exponent, radix), + biMod = bigInt(modulus, radix), + biRet = biText.modPow(biEx, biMod); + return addPadding(biRet.toString(radix), modulus); } function createSecretKey(size) { @@ -81,36 +48,20 @@ function createSecretKey(size) { } return key; } - -var Crypto = (function () { - var _modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'; - var _nonce = '0CoJUm6Qyw8W8jud'; - var _pubKey = '010001'; - var _pem = '-----BEGIN RSA PUBLIC KEY-----\n' + - 'MIGJAoGBAOC1CfYlnfhkLbw1ZikBR33yJnfsFStf9orOYVu3tyUVKzqxeodq6opa\n' + - 'p20uQXYp7E7jQfVhNfzPaVKAEE4DEuy9qSVXyThwEUr2ydBcT38MNoW3pGvuJVky\n' + - 'V1zOELQk2BPP5IddPoIEe5fd71J0HVRrjiidxpNbPs4EYtsKIrjnAgMBAAE=\n' + - 'OWRjNjkzNWIzZWNlMDQ2MmRiMGEyMmI4ZTcCBjAxMDAwMQ==\n' + - '-----END RSA PUBLIC KEY-----'; - var ret = {}; - ret.MD5 = function (text) { +var modulus = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'; +var nonce = '0CoJUm6Qyw8W8jud'; +var pubKey = '010001'; +var Crypto = { + MD5: function (text) { return crypto.createHash('md5').update(text).digest('hex'); - } - ret.aesRsaEncrypt = function (text, pubKey, modulus, nonce) { - modulus = modulus || _modulus; - nonce = nonce || _nonce; - pubKey = pubKey || _pubKey; - var result = {}; + }, + aesRsaEncrypt: function (text) { var secKey = createSecretKey(16); - result.encText = aesEncrypt(text, nonce); - console.log('encText1', result.encText); - result.encText = aesEncrypt(result.encText, secKey); - console.log('encText2', result.encText); - result.encSecKey = rsaEncrypt(secKey, pubKey, modulus); - console.log('encSecKey', result.encSecKey); - return result; + return { + params: aesEncrypt(aesEncrypt(text, nonce), secKey), + encSecKey: rsaEncrypt(secKey, pubKey, modulus) + } } - return ret; -})(); +}; module.exports = Crypto; -//mm.aesRsaEncrypt('{"phone":"000000","password":"670b14728ad9902aecba32e22fa4f6bd","rememberLogin":"true"}'); \ No newline at end of file + diff --git a/src/model/FileManager.js b/src/model/FileManager.js index 172a0ea..7301d8d 100644 --- a/src/model/FileManager.js +++ b/src/model/FileManager.js @@ -9,7 +9,6 @@ var process = require('process'); var path = require('path'); var home = require('home'); - function pack(arr) { if (!utils.isArray(arr))return []; arr = arr.map(function (o) { @@ -60,8 +59,7 @@ var fm = {}; config.content = JSON.parse(storage.getItem(config.key)) || {}; module.exports = fm; - -fm.SaveChanges = function () { +fm.saveChanges = function () { [config, scheme].forEach(function (o) { o.isChanged && storage.setItem(o.key, JSON.stringify(o.content)); }); diff --git a/src/model/NetEaseMusic.js b/src/model/NetEaseMusic.js index c04fb05..309342c 100644 --- a/src/model/NetEaseMusic.js +++ b/src/model/NetEaseMusic.js @@ -29,28 +29,23 @@ var httpRequest = function (method, url, data, callback) { } module.exports = { login: function (username, password, callback) { - var url, name, pattern = /^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$/ + var url, pattern = /^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$/, + body = { + password: crypto.MD5(password), + rememberLogin: 'true' + }; if (pattern.test(username)) { //手机登录 - name = 'phone'; + body.phone = username; url = 'http://music.163.com/weapi/login/cellphone/'; } else { //邮箱登录 - name = 'username'; + body.name = username; url = 'http://music.163.com/weapi/login/'; } - //对password加密 - password = crypto.MD5(password); - var data = {}; - data[name] = username; - data.password = password; - data.rememberLogin = 'true'; - var ret = crypto.aesRsaEncrypt(JSON.stringify(data)); - var encData = { - params: ret.encText, - encSecKey: ret.encSecKey - } - httpRequest('post', url, encData, function (err, res) { + + var encBody = crypto.aesRsaEncrypt(JSON.stringify(body)); + httpRequest('post', url, encBody, function (err, res) { if (err) { callback({msg: '[login]http error ' + err, type: 1}); return; diff --git a/src/shell/icon.svg b/src/shell/icon.svg new file mode 100644 index 0000000..4ed26e8 --- /dev/null +++ b/src/shell/icon.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + diff --git a/src/shell/install.sh b/src/shell/install.sh new file mode 100755 index 0000000..f0ed8b7 --- /dev/null +++ b/src/shell/install.sh @@ -0,0 +1,9 @@ +#!/bin/bash -e +echo "start installation,Please do NOT run in root!" +baseDir=$(cd "$(dirname "$0")"; pwd) +fileName="nwMusicBox.desktop" +filePath="$HOME/.local/share/applications/" +[[ -d "$filePath" ]] || mkdir -p "$filePath" +cp -f "$baseDir/$fileName" "$filePath" +sed -i "s@__Exec@$baseDir/nwMusicBox@g; s@__Icon@$baseDir/icon.svg@g" "$filePath/$fileName" +echo "installation completed!" \ No newline at end of file diff --git a/src/shell/nwMusicBox.desktop b/src/shell/nwMusicBox.desktop new file mode 100755 index 0000000..9f46310 --- /dev/null +++ b/src/shell/nwMusicBox.desktop @@ -0,0 +1,11 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Type=Application +Categories=Audio;Music;Player;AudioVideo;Network; +Name=网易音乐盒 +Comment=nw_musicbox Launcher +Exec=__Exec +Icon=__Icon +Terminal=false +StartupNotify=true + diff --git "a/src/shell/\345\256\211\350\243\205\350\257\264\346\230\216" "b/src/shell/\345\256\211\350\243\205\350\257\264\346\230\216" new file mode 100644 index 0000000..9ca06c5 --- /dev/null +++ "b/src/shell/\345\256\211\350\243\205\350\257\264\346\230\216" @@ -0,0 +1,2 @@ +双击nwMusicBox即可打开程序。 +如需建立桌面图标,在当前窗口打开终端,执行sh install.sh \ No newline at end of file