Esempio n. 1
0
        /// <summary>
        /// Authentication module
        /// </summary>
        public Auth() : base("/api/auth")
        {
            // Request Body (safer) { "user":"******", "pass":"******", "device":"device name" }
            // return apikey=yzx
            Post["/"] = x =>
            {
                string apiKey = "";

                //Bind POST body
                AuthUser auth = this.Bind();
                if (!string.IsNullOrEmpty(auth.user))
                {
                    if (!string.IsNullOrEmpty(auth.device) & auth.pass != null)
                    {
                        //create and save new token for authenticated user or return known one
                        apiKey = UserDatabase.ValidateUser(auth.user, Digest.Hash(auth.pass), auth.device);

                        if (string.IsNullOrEmpty(apiKey))
                        {
                            return(new Response {
                                StatusCode = HttpStatusCode.Unauthorized
                            });
                        }
                        else
                        {
                            return(this.Response.AsJson(new { apikey = apiKey }));
                        }
                    }
                    else
                    {
                        //if password or device is missing
                        return(new Response {
                            StatusCode = HttpStatusCode.BadRequest
                        });
                    }
                }
                else
                {
                    //if bind failed
                    return(new Response {
                        StatusCode = HttpStatusCode.ExpectationFailed
                    });
                }
            };

            //remove apikey from database
            //pass it as ?apikey=xyz
            Delete["/"] = x =>
            {
                var apiKey = (string)this.Request.Query.apikey;
                if (UserDatabase.RemoveApiKey(apiKey))
                {
                    return(HttpStatusCode.OK);
                }
                else
                {
                    return(HttpStatusCode.InternalServerError);
                }
            };
        }
Esempio n. 2
0
        /// <summary>
        /// Create user from Contract_JMMUser
        /// </summary>
        /// <returns></returns>
        private object CreateUser()
        {
            Request     request = this.Request;
            SVR_JMMUser _user   = (SVR_JMMUser)this.Context.CurrentUser;

            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                user.Password       = Digest.Hash(user.Password);
                user.HideCategories = "";
                user.PlexUsers      = "";
                if (new ShokoServiceImplementation().SaveUser(user) == "")
                {
                    return(APIStatus.statusOK());
                }
                else
                {
                    return(APIStatus.internalError());
                }
            }
            else
            {
                return(APIStatus.adminNeeded());
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Create user from Contract_JMMUser
        /// </summary>
        /// <returns></returns>
        private object CreateUser()
        {
            Request request = this.Request;

            Entities.JMMUser _user = (Entities.JMMUser) this.Context.CurrentUser;
            if (_user.IsAdmin == 1)
            {
                Contract_JMMUser user = this.Bind();
                user.Password       = Digest.Hash(user.Password);
                user.HideCategories = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);
                user.PlexUsers      = new HashSet <string>(StringComparer.InvariantCultureIgnoreCase);
                if (new JMMServiceImplementation().SaveUser(user) == "")
                {
                    return(APIStatus.statusOK());
                }
                else
                {
                    return(APIStatus.internalError());
                }
            }
            else
            {
                return(APIStatus.adminNeeded());
            }
        }
Esempio n. 4
0
        public byte[] InputHash(SigHash hashType, Script subScript, int inputIndex)
        {
            if (hashType.HasFlag(SigHash.None))
            {
                throw new NotImplementedException();
            }
            if (hashType.HasFlag(SigHash.Single))
            {
                throw new NotImplementedException();
            }
            if (hashType.HasFlag(SigHash.AnyoneCanPay))
            {
                throw new NotImplementedException();
            }

            Transaction copy = Transaction.FromByteArray(ToByteArray());

            foreach (Input input in copy.Inputs)
            {
                input.ScriptSig = new Script();
            }

            copy.Inputs[inputIndex].ScriptSig = subScript;

            var verify = new List <byte>();

            verify.AddRange(copy.ToByteArray());
            verify.AddRange(BitConverter.GetBytes((UInt32)hashType));

            return(Digest.Hash <SHA256, SHA256>(verify.ToArray()));
        }
