Greasy Fork is available in English.

Auto Login For Greasy Fork

Don't want to click to log in

// ==UserScript==
// @name         Auto Login For Greasy Fork
// @name-en      Auto Login For Greasy Fork
// @name-zh      自动登录 Greasy Fork
// @namespace    https://zfdev.com/
// @version      0.1
// @description  Don't want to click to log in
// @description-zh  不想每次打开网站都重新登录
// @author       greendev
// @match        https://greasyfork.org/*
// @grant        none
// @run-at       document-body
// ==/UserScript==

(function() {
    'use strict';

    // 如果你想加密
    // You can achieve their own
    let encryption = function(s){
        return s;
    }, decrypt =function(s){
        return s;
    }

    let $$$ = document.querySelector.bind(document),
        $$$$ = document.querySelectorAll.bind(document),
        local = {
            en:{
                btnName: 'Auto Login',
                tips: 'Requested login',
            },
            'zh-CN':{
                btnName: '自动登录',
                tips: '已请求登录',
            },
            'zh-TW':{
                btnName: '自動登入',
                tips: '已請求登錄',
            },
        },
        username , password, lang;

    let savePwd = function(u, p ){
        if (u && u.replace(/ /g,"") && p && p.replace(/ /g,"")){
            localStorage.setItem('zfdevAutoLoginU', encryption(u));
            localStorage.setItem('zfdevAutoLoginP', encryption(p));
            setSetting(true);
            return true;
        }
        return false;
    }, loadPwd = function(){
        let u = localStorage.getItem('zfdevAutoLoginU'),p = localStorage.getItem('zfdevAutoLoginP');
        if(u && p){
            username = decrypt(u); password = decrypt(p);
            return true;
        }
        return false;
    }, setSetting = function(state){
        localStorage.setItem('zfdevAutoLoginState', state);
    }, getSetting = function(){
        let s = localStorage.getItem('zfdevAutoLoginState');
        return s === null ? false : s==='true';
    }, getLang = function(){
        if(lang){return lang;};
        let l = $$$('html').lang;
        if(local.hasOwnProperty(l)){
            lang = 'en';
            return l;
        }
        lang = 'en';
        return 'en';
    };


    let loginPage = function(){
        let from = $$$('#new_user');
        let $loginBtn = document.createElement('div');
        $loginBtn.className = "zfdev-auto-login";
        let btnName = 'Auto Login';
        let lang = getLang();
        btnName = local[lang].btnName;
        let butHTML = '<div id="zfdev-auto-login" style="display:block;width:100%;min-height:34px;box-sizing:border-box;margin:0.5em 0 0 0;padding:6px 8px;font-size:14px;font-weight:bold;line-height:20px;text-align:center;vertical-align:middle;color:#fff;background-color:#670000;background-image:linear-gradient(#900,#670000);border:1px solid #ddd;border-radius:3px;cursor:pointer;">'+btnName+'</div>';
        $loginBtn.innerHTML = butHTML;
        from.appendChild($loginBtn);
        $loginBtn.onclick = function(){
            let u = $$$('#new_user input#user_email').value,
                p = $$$('#new_user input#user_password').value;
            savePwd(u, p) && from.submit();
            console.log('保存密码');
        }
    },
        isLogin = function(){
            let s = $$$('#site-nav .sign-in-link');
            return s ? false : true;
        },
        post = function(url, data){
            return new Promise(function(resolve, reject){
                var  xhr = new XMLHttpRequest();
                xhr.open("post", url, true);
                xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
                xhr.send(data);
                xhr.onreadystatechange = function(){
                    if (xhr.readyState == 4) {
                        if ( xhr.status >= 200 && xhr.status < 300 ) {
                            resolve(xhr);
                        }else if(xhr.status == 302){
                            resolve(xhr);
                        }
                    };
                }
            });
        };

    if(location.pathname.indexOf('users/sign_in') > 0){
        loginPage();
    }else{
        if(!isLogin()){
            if(getSetting() && loadPwd()){
                let token =$$$('meta[name="csrf-token"]').content;
                let data = 'utf8=%E2%9C%93&authenticity_token='+ encodeURIComponent(token) + '&user%5Bemail%5D=' + encodeURIComponent(username) + '&user%5Bpassword%5D=' + encodeURIComponent(password) + '&user%5Bremember_me%5D=1';
                let url ='/en/users/sign_in';
                post(url, data).then(r=>{
                    let s = $$$('#site-nav .sign-in-link a');
                    s.innerHTML = local[getLang()].tips;
                });

            }
        }else{
            $$$('#site-nav .sign-out-link').onclick = function(){
                setSetting(false);
            }

        }
    }


})();