25 Aralık 2018 Salı

Copy Paste Trim and Only Numeric

import { OnInit, Directive, HostListener, EventEmitter, Output } from "@angular/core";

@Directive({
selector: "[copyPasteTrimAndOnlyNumeric]",
providers: []
})
export class CopyPasteTrimAndOnlyNumericDirective {

@Output() ngModelChange: EventEmitter<any> = new EventEmitter();
value: any;

constructor() { }

ngOnInit(): void { }

@HostListener('paste', ['$event']) onPaste(e: ClipboardEvent) {
debugger
e.preventDefault();
let pastedText = e.clipboardData.getData('text');
if (pastedText) {
pastedText = pastedText.replace(/[^0-9]+/g, '')
if (pastedText && pastedText.length > 11)
pastedText = pastedText.substring(0, 11);
this.ngModelChange.emit(pastedText);
}
}
}

3 Aralık 2018 Pazartesi

Enum Display Name'ini çekme

using System;
using System.ComponentModel.DataAnnotations;
using System.Reflection;

public static class EnumExtensions
{
    public static string GetDisplayName(this Enum enu)
    {
        var attr = GetDisplayAttribute(enu);
        return attr != null ? attr.Name : enu.ToString();
    }

    public static string GetDescription(this Enum enu)
    {
        var attr = GetDisplayAttribute(enu);
        return attr != null ? attr.Description : enu.ToString();
    }

    private static DisplayAttribute GetDisplayAttribute(object value)
    {
        Type type = value.GetType();
        if (!type.IsEnum)
        {
            throw new ArgumentException(string.Format("Type {0} is not an enum", type));
        }

        // Get the enum field.
        var field = type.GetField(value.ToString());
        return field == null ? null : field.GetCustomAttribute<DisplayAttribute>();
    }
}

21 Kasım 2018 Çarşamba

Httpden dönen json datanın hepsini localStorage'e atma

var dataProperties = Object.getOwnPropertyNames(responseStart.data);
for(let i=0;i<datapProperties.length;i++){
localStorage.setItem(prefix+dataProperties[i],responseStart[dataProperties[i]])
}

12 Kasım 2018 Pazartesi

Angular Component değer alma, değer yollama/yayınlama

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';

@Component({
selector: 'ip-address',
templateUrl: './ip-address.component.html',
})
export class IpAddressComponent implements OnInit {

ipAddressParts: any[] = ["0", "0", "0", "0"];

tempValue;

@Input("value")
set IpAddressComponent(value: string) {
if (typeof value !== 'string' || value.indexOf('.') === -1) {
return;
}
else {
var parts = value.split(".");
for (let index in parts) {
this.ipAddressParts[index] = +parts[index];
}
}
}

get IpAddressComponent() {
return this.ipAddressParts.join(".");
}

@Output("value")
public ipAddressEmitter = new EventEmitter<string>();

constructor() { }

ngOnInit() {
}

}

Angular ngModel'in değerini directive içinde değiştirme

Çözüm bulduğum link:
@Directive({ 
  selector: '[ngModel][uppercase]',
  providers: [NgModel],
  host: {
    '(ngModelChange)' : 'onInputChange($event)'
  }
})
export class UppercaseDirective{
  constructor(private model:NgModel){}