Esempio n. 5
0
        public ActionResult ChangePassword(int userID, [FromBody] string password, bool revokeAPIKeys = true)
        {
            try
            {
                SVR_JMMUser jmmUser = RepoFactory.JMMUser.GetByID(userID);
                if (jmmUser == null)
                {
                    return(BadRequest("User not found"));
                }
                if (jmmUser.JMMUserID != User.JMMUserID && !User.IsAdminUser())
                {
                    return(Unauthorized());
                }

                jmmUser.Password = Digest.Hash(password);
                RepoFactory.JMMUser.Save(jmmUser, false);
                if (revokeAPIKeys)
                {
                    RepoFactory.AuthTokens.DeleteAllWithUserID(jmmUser.JMMUserID);
                }
            }
            catch (Exception ex)
            {
                return(InternalError(ex.ToString()));
            }

            return(Ok());
        }
Esempio n. 6
0
        private static byte[] GetChecksum(byte[] data)
        {
//			SHA256 sha256 = new SHA256Managed();
            byte[] hash = Digest.Hash <SHA256, SHA256>(data);

            var result = new byte[ChecksumSizeInBytes];

            Buffer.BlockCopy(hash, 0, result, 0, result.Length);

            return(result);
        }
Esempio n. 7
0
        public void MultiDigest()
        {
            Assert.AreEqual(
                Digest.Hash <SHA256, SHA256>(new byte[] { 0x01, 0x02, 0x03 }),
                new byte[] { 0x19, 0xC6, 0x19, 0x7E, 0x21, 0x40, 0xB9, 0xD0, 0x34, 0xFB, 0x20, 0xB9, 0xAC, 0x7B, 0xB7, 0x53, 0xA4, 0x12, 0x33, 0xCA, 0xF1, 0xE1, 0xDA, 0xFD, 0xA7, 0x31, 0x6A, 0x99, 0xCE, 0xF4, 0x14, 0x16 }
                );

            Assert.AreEqual(
                Digest.Hash <SHA256, RIPEMD160>(new byte[] { 0x01, 0x02, 0x03 }),
                new byte[] { 0x6B, 0x6E, 0x89, 0x5C, 0x36, 0x97, 0x9F, 0xB6, 0x06, 0x47, 0x3E, 0x08, 0x68, 0x68, 0x0F, 0x64, 0xBF, 0x72, 0x16, 0x64, 0x2A, 0x16, 0x70, 0xC1, 0xF2, 0x5E, 0xE3, 0xD2, 0xDE, 0x75, 0xAB, 0x71 }
                );
        }
Esempio n. 8
0

        
Esempio n. 9
0
 public JMMUser AuthenticateUser(string userName, string password)
 {
     using (var session = JMMService.SessionFactory.OpenSession())
     {
         string  hashedPassword = Digest.Hash(password);
         JMMUser cr             = session
                                  .CreateCriteria(typeof(JMMUser))
                                  .Add(Restrictions.Eq("Username", userName))
                                  .Add(Restrictions.Eq("Password", hashedPassword))
                                  .UniqueResult <JMMUser>();
         return(cr);
     }
 }
Esempio n. 10
0
        public ActionResult ChangePassword([FromBody] string newPassword)
        {
            try
            {
                User.Password = Digest.Hash(newPassword.Trim());
                RepoFactory.JMMUser.Save(User, false);
                RepoFactory.AuthTokens.DeleteAllWithUserID(User.JMMUserID);
                return(Ok());
            }
            catch (Exception ex)
            {
                logger.Error(ex, ex.ToString());
            }

            return(InternalError());
        }
Esempio n. 11
0
        /// <summary>
        /// Create user from Contract_JMMUser
        /// </summary>
        /// <returns></returns>
        private object CreateUser()
        {
            SVR_JMMUser _user = (SVR_JMMUser)Context.CurrentUser;

            if (_user.IsAdmin == 1)
            {
                JMMUser user = this.Bind();
                user.Password       = Digest.Hash(user.Password);
                user.HideCategories = string.Empty;
                user.PlexUsers      = string.Empty;
                return(new ShokoServiceImplementation().SaveUser(user) == string.Empty
                    ? APIStatus.OK()
                    : APIStatus.InternalError());
            }

            return(APIStatus.AdminNeeded());
        }
Esempio n. 12
0
        private void CreateInitialUsers()
        {
            if (RepoFactory.JMMUser.GetAll().Any())
            {
                return;
            }

            Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(ServerSettings.Instance.Culture);

            string defaultPassword = ServerSettings.Instance.Database.DefaultUserPassword == ""
                ? ""
                : Digest.Hash(ServerSettings.Instance.Database.DefaultUserPassword);
            SVR_JMMUser defaultUser = new SVR_JMMUser
            {
                CanEditServerSettings = 1,
                HideCategories        = string.Empty,
                IsAdmin     = 1,
                IsAniDBUser = 1,
                IsTraktUser = 1,
                Password    = defaultPassword,
                Username    = ServerSettings.Instance.Database.DefaultUserUsername
            };

            RepoFactory.JMMUser.Save(defaultUser, true);

            SVR_JMMUser familyUser = new SVR_JMMUser
            {
                CanEditServerSettings = 1,
                HideCategories        = "ecchi,nudity,sex,sexual abuse,horror,erotic game,incest,18 restricted",
                IsAdmin     = 1,
                IsAniDBUser = 1,
                IsTraktUser = 1,
                Password    = string.Empty,
                Username    = "******"
            };

            RepoFactory.JMMUser.Save(familyUser, true);
        }
Esempio n. 13
0
        public JMMUser AuthenticateUser(string userName, string password)
        {
            string hashedPassword = Digest.Hash(password);

            return(Cache.Values.FirstOrDefault(a => a.Username == userName && a.Password == hashedPassword));
        }
Esempio n. 14
0
 /// <summary>
 /// Returns the address that corresponds to the public part of this ECKey. Note that an address is derived from
 /// the RIPEMD-160 hash of the public key and is not the public key itself (which is too large to be convenient).
 /// </summary>
 public Address ToAddress()
 {
     byte[] hashedPubKey = Digest.Hash <RIPEMD160, SHA256>(PubKey);
     return(new Address(Base58.EncodeWithChecksum(ArrayHelpers.ConcatArrays(new byte[] { 0x00 }, hashedPubKey))));
 }
Esempio n. 15
0
 public MessageHeader(string command, byte[] payload)
 {
     Command          = command;
     PayloadLength    = (UInt32)payload.Length;
     ExpectedChecksum = Digest.Hash <SHA256, SHA256>(payload).Take(4).ToArray();
 }