  onInputChange(event){
    this.model.valueAccessor.writeValue(event.toUpperCase());
  }
}
Benim çözümüm
import { OnInit, Directive, HostListener, HostBinding, ElementRef } from "@angular/core";
import { NgModel } from "@angular/forms";
@Directive({
selector: "[ngModel][ipAddressMask]",
providers: [NgModel]
})
export class IpAddressMaskDirective implements OnInit {
navKeys = [39, 37, 8, 46, 65, 97] // Delete, Backspace, <- , ->, ctrl+a tuşlarını çıkarıyoruz
ipMaskChars = ["_", ".", "_", ".", "_", ".", "_"];
ipMask = "_._._._"
@HostBinding('attr.value') _value;
constructor(private elem: ElementRef, private model: NgModel) { }
@HostListener("keyup", ['$event']) hostKeyUpEvent($event: KeyboardEvent) {
let key = $event.key;
let code = +$event.keyCode;
debugger
if (!key) return;
let val = this.elem.nativeElement.value;
if (this.navKeys.indexOf(code) > -1) return;
let numReg = new RegExp("[0-9]");
let parts = val.split(".");
for (let i in parts)
parts[i] = parts[i].replace(/[^0-9\.]+/g, '');;
let outPut = parts.filter(c => Number(c));
if (!outPut) return;
let newValue = this.format(outPut);
this.elem.nativeElement.value = newValue;
this.model.viewToModelUpdate(newValue);
let SelectionPosition = this.getSelectionPosition(newValue);
this.elem.nativeElement.selectionStart = SelectionPosition;
this.elem.nativeElement.selectionEnd = SelectionPosition;
}
private getSelectionPosition(inputVal: string): number {
let position = 0;
if (inputVal) {
let parts = inputVal.split(".");
let outPut = parts.filter(c => Number(c));
if (parts && outPut) {
position += outPut.length;
for (let i = 0; i < outPut.length; i++) {
position += (outPut[i] + "").length > 3 ? 3 : (outPut[i] + "").length;
}
position--;
}
}
return position;
}
private format(outPut: string[]) {
let ipAddressChars = [];
let outPutLength = outPut && outPut.length;
debugger;
for (let i = 0; i < 4; i++) {
if (outPutLength > i) {
if ((outPut[i] + "").length > 3) {
if (i + 1 < 4) {
if (outPut[i + 1]) {
outPut[i + 1] = (outPut[i] + "").slice(3) + outPut[i + 1]
} else {
outPut[i + 1] = (outPut[i] + "").slice(3);
outPutLength = outPut.length;
}
outPut[i] = (outPut[i] + "").slice(0, 3);
} else {
outPut[i] = (outPut[i] + "").slice(0, 3);
}
}
if (+outPut[i] < 0) outPut[i] = "0";
else if (+outPut[i] > 255) outPut[i] = "255";
ipAddressChars.push(outPut[i]);
} else {
ipAddressChars.push("___");
}
}
return ipAddressChars.join(".");
}
ngOnInit(): void {
this._value = this.ipMask;
}
}

2 Kasım 2018 Cuma

Observable dummy data döndürme

public getCustomFunc(): Observable<any> {
let dummyData = {
                       //...
};

return Observable.create(observer => { observer.next(dummyData); });
}

30 Ekim 2018 Salı

OpenIddict

https://github.com/openiddict/openiddict-core

OpenIddict nedir?

OpenIddict herhangi bir ASP.NET Core 1.x veya 2.x uygulamasında OpenID Connect sunucusunu uygulamak için basit ve kullanımı kolay bir çözüm sunmayı amaçlamaktadır.

OpenIddict, OpenID Connect kimlik doğrulaması akışını kontrol etmek için AspNet.Security.OpenIdConnect.Server (ASOS) temel alır ve ASP.NET Core Identity dahil olmak üzere herhangi bir üyelik yığınıyla kullanılabilir.

OpenIddict, kod / örtülü / karma akışları ve istemci kimlik bilgilerini / kaynak sahibi parolalarını tam olarak destekler. Kendi özel onay türlerinizi de oluşturabilirsiniz.

Not: OpenIddict, Entity Framework Core, Entity Framework 6 ve MongoDB'yi kullanıma hazır olarak destekler ama kendi depolarınızı da sağlayabilirsiniz.


Neden bir OpenID Connect sunucusu?

Bir OpenID Connect sunucusunun uygulamanıza eklenmesi, token kimlik doğrulamasını desteklemenizi sağlar. Ayrıca API'nize kimin erişebileceğini ve her bir müşteriye verilen bilgileri kontrol etme gücü ile tüm kullanıcılarınızın tek bir merkezi yerde yerel şifrenizi veya harici bir kimlik sağlayıcısı (ör. Facebook veya Google) kullanarak yönetebilmelerini sağlar.


.net 6 mapget kullanımı

 app.UseEndpoints(endpoints => {     endpoints.MapGet("/", async context =>     {         var response = JsonConvert.Seriali...