Esempio n. 16
0
        public void Step()
        {
            byte next            = Execution.Pop();
            bool branchIsRunning = RunBranch.Items.All(b => b);

            if (branchIsRunning)
            {
                if (Opcodes.IsFastPush(next))
                {
                    Main.Push(Execution.Pop(next));
                }
                else
                {
                    switch ((Op)next)
                    {
                    case Op.False:
                        Main.Push(false);
                        break;

                    case Op.PushData1:
                        int i = new SignedInt(Execution.Pop()).Value;
                        Main.Push(Execution.Pop(i));
                        break;

                    case Op.PushData2:
                        Main.Push(Execution.Pop(new SignedInt(Execution.Pop(2)).Value));
                        break;

                    case Op.PushData4:
                        Main.Push(Execution.Pop(new SignedInt(Execution.Pop(4)).Value));
                        break;

                    case Op.Negate1:
                        Main.Push(-1);
                        break;

                    case Op.True:
                        Main.Push(true);
                        break;

                    case Op.Num2:
                        Main.Push(2);
                        break;

                    case Op.Num3:
                        Main.Push(3);
                        break;

                    case Op.Num4:
                        Main.Push(4);
                        break;

                    case Op.Num5:
                        Main.Push(5);
                        break;

                    case Op.Num6:
                        Main.Push(6);
                        break;

                    case Op.Num7:
                        Main.Push(7);
                        break;

                    case Op.Num8:
                        Main.Push(8);
                        break;

                    case Op.Num9:
                        Main.Push(9);
                        break;

                    case Op.Num10:
                        Main.Push(10);
                        break;

                    case Op.Num11:
                        Main.Push(11);
                        break;

                    case Op.Num12:
                        Main.Push(12);
                        break;

                    case Op.Num13:
                        Main.Push(13);
                        break;

                    case Op.Num14:
                        Main.Push(14);
                        break;

                    case Op.Num15:
                        Main.Push(15);
                        break;

                    case Op.Num16:
                        Main.Push(16);
                        break;

                    case Op.Verify:
                        if (!Main.PopTruth())
                        {
                            throw new Exception();
                        }
                        break;

                    case Op.Return:
                        throw new Exception();

                    case Op.ToAltStack:
                        Alt.Push(Main.Pop());
                        break;

                    case Op.FromAltStack:
                        Main.Push(Alt.Pop());
                        break;

                    case Op.IfDup:
                        if (Main.IsTrue)
                        {
                            Main.Push(Main[0]);
                        }
                        break;

                    case Op.Depth:
                        Main.Push(Main.Count);
                        break;

                    case Op.Drop:
                        Main.Pop();
                        break;

                    case Op.Dup:
                        Main.Push(Main[0]);
                        break;

                    case Op.Nip:
                        Main.RemoveAt(1);
                        break;

                    case Op.Over:
                        Main.Push(Main[1]);
                        break;

                    case Op.Pick:
                        Main.Push(Main[Main.PopInt()]);
                        break;

                    case Op.Roll:
                        int    index = Main.PopInt();
                        byte[] roll  = Main[index];
                        Main.RemoveAt(index);
                        Main.Push(roll);
                        break;

                    case Op.Rot:
                        byte[][] rot = Main.Pop(3);
                        Main.Push(new byte[][] { rot[0], rot[2], rot[1] });
                        break;

                    case Op.Swap:
                        byte[][] swap = Main.Pop(2);
                        Main.Push(new byte[][] { swap[0], swap[1] });
                        break;

                    case Op.Tuck:
                        byte[][] tuck = Main.Pop(2);
                        Main.Push(new byte[][] { tuck[0], tuck[1], tuck[0] });
                        break;

                    case Op.Drop2:
                        Main.Pop(2);
                        break;

                    case Op.Dup2:
                        Main.Push(new byte[][] { Main[1], Main[0] });
                        break;

                    case Op.Dup3:
                        Main.Push(new byte[][] { Main[2], Main[1], Main[0] });
                        break;

                    case Op.Over2:
                        Main.Push(new byte[][] { Main[3], Main[2] });
                        break;

                    case Op.Rot2:
                        byte[][] rot2 = Main.Pop(6);
                        Main.Push(new byte[][] { rot2[1], rot2[0], rot2[5], rot2[4], rot2[3], rot2[2] });
                        break;

                    case Op.Swap2:
                        byte[][] swap2 = Main.Pop(4);
                        Main.Push(new byte[][] { swap2[2], swap2[3], swap2[0], swap2[1] });
                        break;

                    case Op.Size:
                        throw new NotImplementedException();

                    case Op.Equal:
                        Main.Push(Main[0].SequenceEqual(Main[1]));
                        break;

                    case Op.EqualVerify:
                        Main.Push(Main[0] == Main[1]);
                        goto case Op.Verify;

                    case Op.Add1:
                        Main.Push(Main.PopInt() + 1);
                        break;

                    case Op.Sub1:
                        Main.Push(Main.PopInt() - 1);
                        break;

                    case Op.Negate:
                        Main.Push(-Main.PopInt());
                        break;

                    case Op.Abs:
                        Main.Push(Math.Abs(Main.PopInt()));
                        break;

                    case Op.Not:
                        Main.Push(Main.PopInt() == 0 ? 1 : 0);
                        break;

                    case Op.NotEqual0:
                        Main.Push(Main.PopInt() == 0 ? 0 : 1);
                        break;

                    case Op.Add:
                        Main.Push(Main.PopInt() + Main.PopInt());
                        break;

                    case Op.Sub:
                        int b = Main.PopInt();
                        Main.Push(Main.PopInt() - b);
                        break;

                    case Op.BoolAnd:
                        Main.Push(Main.PopBool() && Main.PopBool());
                        break;

                    case Op.BoolOr:
                        Main.Push(Main.PopBool() || Main.PopBool());
                        break;

                    case Op.NumEqual:
                        Main.Push(Main.PopInt() == Main.PopInt());
                        break;

                    case Op.NumEqualVerify:
                        Main.Push(Main.PopInt() == Main.PopInt());
                        goto case Op.Verify;

                    case Op.NumNotEqual:
                        Main.Push(Main.PopInt() != Main.PopInt());
                        break;

                    case Op.LessThan:
                        Main.Push(Main.PopInt() < Main.PopInt());
                        break;

                    case Op.GreaterThan:
                        Main.Push(Main.PopInt() > Main.PopInt());
                        break;

                    case Op.LessThanOrEqual:
                        Main.Push(Main.PopInt() <= Main.PopInt());
                        break;

                    case Op.GreaterThanOrEqual:
                        Main.Push(Main.PopInt() >= Main.PopInt());
                        break;

                    case Op.Min:
                        Main.Push(Math.Min(Main.PopInt(), Main.PopInt()));
                        break;

                    case Op.Max:
                        Main.Push(Math.Max(Main.PopInt(), Main.PopInt()));
                        break;

                    case Op.Within:
                        int max = Main.PopInt();
                        int min = Main.PopInt();
                        int x   = Main.PopInt();
                        Main.Push(min <= x && x < max);
                        break;

                    case Op.RIPEMD160:
                        Main.Push(RIPEMD160.Hash(Main.Pop()));
                        break;

                    case Op.SHA1:
                        Main.Push(SHA1.Hash(Main.Pop()));
                        break;

                    case Op.SHA256:
                        Main.Push(SHA256.Hash(Main.Pop()));
                        break;

                    case Op.Hash160:
                        Main.Push(Digest.Hash <RIPEMD160, SHA256>(Main.Pop()));
                        break;

                    case Op.Hash256:
                        Main.Push(Digest.Hash <SHA256, SHA256>(Main.Pop()));
                        break;

                    case Op.CodeSeparator:
                        lastSeparatorIndex = _start.Count - Execution.Count;
                        break;

                    case Op.CheckSig:
//						Main.Push(Transaction.SigIsValid(Main.Pop(), Main.Pop(), SubScript, InputIndex));
                        throw new NotImplementedException();

                    case Op.CheckSigVerify:
                        throw new NotImplementedException();

                    case Op.CheckMultiSig:
                        throw new NotImplementedException();

                    case Op.CheckMultiSigVerify:
                        throw new NotImplementedException();

                    case Op.Reserved:
                    case Op.Ver:
                    case Op.Reserved1:
                    case Op.Reserved2:
                        throw new Exception(String.Format("Invalid script! (opcode {0} used)", (Op)next));


                    case Op.If:
                    case Op.NotIf:
                    case Op.Else:
                    case Op.EndIf:
                        goto case Op.Nop;

                    case Op.Nop:
                    case Op.Nop1:
                    case Op.Nop2:
                    case Op.Nop3:
                    case Op.Nop4:
                    case Op.Nop5:
                    case Op.Nop6:
                    case Op.Nop7:
                    case Op.Nop8:
                    case Op.Nop9:
                    case Op.Nop10:
                        break;

                    default:
                        throw new Exception(String.Format("{0} is an invalid opcode", next));
                    }
                }
            }

            switch ((Op)next)
            {
            case Op.If:
                RunBranch.Push(branchIsRunning && Main.PopBool());
                break;

            case Op.NotIf:
                RunBranch.Push(branchIsRunning && !Main.PopBool());
                break;

            case Op.Else:
                RunBranch.Push(!RunBranch.Pop() && !branchIsRunning);
                break;

            case Op.EndIf:
                RunBranch.Pop();
                break;

            case Op.VerIf:
            case Op.VerNotIf:
                throw new Exception(String.Format("Invalid script! (opcode {0} included)", (Op)next));
            }
        }